OK, ich werde versuchen, dies so gut wie möglich zu erklären. Ich bin ziemlich Java-tüchtig, kann aber nach langer Suche keine logische Lösung finden. Nehmen wir an, ich habe eine JPanel-Klasse in Paket A, die ein Diagramm enthalten wird, das gezeichnet wird.Repainting ein JPanel von einem JCheckBox ActionListener in einem anderen Paket
package A
public class DrawGraph extends JPanel
{
public DrawGraph()
{
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
// other stuff
}
public void updateGraph()
{
repaint();
}
}
In einer anderen Klasse innerhalb Paket B habe ich eine JCheckBox, dass, wenn diese Klasse die DrawGraph Klasse nicht initialisiert ein Neuzeichnen des Graphen in Paket A. auslösen ausgewählt soll. Diese Klasse wird an anderer Stelle initialisiert.
package B
public class CheckBoxClass extends JPanel
public CheckBoxClass
{
graphicsCheckBox.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent cb)
{
GUI_Data.graphics = true;
DrawGraph.updateGraph(); // Calls Update Graph function
}
});
}
Nun, wie kann ich die updateGraph Funktion in meiner DrawGraph Klasse aufrufen, ohne eine neue Instanz der Klasse DrawGraph erstellen zu müssen? Ich weiß, dass ich die updateGraph-Methode nicht statisch machen kann, da repaint() nicht statisch ist. Ich habe das Gefühl, dass es einen Weg geben muss, dies zu tun, ohne über einen Timer oder eine andere verschlungene und ineffiziente Methode neu zu streichen. Betrachte ich dieses Problem falsch? Im Grunde brauche ich einen Weg, um ein Repaint der DrawGraph-Klasse von der JCheckBox-Klasse actionlistener auszulösen. Wenn diese Frage nicht klar ist, lassen Sie es mich bitte wissen, damit ich sie überarbeiten kann. Vielen Dank im Voraus, dies ist meine erste Frage, aber ich benutze euch seit einigen Jahren.
Vielen Dank, so albern, dass ich nicht einmal mit dem Singleton dachte Muster. Ich musste deine Antwort ein wenig für meine Implementierung ändern, aber immer noch das gleiche Prinzip. Danke noch einmal. –