Component ändern (repaint)

Status
Nicht offen für weitere Antworten.
Hi,

ich habe ein Mini-Swing-Programm erstellt, das Charts generieren kann. Diese werden mit JFreeChart hergestellt. Die Grafik wird als Component geholt und dann in ein Panel gesetzt.

Das Panel und auch jede Chart-Component sind als Instanzvariablen vermerkt:

Code:
public class PlotView {
    
    JFrame    frame;
    
   Component diskUsageChartComponent;
   Component nrRowsChartComponent;
 ...
}


Wenn der Anwender jetzt einen Button klickt, werden neue Parameter ausgelesen und die Plots neu erstellt. Jetzt sollen natürlich auch die neuen Charts angezeigt werden :) Daher sieht meine update-Methode ungefähr so aus:

Code:
final String title = "Charts";
		
 getChartData();		
 diskUsageChartComponent   = swingWrapper.getChartComponent(swingWrapper.CHART_DISKUSAGE, title);
 // das gleiche fuer weitere Charts

 diskUsageChartComponent.repaint();

So.
Jetzt passiert aber - nichts ???:L

Übersehe ich hier etwas ganz Wichtiges?
Die update() methode wird auch aufgerufen, das JFRame ist visible. Und die neuen Charts sehen definitiv anders aus.

Wenn jemand eine Idee hat, wäre ich sehr interessiert :)

Gruß
Georg
 

madboy

Top Contributor
Versuch mal ein
Code:
frame.validate();
nach/anstatt deinem repaint().
 
Hm nein, das hat leider nicht geholfen. :-(

ICh stell hier nochmal die wichtigsten Code-Teile rein. Vielleicht wird dann ersichtlich, woran es liegt.
In jedem Fall vielen Dank für Eure Hilfe.

Code:
package ch.cern.atlas.coolmonitor;

import ...
public class PlotView {

    static CoolChartFactory chartFabric     = CoolChartFactory.getInstance();
    static ICoolChartXYBuilder    chartBuilder;
    static JFreeChartSwingWrapper swingWrapper;
    
    JFrame    frame;
    Container container;
    
    Component diskUsageChartComponent;
    Component nrRowsChartComponent;
    Component nrChannelsChartComponent;
    Component nrTagsChartComponent;
    
    JTextField serverField;
    JTextField dbNameField;
    JTextField folderNameField;
    JTextField coolVersionField;
    JTextField intervalField;
    
    final String implClass = "xyz.ChartXYBuilder";
    
    CoolConfigurationModel model;
    
    public PlotView(CoolConfigurationModel model) throws ... {
    	this.model = model;
    	
    	chartBuilder = chartFabric.create(implClass);
    	
     	frame = new JFrame("Charts for "+model.getFolderName());   
	container = frame.getContentPane();
		
	frame.addWindowFocusListener(new WindowAdapter()  {
		public void windowClosing(WindowEvent event) { System.exit(0);}
	});
    }
    
    
	public void showMainFrame() throws ... {
		this.getChartData();

    	// ============ GUI stuff ============
	    container.setBackground(Color.white);
	    
	    Panel dataPanel = new Panel();
	    dataPanel.setLayout(new FlowLayout());
	    // server field
	    serverField = new JTextField(model.getServer());
	    // db name field
	    dbNameField = new JTextField(model.getDbName());
	    // version field
	    coolVersionField = new JTextField(model.getCoolVersion());
	    // folder name field
	    folderNameField = new JTextField(model.getFolderName());
	    
	    intervalField = new JTextField(model.getInterval());
	    	    
	    JButton setParamsButton = new JButton("Set parameters");
	    
	    setParamsButton.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				updateModel();
			} 
	    });
	    
	    dataPanel.add(serverField);
	    dataPanel.add(dbNameField);
	    dataPanel.add(coolVersionField);
	    dataPanel.add(folderNameField);
	    dataPanel.add(intervalField);
	    dataPanel.add(setParamsButton);
	    
	    
	    // get the chart components
	    JPanel plotPanel = this.getComponents();
	    
	    // add all sub panels
	    container.add(dataPanel, BorderLayout.NORTH);
	    container.add(plotPanel, BorderLayout.CENTER);    

		frame.setVisible(true);
	}
	
	
	
	protected void updateModel() {
			String server = serverField.getText();
			String dbName = dbNameField.getText();
			String interval = intervalField.getText();
			String folderName = folderNameField.getText();
			String coolVersion = coolVersionField.getText();
			model.setData(server, dbName, coolVersion, folderName, interval);
                    // ^ ^ triggers update method
	}
	
	
	
	
	protected void getChartData() {

		chartBuilder.setServer(model.getServer());
		chartBuilder.setDbName(model.getDbName());
		chartBuilder.setCoolVersion(model.getCoolVersion());
		chartBuilder.setFolderName(model.getFolderName());
		chartBuilder.setInterval(Integer.parseInt( model.getInterval() ));

		swingWrapper = new JFreeChartSwingWrapper(chartBuilder);
	}
	
	
	
	protected JPanel getComponents()  {
	
	    JPanel panel = new JPanel();
	    panel.setLayout(new GridLayout(2,2));
	    panel.add(diskUsageChartComponent);
	    panel.add(nrRowsChartComponent);
	    panel.add(nrChannelsChartComponent);
	    panel.add(nrTagsChartComponent);
	    
	    return panel;
	}
	
	
	
	public void update() {
		
		final String title = "Charts";
		
		getChartData();
		System.out.println(model.getInterval());
		
		try {
			diskUsageChartComponent   = swingWrapper.getChartComponent(...);
...			
		} catch (SQLException e) {
			...		}
		
		System.out.println("View: Received update");
		
		// ================ * UPDATES * ================== //
		diskUsageChartComponent.repaint();
		nrRowsChartComponent.repaint();
		nrChannelsChartComponent.repaint();
		nrTagsChartComponent.repaint();
		
		frame.validate();
//		container.repaint();
//		frame.repaint();
	}
}
 
G

Gast2

Gast
du vermischt awt mit swing....das ist nie gut

EDIT: Des weitern versuch mal in der update methode plotPanel.repaint() einzubauen

Code:
   public void update() { 
       
      final String title = "Charts"; 
       
      getChartData(); 
      System.out.println(model.getInterval()); 
       
      try { 
         diskUsageChartComponent   = swingWrapper.getChartComponent(...); 
...          
      } catch (SQLException e) { 
         ...      } 
       
      System.out.println("View: Received update"); 
       
      // ================ * UPDATES * ================== // 
plotPanel.repaint() 
   } 
}
 
SirWayne hat gesagt.:
du vermischt awt mit swing....das ist nie gut

Ok, das wusste ich auch noch nicht :)
An welchen Stellen sollte ich besonders darauf achten?
Ich habe ja folgende Imports:

Code:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

Das ist ne Menge AWT ;-). Gibt es fuer all das Ersatz-Pakete in Swing?

Das plotPanel.repaint() werde ich mal ausprobieren, danke für den Hinweis. :)[/code]
 
G

Gast2

Gast
du solltest du anstatt Component JComponent verwenden.... und anstatt Panel JPanel....

(fast) alle Swing Componenten erkennst du am J...
 
Hm, ich habe nun alle Components gegen JComponents ausgetauscht, dasselbe für JPanel. Für die übrigen imports habe ich keine Swing-Äquivalente gefunden.
Das plotPanel.repaint() ist ebenfalls eingebaut. Und trotzdem wird die GUI nicht aktualisiert.

Hat noch jemand Tipps? Ich komme da nicht hinter... :-/
 
G

Gast2

Gast
schick mal deinen code... am besten, dass man ihn ausführen kann.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
C Swing Component bei Doppelklick löschen AWT, Swing, JavaFX & SWT 4
R Swing Hat mein JFrame meinen Component? AWT, Swing, JavaFX & SWT 2
R Layout Manager null und Component wird nicht hinzugefügt AWT, Swing, JavaFX & SWT 3
B Größe der Parent-Component dynamisch an children anpassen AWT, Swing, JavaFX & SWT 30
K JavaFX Component Größe an Inhalt anpassen AWT, Swing, JavaFX & SWT 11
M Swing Component Resize AWT, Swing, JavaFX & SWT 7
L Eigene Component anordnen AWT, Swing, JavaFX & SWT 7
L Eigene Component Layout AWT, Swing, JavaFX & SWT 4
W Swing Component mehrfach adden AWT, Swing, JavaFX & SWT 0
H Drag component out of window AWT, Swing, JavaFX & SWT 1
A remove(Component) funktioniert nicht; JTable AWT, Swing, JavaFX & SWT 4
A Swing Focus auf gemalte Component AWT, Swing, JavaFX & SWT 5
L Swing Component alignment innerhalb einer JList AWT, Swing, JavaFX & SWT 3
M AWT Drag n Drop-Support für Component AWT, Swing, JavaFX & SWT 5
M Kein resize nach Component.setVisible() AWT, Swing, JavaFX & SWT 2
Ebenius AWT Bug in Component.getLocationOnScreen() AWT, Swing, JavaFX & SWT 7
C AWT Fokus von Component entfernen, wenn kein anderes vorhanden AWT, Swing, JavaFX & SWT 4
B JTable Component mit String? AWT, Swing, JavaFX & SWT 4
M Eigenes Panel aus Component? AWT, Swing, JavaFX & SWT 5
H Component Zerren AWT, Swing, JavaFX & SWT 5
S Swing Component vertikal und hochizontal zentrieren? AWT, Swing, JavaFX & SWT 5
Z Component für File-Browser ähnliche Oberfläche AWT, Swing, JavaFX & SWT 6
B Swing verschachteltes GUI: repaint() ändert mehr als nur gewünschte Component AWT, Swing, JavaFX & SWT 4
V Swing remove(Component) blockiert Thread sehr lange. AWT, Swing, JavaFX & SWT 6
C Problem mit remove(Component comp) AWT, Swing, JavaFX & SWT 23
F AWT Component in OpenGL anzeigen? AWT, Swing, JavaFX & SWT 18
A Java Konsolen Component AWT, Swing, JavaFX & SWT 6
G Swing Component.toString() was bedeutet flags AWT, Swing, JavaFX & SWT 8
1 Eigene Component in JScrollBar + fixe Linien??? AWT, Swing, JavaFX & SWT 2
DamienX Swing Component auf mehreren Containern AWT, Swing, JavaFX & SWT 2
algorismi AWT Tranparente heavyweight component AWT, Swing, JavaFX & SWT 2
R Swing Methode add([Component]) funzt nich AWT, Swing, JavaFX & SWT 7
Developer_X AWT Component added keinen MouseListener AWT, Swing, JavaFX & SWT 7
U LayoutManager [GBL] Component aus einer Zelle löschen AWT, Swing, JavaFX & SWT 2
H Swing Illegal component position! AWT, Swing, JavaFX & SWT 2
C Flamingo Component AWT, Swing, JavaFX & SWT 2
M Doppelklick auf Component abfangen AWT, Swing, JavaFX & SWT 5
P DragAndDrop zw Component und Container AWT, Swing, JavaFX & SWT 4
M AWT Component/Canvas erzeugt unerwünschten Rahmen bei paint AWT, Swing, JavaFX & SWT 3
T Swing Component in Graphics zeichnen AWT, Swing, JavaFX & SWT 4
R Zugriff auf Component um addComponentListener() aufzurufen AWT, Swing, JavaFX & SWT 4
K AWT/SWING intern - Wie funktioniert die Component-Ermittlung AWT, Swing, JavaFX & SWT 13
S Line Component in SWING AWT, Swing, JavaFX & SWT 2
S java.awt.Component und paint() AWT, Swing, JavaFX & SWT 4
hdi Verständnisfrage: Container vs. Component AWT, Swing, JavaFX & SWT 3
D Eigene Component erstellen? AWT, Swing, JavaFX & SWT 4
C Syntax Highlighting Component AWT, Swing, JavaFX & SWT 2
O KeyBoardFocusManager - previous und next Component checken? AWT, Swing, JavaFX & SWT 2
A Eigene, sich selbst zeichnende Component AWT, Swing, JavaFX & SWT 5
A erneutes Öffnen jInternalFrame: illegal component position AWT, Swing, JavaFX & SWT 4
0 Component austauschen und aktualisieren ? AWT, Swing, JavaFX & SWT 6
S Thread beenden, wenn Component nicht mehr benötigt wird AWT, Swing, JavaFX & SWT 12
G "Rating Component" - Bewerten über JTable AWT, Swing, JavaFX & SWT 3
G Drag And Drop von Component (List, Tree) zum Desktop AWT, Swing, JavaFX & SWT 2
F LayoutManager und Component.setVisible(boolean) AWT, Swing, JavaFX & SWT 2
F Probleme bei add(Component) JPanel > JFrame AWT, Swing, JavaFX & SWT 3
B Component AWT, Swing, JavaFX & SWT 5
L Swing Component in Buffered Image AWT, Swing, JavaFX & SWT 6
G Component "finden" AWT, Swing, JavaFX & SWT 6
H Component fokussierbar machen AWT, Swing, JavaFX & SWT 2
P Wie das Component Object des Hauptfensters ermitteln? AWT, Swing, JavaFX & SWT 4
M GridBagLayout - Component Position AWT, Swing, JavaFX & SWT 4
R Component einer Form herausbekommen AWT, Swing, JavaFX & SWT 3
T JMenu/JMenuItem Component auf der geaddet wurde AWT, Swing, JavaFX & SWT 16
B Component in JSplitPane aktualisieren AWT, Swing, JavaFX & SWT 2
G add(Component) in paintComponent erlaubt ? AWT, Swing, JavaFX & SWT 2
K Component einfügen in JPane AWT, Swing, JavaFX & SWT 5
M getSize von Component und ModelListener AWT, Swing, JavaFX & SWT 2
S Component auf Label zeichnen? AWT, Swing, JavaFX & SWT 3
R convertPointToScreen(Point p, Component c) AWT, Swing, JavaFX & SWT 5
R Component aus Container entfernen bzw. austauschen. AWT, Swing, JavaFX & SWT 6
C JPanel Component austauschen AWT, Swing, JavaFX & SWT 4
H Swing Componente zur Läufzeit ändern AWT, Swing, JavaFX & SWT 3
H JDialog in Größe ändern - Resize-Cursor bleibt betreten der Komponente AWT, Swing, JavaFX & SWT 1
H AWT Dialog Größe ändern - Schwarzer Inhalt beim groß ziehen AWT, Swing, JavaFX & SWT 1
_user_q ChoiceBox Elemente: Sprache ändern AWT, Swing, JavaFX & SWT 7
raeuchertofu Text von JTextfield und JLabel ändern AWT, Swing, JavaFX & SWT 2
B Deckraft ändern AWT, Swing, JavaFX & SWT 1
Davee JavaFX ListView = null wenn ich sie in Laufzeit ändern will! AWT, Swing, JavaFX & SWT 16
missy72 JavaFX RowFactory Schriftfarbe ändern AWT, Swing, JavaFX & SWT 6
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
N Bilder auf Button einfügen und mehrmals ändern (ein Button, mehrere ActionListener) AWT, Swing, JavaFX & SWT 2
Hatsi09 GUI Input Farbe ändern AWT, Swing, JavaFX & SWT 0
W JavaFX CSS ändern wirft NPE AWT, Swing, JavaFX & SWT 8
E Keystroke für Ausschneiden läßt sich nicht ändern AWT, Swing, JavaFX & SWT 2
L Swing Button Farbe ändern/wechseln AWT, Swing, JavaFX & SWT 2
B JavaFX Farbe eines Quadrates in einer separaten Klasse ändern AWT, Swing, JavaFX & SWT 4
sascha-sphw JavaFX ListCell höhe verändert sich beim ändern der Text-Farbe AWT, Swing, JavaFX & SWT 14
L Swing JLabel wird beim ändern der Schriftart immer neu gezeichnet. AWT, Swing, JavaFX & SWT 2
R Swing JTextField - Schriftgröße je nach Länge und Größe ändern AWT, Swing, JavaFX & SWT 0
OSchriever Layout über Radiobuttons ändern AWT, Swing, JavaFX & SWT 4
S Swing JLabel Text mit der Zeit ändern AWT, Swing, JavaFX & SWT 1
S JavaFX ListView Inhalte während Laufzeit ändern AWT, Swing, JavaFX & SWT 23
Shallty JavaFX MenuItem (Info) Icon ändern AWT, Swing, JavaFX & SWT 7
J Schriftart über einen Button ändern AWT, Swing, JavaFX & SWT 1
J JButton zum ändern Der Schriftart/Schriftgröße AWT, Swing, JavaFX & SWT 2
C Bilder so einbinden, dass sie sich ändern AWT, Swing, JavaFX & SWT 6
S JavaFX Boolean ändern Table View AWT, Swing, JavaFX & SWT 14
K Swing Text eines Lables in einer Methode ändern AWT, Swing, JavaFX & SWT 13

Ähnliche Java Themen

Neue Themen


Oben