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:
Controller:
Das Effectmodel:
Was mache ich falsch, bzw. übersehe ich?
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?