shxfreestyle
Grünschnabel
Hallo Leute,
Ich habe 2 Klassen, die eine ist ein Observable und die andere der Observer. Bei einem Buttonklick in der Observable-Klasse wird die Observer-Klasse benachrichtigt und dort die update()-methode aufgerufen, soweit so gut. In dieser update()-Methode soll die Hintergrundfarbe eines weiteren Buttons durch den Aufruf der Methode colorchange() geändert werden. Und genau hier hakt es. Die colorchange()-Methode wird zwar aufgerufen, aber die Hintergrundfarbe nicht geändert. Wenn ich die colorchange()-Methode jedoch durch einen Klick auf den Button dessen farbe geändert werden soll selbst aufrufe gibt es keine Probleme.
Weiß da jemand warum colorchange()-Methode durch den aufruf aus der update()-Methode nicht korrekt funktioniert?
hier die 2 Klassen:
Observable-Klasse: (evtl. UNWICHTIG)
Observer-Klasse: (WICHTIG)
Ich habe 2 Klassen, die eine ist ein Observable und die andere der Observer. Bei einem Buttonklick in der Observable-Klasse wird die Observer-Klasse benachrichtigt und dort die update()-methode aufgerufen, soweit so gut. In dieser update()-Methode soll die Hintergrundfarbe eines weiteren Buttons durch den Aufruf der Methode colorchange() geändert werden. Und genau hier hakt es. Die colorchange()-Methode wird zwar aufgerufen, aber die Hintergrundfarbe nicht geändert. Wenn ich die colorchange()-Methode jedoch durch einen Klick auf den Button dessen farbe geändert werden soll selbst aufrufe gibt es keine Probleme.
Weiß da jemand warum colorchange()-Methode durch den aufruf aus der update()-Methode nicht korrekt funktioniert?
hier die 2 Klassen:
Observable-Klasse: (evtl. UNWICHTIG)
Java:
public class observerable{
static JFrame fenster = new JFrame("observerable");
static JPanel inhalt = new JPanel();
static JButton btnmain = new JButton("buttonmain");
public static Observable o = new Observable();
private static class MyObservable extends Observable {
@Override
public void setChanged() {
super.setChanged();
}
}
private final static MyObservable observable = new MyObservable();
public static void main(String[] args) {
btnmain.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
observable.addObserver(new observer());
observable.setChanged();
observable.notifyObservers("test");
}
});
inhalt.add(btnmain);
inhalt.add(new observer().btn());
fenster.setLocationRelativeTo(null);
fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fenster.setVisible(true);
fenster.add(inhalt);
fenster.pack();
}
}
Observer-Klasse: (WICHTIG)
Java:
public class observer implements Observer{
JButton btn = new JButton("test_button");
public JButton btn(){
btn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
colorchange(); // funktioniert
}
});
return btn;
}
public void colorchange(){
System.out.println("colorchange aufgerufen"); // wird in beiden fällen ausgegeben
btn.setBackground(Color.RED); // funktioniert NUR durch aufruf weiter oben
}
@Override
public void update(Observable o, Object arg) {
System.out.println("test empfangen");
colorchange(); // funktioniert NICHT
}
}