Swing Aktualisieren eines JPanels

airglide

Mitglied
Hallo zusammen ;)

Ich möchte Daten, die in einer ArrayList abgespeichert sind zeichnen. Das klappt schon ganz gut, jedoch möchte ich jedesmal, wenn ich neue Daten hinzufüge, die Zeichnung aktualisieren und nicht erst am Schluss die gesamten Daten erhalten.

Ich hab schon ziemlich lange herumgesucht, und bin auf die Methoden repaint() und validate() gestossen. Habe schon verschiedene Kombinationen versucht, ebenfalls mit einem separaten Thread der repaint aufrufen sollte...

bin wirklich ahnungslos hoffe ihr könnt mir helfen

Java:
class plotPanel extends JPanel{
			public void paintComponent(Graphics g){
				super.paintComponents(g);
				
				final double dif = 20.0;
				Graphics2D g2d = (Graphics2D) g;
				
				int length = getWidth();
				int width = getHeight();		
				
				xAxis = new Line2D.Double(dif,(width/2),length-dif,width/2);
				yAxis = new Line2D.Double(length/2,dif,length/2,width-dif);
				
				g2d.draw(xAxis);
				g2d.draw(yAxis);
				
				g2d.setColor(Color.ORANGE);	
				for(int i=0;i < dataList.size();i++)
				{
				g2d.fill(new Ellipse2D.Double((length/2)+dataList.get(i).getX()-1.5,(width/2)+dataList.get(i).getY()-1.5, 3.0, 3.0));
				}
				
			}

das ganze liegt natürlich auf einem Frame, das ein JPanel enthält

[Java]
void gui(){
frame = new JFrame();
plot = new plotPanel();
plot.setPreferredSize(new Dimension(250,300));

mainPanel = new JPanel();
mainPanel.add(plot);

frame.add(BorderLayout.CENTER,mainPanel);
}
[/Java]

Das ganze wird gezeichnet, jedoch leider erst am Schluss, wenn ich das Fenster minimiere, was repaint afrufen sollte, wird das ganze frame schwarz und erst am ende des Programmes wird es neu gezeichnet

Danke für eure hilfe

airglide
 
S

SlaterB

Gast
> jedoch möchte ich jedesmal, wenn ich neue Daten hinzufüge, die Zeichnung aktualisieren und nicht erst am Schluss die gesamten Daten erhalten

das läßt vermuten dass irgendwo eine längerfristige Aktion läuft, die Daten hinzufügt, davon hast du keinen Code gepostet..,
falls diese Aktion aus einem Button-Listener oder so, jedenfalls von der GUI gestartet wird,
muss sie in einen separaten Thread verschoben werden,

solange der GUI-Thread, der die Listener ausführt, damit beschäftigt ist, kann er nicht zeichen
 

airglide

Mitglied
genau dass ist der fall, ich habe ein ActionListener der darauf wartet, dass man einen Button klickt, darin werden die daten eigelesen.

Wo und wie muss ich jetzt diesen Thread hinschreiben?

dachte an sowas:

[Java]
class Repaint implements Runnable{
public void run(){
plot.repaint();
}
}
[/Java]

[Java]
Repaint rpnt = new Repaint();
Thread meinThread = new Thread(rpnt);
meinThread.start()
[/Java]

Ich muss also den Thread vom actionListener starten?

danke für die schnelle hilfe ;)
 
Zuletzt bearbeitet:

Volvagia

Top Contributor
Warum ein ActionListener, der darauf wartet dass ein Button geklickt wird? :autsch: Wäre es nicht viel geschickter den ActionListener gleich an den Button anzuheften?
 

airglide

Mitglied
also ich habe einfach verschiedene buttons die mit .addActionListener(new Listener()) implementiert werden, stand so in meinem java buch :)

in wie fern ist der code richtig? es funktioniert immer noch nicht so wie ich will..
 

Volvagia

Top Contributor
Zeig mal das Codefragment, wo du ursprünglich repainten wolltest. Nur repaint in einen Thread auszulagern wird nichts bringen, da der Repaint-Vorgang sowieso von einen anderen Thread ausgeführt wird.
 

airglide

Mitglied
Java:
public void actionPerformed(ActionEvent event)
			{					
				
				try {
					// Verbindungsaufbau zu Gerät						
					}
					
					for (int j = 0; j < numberOfMeasurements; j++)
					{
					Daten einlesen

					
					// save in ArrayList
					plot.reprint();

					/*Repaint rpnt = new Repaint();
					Thread meinThread = new Thread(rpnt);
					meinThread.start();*/
					}
				
				
				
			}
		}
[/Java]

natürlich noch catch clauseln und so, der sinn wäre einfach dass er die Klasse plotPanel neu erstellt und dann einzeichnet
 
Zuletzt bearbeitet:

Volvagia

Top Contributor
Versuche es so in etwa:

Java:
public void actionPerformed(ActionEvent event) {
	new Thread("\"Get Data from Device, handle its and repaint\"-Thread") {
		public void run() {
			String[] someData = null;
			
			try {
				connectToDevice();
				someData = getDataFromDevice();
			} catch(IOException e) {
				e.printStackTrace();
			} finally {
				disconnectFromDevice();
			}
			
			for (int j = 0; j < someData.length; j++) {
				workWithData(j, someData);
				plot.repaint();					
				Thread.yield(); //Give other Threads more time.
			}
		}
	}.start();
}
private void workWithData(int j, String[] someData) {
	//TODO Do what you ever want with the data.
}
private String[] getDataFromDevice() {
	//TODO Get data here.
	return(null);
}
private void connectToDevice() throws IOException {
	//TODO Connect here.
}
private void disconnectFromDevice() {
	//TODO Disconnect here.
}
 

airglide

Mitglied
wow super es hat funktioniert!! dankee ;)

also wie sieht jetzt die theorie dazu aus? immer wenn ich ein actionlistener habe brauche ich einen neuen thread wenn ich etwas akutalisiern möchte?

ich hatte noch ein zweites Problem, es zeichnet es aber irgendwie ist das ganze beim zweiten mal verschoben und ich sehe einen knopf als bild in diesem frame der nicht da sein sollte :p

habe einfach frame.repaint gewählt, dass es das ganze neu zeichnet dann funktioniert es

vielen vielen dank, hast mir echt weitergeholfen ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Swing Aktualisieren eines JPanels nach Tasteneingabe AWT, Swing, JavaFX & SWT 2
Y Swing Aktualisieren eines JPanel mit ArrayList im TableLayout AWT, Swing, JavaFX & SWT 2
G Aktualisieren eines Thread? AWT, Swing, JavaFX & SWT 7
R Name eines Tabs aktualisieren AWT, Swing, JavaFX & SWT 2
K Aktualisieren eines JScrollPane AWT, Swing, JavaFX & SWT 2
C Default table model aktualisieren AWT, Swing, JavaFX & SWT 7
G JavaFX BarChart während der Runtime aktualisieren AWT, Swing, JavaFX & SWT 4
T TableView aktualisieren AWT, Swing, JavaFX & SWT 1
W JavaFX TableView aktualisieren AWT, Swing, JavaFX & SWT 1
D JavaFX Label flackert beim aktualisieren AWT, Swing, JavaFX & SWT 12
J Swing JLabel Verknüpfung aktualisieren AWT, Swing, JavaFX & SWT 3
J JavaFX Label aktualisieren AWT, Swing, JavaFX & SWT 18
M Muss man die ObservableList aktualisieren? AWT, Swing, JavaFX & SWT 3
B Bounds aller Panels aktualisieren AWT, Swing, JavaFX & SWT 0
-DD Lobby/Spielerliste aktualisieren bei Suche AWT, Swing, JavaFX & SWT 1
T JFrame aktualisieren AWT, Swing, JavaFX & SWT 2
M JavaFX Automatisches Aktualisieren der Seite AWT, Swing, JavaFX & SWT 26
ralfb1105 Swing JTable aktualisieren AWT, Swing, JavaFX & SWT 5
H JavaFX - Label aktualisieren AWT, Swing, JavaFX & SWT 1
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
Z jLabel von Methode aus aktualisieren AWT, Swing, JavaFX & SWT 7
J JTextfield automatisch aus zweiter Klasse aktualisieren AWT, Swing, JavaFX & SWT 5
J Tableview Daten hinzufügen und aktualisieren AWT, Swing, JavaFX & SWT 5
lumpigerAffe Swing Jframe aktualisieren AWT, Swing, JavaFX & SWT 27
R Swing Durch JComboBox-Item eine TextArea aktualisieren AWT, Swing, JavaFX & SWT 2
C JavaFX TreeTableView aktualisieren AWT, Swing, JavaFX & SWT 10
R GUI Element in einer Methode aktualisieren (JTextPane) AWT, Swing, JavaFX & SWT 13
thobren JavaFX textarea nach setPrefRowCount Ansicht aktualisieren AWT, Swing, JavaFX & SWT 1
Regedit JavaFX Java Canvas hört ständig auf zu aktualisieren/malen AWT, Swing, JavaFX & SWT 3
W Swing JLabel jede Sekunde aktualisieren, ohne Timer zu benutzen AWT, Swing, JavaFX & SWT 4
H Combobox aktualisieren AWT, Swing, JavaFX & SWT 2
A JFace/SWT: ListViewer Inhalt nach Selection in zweitem List Viewer aktualisieren! AWT, Swing, JavaFX & SWT 5
L GUI - Jpanel - Splitpane will nicht aktualisieren AWT, Swing, JavaFX & SWT 4
2 Zeit Differenz automatisch aktualisieren AWT, Swing, JavaFX & SWT 1
N JavaFX Stage aktualisieren AWT, Swing, JavaFX & SWT 5
A JComboBox mit Array aktualisieren AWT, Swing, JavaFX & SWT 7
S Swing JComboBox mit Listener aktualisieren AWT, Swing, JavaFX & SWT 13
O Statusleiste mit JLabel aktualisieren AWT, Swing, JavaFX & SWT 5
J JLabel während einer methode aktualisieren AWT, Swing, JavaFX & SWT 6
AssELAss Verzeichnis JFileChooser aktualisieren AWT, Swing, JavaFX & SWT 0
R AWT JLabel oder JButton aktualisieren AWT, Swing, JavaFX & SWT 1
T Int-Wert aktualisieren? AWT, Swing, JavaFX & SWT 9
A Swing JTextArea aus anderer Klasse in realtime aktualisieren AWT, Swing, JavaFX & SWT 3
S Combobox aktualisieren AWT, Swing, JavaFX & SWT 3
H Swing JfreeChart aktualisieren - mit daten aus thread AWT, Swing, JavaFX & SWT 3
J GUI/Random aktualisieren? AWT, Swing, JavaFX & SWT 3
T JtextPane Zeile aktualisieren AWT, Swing, JavaFX & SWT 3
P Swing Aktualisieren von JFrame in einem onClick-Ereignis AWT, Swing, JavaFX & SWT 11
B JTable aktualisieren AWT, Swing, JavaFX & SWT 22
K SWT DataBinding, Anzahl der Zeilen aktualisieren AWT, Swing, JavaFX & SWT 4
G JRadioButton aktualisieren nicht... AWT, Swing, JavaFX & SWT 10
C ToolTip aktualisieren AWT, Swing, JavaFX & SWT 2
D Swing JComboBox aktualisieren AWT, Swing, JavaFX & SWT 4
C TextFeld in Verbindung zur ComboBox automatisch aktualisieren AWT, Swing, JavaFX & SWT 7
J JList, Anzeige aktualisieren AWT, Swing, JavaFX & SWT 7
S Inhalt einer JComboBox aktualisieren AWT, Swing, JavaFX & SWT 6
M Swing JScrollPane (Parent JTextArea) aktualisieren + neue Zeile AWT, Swing, JavaFX & SWT 5
A JButton in einem Array aktualisieren AWT, Swing, JavaFX & SWT 8
Kenan89 JTable aktualisieren AWT, Swing, JavaFX & SWT 21
B Swing Fensterinhalt aktualisieren AWT, Swing, JavaFX & SWT 11
S Spezielle komponente aktualisieren AWT, Swing, JavaFX & SWT 9
V Swing JProgressBar aktualisieren AWT, Swing, JavaFX & SWT 14
C Combobox bei Tabellenänderung mit aktualisieren AWT, Swing, JavaFX & SWT 11
C jTable aktualisieren AWT, Swing, JavaFX & SWT 2
M TabbpedPane Anzeige aktualisieren AWT, Swing, JavaFX & SWT 6
X Swing JTree aktualisieren AWT, Swing, JavaFX & SWT 2
P AWT Fenster aktualisieren, nachdem ich JComboBox ändere AWT, Swing, JavaFX & SWT 9
D JTree nach Klick auf einen Hyperlink aktualisieren AWT, Swing, JavaFX & SWT 3
D Elternfenster vom JDialog aktualisieren oder nicht ? AWT, Swing, JavaFX & SWT 7
O JFrame: Daten alle paar Sekunden aktualisieren AWT, Swing, JavaFX & SWT 3
M Swing JLabel (mit einer Grafik) aktualisieren AWT, Swing, JavaFX & SWT 2
S JTable - Aktualisieren / Neu zeichnen. AWT, Swing, JavaFX & SWT 5
C Daten aus DB -> JTable aktualisieren klappt nicht AWT, Swing, JavaFX & SWT 16
M Zeichnung aktualisieren AWT, Swing, JavaFX & SWT 3
D Swing JTextField aus anderer Klasse aktualisieren AWT, Swing, JavaFX & SWT 2
L GUI aktualisieren? AWT, Swing, JavaFX & SWT 4
X Tabelle während Funktionsaufruf aktualisieren AWT, Swing, JavaFX & SWT 11
V Panel/Icon aktualisieren AWT, Swing, JavaFX & SWT 10
R JFreeChart aktualisieren wenn sich die Ausgangsdaten ändern AWT, Swing, JavaFX & SWT 8
M Swing Aktualisieren von laufenden Anwendungen AWT, Swing, JavaFX & SWT 10
C Swing Inhalt einer JTable aktualisieren und filten nach Feldern die nicht in der Tabelle sind AWT, Swing, JavaFX & SWT 3
S Swing Probleme beim Aktualisieren einer JComboBox nach Auswahländerung AWT, Swing, JavaFX & SWT 2
J JLabel aktualisieren AWT, Swing, JavaFX & SWT 8
N Swing MainWindow(JFrame) aktualisieren(neuzeichnen) repaint AWT, Swing, JavaFX & SWT 4
K Swing JTable Model aktualisieren AWT, Swing, JavaFX & SWT 2
K LayoutManager Borderlayout - NORTH aktualisieren AWT, Swing, JavaFX & SWT 10
C JMenuBar aktualisieren? AWT, Swing, JavaFX & SWT 2
K JTable aktualisieren AWT, Swing, JavaFX & SWT 9
M JFrame aktualisieren/refreshen? AWT, Swing, JavaFX & SWT 4
A Haupt JFrame inkl. aller Komponenten aktualisieren? AWT, Swing, JavaFX & SWT 3
L Swing Daten in JTable aktualisieren AWT, Swing, JavaFX & SWT 5
S Swing JTable nach einer Änderung einer Zelle komplett aktualisieren. AWT, Swing, JavaFX & SWT 10
D Swing JLabels in einer Schleife aktualisieren AWT, Swing, JavaFX & SWT 2
H UI aktualisieren AWT, Swing, JavaFX & SWT 9
R Tab-Inhalte aktualisieren AWT, Swing, JavaFX & SWT 4
B Swing JFreeCharts echtzeit Charts bzw Aktualisieren von Charts AWT, Swing, JavaFX & SWT 8
D JTree zur richtigen Zeit aktualisieren. AWT, Swing, JavaFX & SWT 3
S JTable aktualisieren AWT, Swing, JavaFX & SWT 4
U JTable in einem Tab aktualisieren aus anderem Tab heraus initiiert AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben