Ich möchte einige meiner JFrame-Komponenten (JPanel, ChartPanel) ändern, nachdem ein Aktionsereignis aufgetreten ist (Schaltfläche geklickt). Unter einem konkreten Beispiel:Frame wird beim Ändern eines Elements falsch aktualisiert
Zunächst beginne ich meinen Rahmen leer (nur mit Menüleiste und ohne weitere Panels). Ich klicke Menü 'Datei> Öffnen', wähle eine Datei und hier ein Diagramm. Danach habe ich die Größe meines Rahmens angepasst. Alles ist perfekt. Aber das nächste ich nochmaliges Klicken Datei wählen neues Diagramm zu bekommen und statt dieser mein Diagramm nicht korrekt aktualisiert: here is an illustration of problem
Und hier ist mein Code:
public MenuBarDataAnalyser() {
JMenu menuFile = new JMenu("File");
itmOpen = new JMenuItem("Open...");
itmOpen.addActionListener(this);
add(menuFile);
menuFile.add(itmOpen);
}
@Override
public void actionPerformed(ActionEvent e) {
if(source == itmOpen){
final JFileChooser fch = new JFileChooser();
FileFilter filter = new FileNameExtensionFilter("FITS file", "fits");
fch.setFileFilter(filter);
int response = fch.showOpenDialog(itmOpen);
if (response == JFileChooser.APPROVE_OPTION){
String pathFilename = fch.getSelectedFile().toString();
JFreeChart chart = GUIDataAnalyserFrame.createChart(pathFilename);
ChartPanel chartPanel = new ChartPanel(chart, true, true, true, false, true);
JButton button = new JButton("Calibrate");
JPanel buttonPanel = new JPanel();
buttonPanel.add(button);
chartPanel.revalidate();
GUIDataAnalyserApp.analyserFrame.add(chartPanel, BorderLayout.CENTER);
GUIDataAnalyserApp.analyserFrame.add(buttonPanel, BorderLayout.EAST);
GUIDataAnalyserApp.analyserFrame.revalidate();
}
}
}
Warum ist das passiert und was ich brauche, um Veränderung?
Vielen Dank! Es klappt. Ich habe meine Elemente aus dem Frame entfernt (wenn sie vorhanden sind), dann Revalidate und Repaint für jedes Element genannt. –
@AndreiSh: Nein, nicht für jedes Element. Rufen Sie es auf dem Container auf, hier 'GUIDataAnalyserApp.analyserFrame', nachdem Sie alles entfernt und hinzugefügt haben. –
Ähnliche Alternativen werden vorgeschlagen [hier] (http://stackoverflow.com/a/39120572/230513). – trashgod