Hallo,
ich habe mir ein kleines Programm mit den Observern Pattern geschrieben. Das Programm ändert immer die Buttonfarbe und Buttontext, nach Zufallsgenerator.
Zur Zeit beschäftigt mich die Frage, warum der Wechsel erst nach dem Zweiten Klick auf dem Button geschiet und dann aber immer beim nächsten Klick.
Hier mein Code:
Der Controller
Das Model
Meine View
ich habe mir ein kleines Programm mit den Observern Pattern geschrieben. Das Programm ändert immer die Buttonfarbe und Buttontext, nach Zufallsgenerator.
Zur Zeit beschäftigt mich die Frage, warum der Wechsel erst nach dem Zweiten Klick auf dem Button geschiet und dann aber immer beim nächsten Klick.
Hier mein Code:
Der Controller
Java:
package ModelViewController;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Controller implements ActionListener {
// Initialisierung des Models
private Model model = new Model();
// Initialisierung der View, mit Übergabe des Controllers (dieser Klasse).
private View view = new View(this);
public Controller(){
view.setVisible(true);
model.addObserver(view);
}
/**
* An dieser Stelle kommen die Events aus der View an.
* Diese werden mit Hilfe von Actioncommands übergeben.
*/
@Override
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand() != null)
System.out.println("ActionCommand: " + e.getActionCommand());
if(e.getActionCommand().equals("neueFarbe"))
model.randomColor();
}
}
Java:
package ModelViewController;
import java.awt.Color;
import java.util.Observable;
import java.util.Random;
public class Model extends Observable {
// Initialisierung
private Color color = new Color(255, 255, 255);
// methods
public void randomColor(){
// Hier erzeuge ich mir einen Zufallsgenerator.
Random random = new Random();
// per Zufallsgenerator erzeuge ich mir die einzelnen Farben (RGB)
int color1 = random.nextInt(254);
int color2 = random.nextInt(254);
int color3 = random.nextInt(254);
// ich erzeuge ein neues Farbobjekt
this.setColor(new Color(color1, color2, color3));
// hier informiere ich meine Observer
notifyObservers(this);
setChanged();
}
// getter and setter
/**
* @return the color
*/
public Color getColor() {
return color;
}
/**
* @param color the color to set
*/
public void setColor(Color color) {
this.color = color;
}
}
Java:
package ModelViewController;
import java.util.Observable;
public class View extends JFrame implements Observer {
private static final long serialVersionUID = 1L;
private SpringLayout springLayout = new SpringLayout();
private JButton btnNeueHintergrundfarbe = new JButton("neue Hintergrundfarbe");
/**
* Create the frame.
* @param controller
*/
public View(Controller controller) {
setLocationByPlatform(true);
setVisible(true);
setResizable(false);
setTitle("ModelViewController");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 250, 91);
getContentPane().setLayout(springLayout);
springLayout.putConstraint(SpringLayout.NORTH, btnNeueHintergrundfarbe, 10, SpringLayout.NORTH, getContentPane());
springLayout.putConstraint(SpringLayout.WEST, btnNeueHintergrundfarbe, 10, SpringLayout.WEST, getContentPane());
springLayout.putConstraint(SpringLayout.SOUTH, btnNeueHintergrundfarbe, 51, SpringLayout.NORTH, getContentPane());
springLayout.putConstraint(SpringLayout.EAST, btnNeueHintergrundfarbe, 232, SpringLayout.WEST, getContentPane());
getContentPane().add(btnNeueHintergrundfarbe);
btnNeueHintergrundfarbe.setActionCommand("neueFarbe");
btnNeueHintergrundfarbe.addActionListener(controller);
}
@Override
public void update(Observable o, Object arg) {
if(arg instanceof Model){
btnNeueHintergrundfarbe.setBackground(((Model) arg).getColor());
btnNeueHintergrundfarbe.setText(((Model) arg).getColor().toString());
}
}
}