Observer update

yugox

Mitglied
Ich habe ein Mouseoverevent, einmal auf JButtons und einmal auf JTextFields, aber ich weiß nicht genug wie man das anstellt, dass nur das geupdated wird, was auch gerade benötigt wird. Irgendwie passiert beim JTextField nicht.

GUI hier befindet sich der Observer:

Java:
    @Override
    public void update(Observable o, Object arg) {
        if(o instanceof Effects)
        {
            switch((((Effects)arg).getCurrentJButton()).getName())
            {
            case "Eventbutton":
                (((Effects)arg).getCurrentJButton()).setBackground((((Effects)arg).getJButtonBackgroundColor()));
                (((Effects)arg).getCurrentJButton()).setForeground((((Effects)arg).getJButtonForegroundColor()));

                break;
            case "Eventtextfields":   
                (((Effects)arg).getCurrentJTextField()).setBackground((((Effects)arg).getJButtonBackgroundColor()));
                (((Effects)arg).getCurrentJTextField()).setForeground((((Effects)arg).getJButtonForegroundColor()));
                (((Effects)arg).getCurrentJTextField()).setText((((Effects)arg).getPseudoText()));
                System.out.println("Test");
                break;
            }
        }
       
    }

Controller:
Java:
public class Controller implements ActionListener, MouseListener {

    private Model model;
    private Effects effects;
    private GUI view;
   
    public Controller()
    {

/************************************************************************************************************************
* CREATE VIEW.
/************************************************************************************************************************/
        view = new GUI(this);
        view.setVisible(true);

/************************************************************************************************************************
* ADD MODEL VIEW.
/************************************************************************************************************************/
        model = new Model();
        effects = new Effects();
        model.addObserver(this.view);
        effects.addObserver(this.view);
   
   
/************************************************************************************************************************
* SETTINGS ARRAY OBJECTS.
/************************************************************************************************************************/
        for( Object btns : view.getButtons())
        {
            ((JButton) btns).addMouseListener(this);
            ((JButton) btns).addActionListener(this);
            ((JButton) btns).setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
            ((JButton) btns).setBackground(new Color(60,60,60));
            ((JButton) btns).setBorder(null);
            ((JButton) btns).setForeground(Color.WHITE);
            ((JButton) btns).setDefaultCapable(false);
            ((JButton) btns).setFocusPainted(false);
            ((JButton) btns).setBorderPainted(false);
            ((JButton) btns).setFocusTraversalKeysEnabled(false);
            ((JButton) btns).setName("Eventbutton");
        }
               
        for( Object textfields : view.getTextfields())
        {
            ((JTextField) textfields).setName("Eventtextfields");
            ((JTextField) textfields).addMouseListener(this);
            ((JTextField) textfields).addActionListener(this);
        }
           
    }
   
    @Override
    public void mouseClicked(MouseEvent me) {
       
       
    }

    @Override
    public void mouseEntered(MouseEvent me)
    {
        switch(((Component) me.getSource()).getName())
        {
        case "Eventbutton":
            effects.mouseHoverEffect("entered", (JButton) me.getSource());
            break;
        case "Eventtextfields":
            effects.jfieldHoverEffect("entered", (JTextField) me.getSource());
            break;
        }
    }
   
    @Override
    public void mouseExited(MouseEvent me)
    {
        switch(((Component) me.getSource()).getName())
        {
        case "Eventbutton":
            effects.mouseHoverEffect("exited",(JButton) me.getSource());
            break;
        case "Eventtextfields":
            effects.jfieldHoverEffect("exited", (JTextField) me.getSource());
            break;
        }

    }


Das Effectmodel:
Java:
public class Effects extends Observable {

    private Color JButtonBackgroundColor;
    private Color JButtonForegroundColor;
    private Color JTextFieldBackgroundColor;
    private Color JTextFieldForegroundColor;
    private String pseudoText;
    private JButton button = null;
    private JTextField field;
   
    public void mouseHoverEffect(String value, JButton button)
    {
        if(value == "entered")
        {
            this.button = button;
            this.JButtonBackgroundColor = new Color(240,240,240);
            this.JButtonForegroundColor = new Color(60,60,60);
        }
        if(value == "exited")
        {
            this.button = button;
            this.JButtonBackgroundColor = new Color(60,60,60);
            this.JButtonForegroundColor = new Color(255,255,255);
        }
        setChanged();
        notifyObservers(this);   
    }
   
    public void jfieldClickEffect(JTextField field)
    {
            this.field = field;
            this.pseudoText = "";
           
            setChanged();
            notifyObservers(this);   
    }
   
    public void jfieldHoverEffect(String value, JTextField field)
    {
        if(value == "entered")
        {
            this.field = field;
            this.JTextFieldBackgroundColor = new Color(255,255,255);
            this.JTextFieldForegroundColor = new Color(70,70,70);
            System.out.println("TTTT");
        }
        if(value == "exited")
        {
            this.field = field;
            this.JTextFieldBackgroundColor = new Color(70,70,70);
            this.JTextFieldForegroundColor = new Color(255,255,255);
        }
        setChanged();
        notifyObservers(this);   
    }
   
    public Color getJButtonBackgroundColor() {
        return JButtonBackgroundColor;
    }

    public Color getJButtonForegroundColor() {
        return JButtonForegroundColor;
    }
   
    public Color getJTextFieldBackgroundColor() {
        return JButtonBackgroundColor;
    }

    public Color getJTextFieldForegroundColor() {
        return JButtonForegroundColor;
    }
   
    public JButton getCurrentJButton() {
        return button;
    }
   
    public String getPseudoText() {
        return pseudoText;
    }

    public JTextField getCurrentJTextField() {
        return field;
    }
   
}

Was mache ich falsch, bzw. übersehe ich?
 

yugox

Mitglied
Hab meinen Fehler gefunden :eek: Würde mich aber dennoch darüber freuen falls jemanden einen Vorschlag hätte wie man das mit den Events besser lösen könnte als das switch case verfahren! :)
 

Thallius

Top Contributor
Als erstes solltest du dir unbedingt abgewöhnen strings mit == zu vergleichen. Sonst rennst du irgendwann in einen Fehler den du im Leben nicht debugged bekommst.

Ansonsten ist das mit dem Switch doch in Ordnung. Irgendwo musst du die Unterscheidung ja machen. Du kannst diese natürlich auch in die Effektklasse verlagern und dort eine Methode doEffect(me.getSource()) aufrufen, die dann in der Effektklasse entscheidet was für eine Component das ist und wie du sie behandeln willst.

Der sauberste weg wäre natürlich das komplett ohne Effektklasse zu machen und den Effekt in das Component selber zu verlagern indem du deine eigenen EffektTextField und EffektButton Klassen schreibst die sich dann automatisch wie gewünscht verhalten.

Gruß

Claus
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Observer Observable update() . Java Basics - Anfänger-Themen 13
G Observable/Observer update wird nicht ausgeführt Java Basics - Anfänger-Themen 9
J Methoden Observer-Pattern mit Consumer und accept( ) Java Basics - Anfänger-Themen 6
J Implementierung von Observer und Singleton-Pattern Java Basics - Anfänger-Themen 9
fLooojava MVC Pattern und Observer Pattern Java Basics - Anfänger-Themen 6
N Observer funktioniert nicht Java Basics - Anfänger-Themen 13
G Observer löst zweimal aus Java Basics - Anfänger-Themen 8
A ein observer "post"problem Java Basics - Anfänger-Themen 3
A Observer Pattern Problem Java Basics - Anfänger-Themen 15
J Interface Frage zu Interfces am Beispiel Observer Pattern Java Basics - Anfänger-Themen 8
F Observer Java Basics - Anfänger-Themen 7
U observer thread safe Java Basics - Anfänger-Themen 4
Helgon Observer Pattern - hasChanged() immer false Java Basics - Anfänger-Themen 10
B Wozu Observer? Java Basics - Anfänger-Themen 9
Spin Observer Patteern java Java Basics - Anfänger-Themen 7
O Liste - Observer/Observeable - HashMap Hilfe Java Basics - Anfänger-Themen 19
C OOP Observer Pattern Java Basics - Anfänger-Themen 2
O Observer - Einfach erklärt? Java Basics - Anfänger-Themen 5
K Observer Pattern notifyObservers Java Basics - Anfänger-Themen 9
P Fragen zum Observer Muster und Datenbanken Java Basics - Anfänger-Themen 2
T Observer ansprechen Java Basics - Anfänger-Themen 2
R Observer funktioniert nicht. Sehe keine Fehler Java Basics - Anfänger-Themen 2
W Observer-Pattern Java Basics - Anfänger-Themen 3
hdi JList mit Model und Observer -> Chaos, blicke nicht durch Java Basics - Anfänger-Themen 22
hdi Observer als statische Klasse ? Java Basics - Anfänger-Themen 2
N observer frage Java Basics - Anfänger-Themen 2
G Implementierung des Observer/Observable Patterns - Gut so? Java Basics - Anfänger-Themen 3
N observer Java Basics - Anfänger-Themen 12
H [erledigt] Observable/Observer Beobachter entfernen Java Basics - Anfänger-Themen 2
G Unterschied Observer&Observable<->java.beans.Prope Java Basics - Anfänger-Themen 4
G Benötige Hilfe bei Problem mit Observer! Java Basics - Anfänger-Themen 2
E Observer Java Basics - Anfänger-Themen 7
T Verständnisfrage Observer-Pattern Java Basics - Anfänger-Themen 8
Y Observer - notifyObservers(Object arg) Java Basics - Anfänger-Themen 4
M Servlets und Observer Java Basics - Anfänger-Themen 2
G Observable/Observer-Patterns Java Basics - Anfänger-Themen 9
S Observer Pattern notifyObserver Java Basics - Anfänger-Themen 6
M Observer Pattern Java Basics - Anfänger-Themen 14
A MVC Observer Pattern Java Basics - Anfänger-Themen 2
Mugetsu35 ArrayList Update ohne Index Java Basics - Anfänger-Themen 6
E Mysql Update wenn es nicht existiert insert Java Basics - Anfänger-Themen 14
G Konstruktor und update Java Basics - Anfänger-Themen 4
Henri Webservice Delete und Update Methode funktioniert nicht Java Basics - Anfänger-Themen 27
J Threads PrograssBar update während thread Java Basics - Anfänger-Themen 13
S Lost-Update Semaphore Java Basics - Anfänger-Themen 6
K Schlüsselworte Nach Java update findet mdb Datei nicht Java Basics - Anfänger-Themen 6
M Methodenaufruf über SQL UPDATE Java Basics - Anfänger-Themen 8
J JavaFX -> SocketIO -> Thread -> Update Label Java Basics - Anfänger-Themen 13
C JTable update mit MySQL Datenbank Java Basics - Anfänger-Themen 1
J fehler nach windows update Java Basics - Anfänger-Themen 44
G Threads Konstantes Update Java Basics - Anfänger-Themen 1
X Eventservice Probleme nach Update Java Basics - Anfänger-Themen 0
B VAriables update in for-Schelifen Java Basics - Anfänger-Themen 3
L Jar aus Jar Starten lassen (Update Tool) Java Basics - Anfänger-Themen 6
P Update System Java Basics - Anfänger-Themen 16
R Nach Ubuntu-Update: Konsole spuckt bei neu Kompilierten Programmen Fehler aus (BlueJ)(Ubuntu12.04) Java Basics - Anfänger-Themen 11
L Auf herunterfahren des PCs reagieren und Datensatz update machen Java Basics - Anfänger-Themen 15
K Threads jProgressBar update Java Basics - Anfänger-Themen 14
Gugelhupf JDK installieren Fehlermeldung 1336 - Java SDK 7 Update 5 x64 Java Basics - Anfänger-Themen 4
A JDK installieren Java update - neu installieren? Java Basics - Anfänger-Themen 7
R JDK installieren Nach Update auf java 1.7 Connection refused Java Basics - Anfänger-Themen 9
E Programm - Update via Internet? Java Basics - Anfänger-Themen 5
B JDK installieren Java SE Development Kit 6 Update 25 Java Basics - Anfänger-Themen 5
M Update-Ticker... String in Textdatei schreiben und auslesen Java Basics - Anfänger-Themen 5
S MVC Prinzip - update() ? Java Basics - Anfänger-Themen 2
B Problem mit prepareStatement UPDATE Java Basics - Anfänger-Themen 2
M Serializable - Bei Update ältere Daten importieren Java Basics - Anfänger-Themen 14
C JAVA - Einstieg mit Eclipse - Update Sites und Ähnliches Java Basics - Anfänger-Themen 6
S JTree, Problem mit View Update Java Basics - Anfänger-Themen 2
L Java Persistence API - Update Befehl? Java Basics - Anfänger-Themen 5
hdi Fehler beim Model-Update einer JList (DefaultListModel) Java Basics - Anfänger-Themen 3
A update/draw schleife Java Basics - Anfänger-Themen 5
S update wird nicht aufgerufen Java Basics - Anfänger-Themen 9
G JFreeChart und das Update(was nicht klappt). Java Basics - Anfänger-Themen 3
A label update Java Basics - Anfänger-Themen 10
Y JDK 6 Update 5 with Java EE? Java Basics - Anfänger-Themen 2
M Java SQL-Update Java Basics - Anfänger-Themen 6
A per "update" ein Bild Strich für Strich "male Java Basics - Anfänger-Themen 9
S Ein Update System programmieren Java Basics - Anfänger-Themen 27
P Zeichenprogramm-->update() aushebeln Java Basics - Anfänger-Themen 11
S SQL UPDATE in Java "wie schreiben"? Java Basics - Anfänger-Themen 6
E Update JList Java Basics - Anfänger-Themen 13
J Problem bei Update auf Datenbank Java Basics - Anfänger-Themen 2
R JRE 1.5.0 Update 7 Install erkennt nicht Firefox/Netscape Java Basics - Anfänger-Themen 3
M [SOLVED]update() bei MVC Java Basics - Anfänger-Themen 4
M Datenbankabfrage mit UPDATE Java Basics - Anfänger-Themen 4
M Unterschied zwischen J2SE 5.0 Update x und J2SE 1.4.x Java Basics - Anfänger-Themen 4
N Array aus JCheckBox? 1000 if's UPDATE: Spaltennamen auslesen Java Basics - Anfänger-Themen 12
G Update auf Datenbankspalte vom Typ Timestamp mit aktu. Datum Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben