Threads Zur Laufzeit hinzufügen/entfernen

annawald

Mitglied
Hi,
Ich möchte mehrere Threads mit JProgressBar ausgeben. und zwar soll man mit einem JButton("+") ein JProgressBar erzeugen und mit einem weiteren JButton("-") ein JProgressBar entfernen und Diese dann in einem Layout platzieren. Das ganze soll zur Laufzeit passieren, d.h. ich weiss nicht, wieviele zum Schluss gestartet werden sollen.

Im Moment habe ich einfach 3 neue Objekte erzeugt und im ActionListener einfach mit if-else hinzugefügt bzw. gelöscht, d.h. mehr als 3 JProgressBars kann ich im Moment nicht erzeugen.

Kann mir bitte jemand helfen, ich habe in einer Woche einen wichtigen Test, und das ist das einzige, das mir noch fehlt..

Danke im Voraus!
 
Tu die JProgressBars in eine Liste, dann kannst du mit einer Schleife darüber iterieren und die Werte ändern!
 
ich hab die JProgressBar jetzt in eine ArrayList getan, wie iteriere ich drüber, damit sie an der richtigen Stelle im GroupLayout angezeigt werden?
 
Also mein Code lautet jetzt:
Java:
List<JProgressBar> progressbars = new ArrayList<JProgressBar>();
		
	for (int i = 0; i < 100; i++) {
		JProgressBar pb = new JProgressBar();
		progressbars.add(pb);
	}

und wie füge ich nun immer 1 Objekt hinzu bzw. was muss ich in den ActionListener schreiben?
 
Also du hast deinen ActionListener für den Button, da schreibst du etwa das hin:
Java:
@Override
         public void actionPerformed(ActionEvent ev){
               JProgressBar deineProgressBar = new JProgressBar();
               progressbars.add(deineProgressBar);
               dasPanelMitDenProgressBars.add(deineProgressBar);
         }
 
also irgndwas mache ich falsch..???:L
Hier mal der ganze Code

Java:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;



public class PBars extends JFrame {
	List<JProgressBar> progressbars = new ArrayList<JProgressBar>();
	final JPanel panel = new JPanel();
	JButton plus = new JButton("+");
	JButton minus = new JButton("-");

	public PBars(){
		
		for (int i = 0; i < 100; i++) {
			JProgressBar pb = new JProgressBar();
		     progressbars.add(pb);
		}
		
		BorderLayout layout = new BorderLayout();

		add(plus, BorderLayout.NORTH);
		add(panel, BorderLayout.CENTER);
		add(minus, BorderLayout.SOUTH);

		ActionListener add = new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
				JProgressBar pb1 = new JProgressBar();
	         	         progressbars.add(pb1);
	         	         panel.add(pb1);
				
			}
		};

		ActionListener remove = new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent e) {
			
			}
		};

		plus.addActionListener(add);
		minus.addActionListener(remove);

		pack();
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	public static void main(String[] args) {
		new PBars().setVisible(true);
	}
}
 
folgendes musst du noch ändern:

Java:
import java.awt.GridLayout;


	final JPanel panel = new JPanel(new GridLayout(0, 1));

			@Override
			public void actionPerformed(final ActionEvent e) {
				System.out.println("Add");
				final JProgressBar pb1 = new JProgressBar(0, 100);
				progressbars.add(pb1);
				panel.add(pb1);
				revalidate();
			}


Edit: Ich seh gerade, die Schleife zuoberst im Konstruktor musst du entweder wegnehmen oder die Bars noch dem Panel hinzufügen.
 
Zuletzt bearbeitet von einem Moderator:
suer, danke, hat geklappt!

ich habe noch eine letzte frage. und zwar: wie spreche ich diese JProgressBars an. also wie heisst nun das Objekt, auf dem ich die start()-Methode aufrufen muss?
Es sollen alle JProgressBars gleichzeitig starten..
 
Du brauchst einen Thread, der die Liste durchgeht, danach kannst du mit
Code:
setValue(int value)
den gewünschten Wert setzen!
 

Zurück
Oben