ich versuche mich gerade an der obserber patter.
habe ein textfield und einen slider in je einer extra klasse. und als dritte klasse ein jframe, wo sie reinkommen.
leider funktionieren nun die listener / events nicht mehr.
kann mir jemand sagen was ich da machen muss?
habe ein textfield und einen slider in je einer extra klasse. und als dritte klasse ein jframe, wo sie reinkommen.
leider funktionieren nun die listener / events nicht mehr.
kann mir jemand sagen was ich da machen muss?
Code:
package aufgabenblatt5.aufgabe10;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import java.util.ArrayList;
/**
* Konkretes Subject, implementiert das Interface 'Subject', gehört zur Observer
* Pattern.
*
* @author Kai
*
*/
public class FrameConcreteSubject extends JFrame implements Subject
{
private ArrayList<Observer> observerList;
private int subjectState = 1;
public FrameConcreteSubject()
{
super("FrameSubject");
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setSize(600, 400);
observerList = new ArrayList<Observer>();
getContentPane().setLayout(new FlowLayout());
//pack();
setVisible(true);
}
/**
* Fügt einen neuen Observer hinzu,
* @param observer Observer
*/
public void attach(Observer observer)
{
observerList.add(observer);
}
/**
* Entfernt einen Observer.
* @param observer Observer
*/
public void detach(Observer observer)
{
observerList.remove(observer);
}
/**
* Updated alle Observer.
*
*/
public void notifyAllObserver()
{
for (int i=0; i<observerList.size(); i++)
{
observerList.get(i).update();
}
}
/**
* @return Returns the subjectState.
*/
public int getSubjectState()
{
return subjectState;
}
/**
* @param subjectState The subjectState to set.
*/
public void setSubjectState(int subjectState)
{
this.subjectState = subjectState;
}
}
package aufgabenblatt5.aufgabe10;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
/**
* Konkreter Observer, implementiert das Interface 'Observer', gehört zur Observer
* Pattern.
*
* @author Kai
*
*/
public class JSliderConcreteObserver implements Observer, ChangeListener
{
private JSlider slider;
private FrameConcreteSubject subject;
private int observerState = 1;
public JSliderConcreteObserver(FrameConcreteSubject subject)
{
slider = new JSlider();
slider.setMajorTickSpacing(25);
slider.setMinorTickSpacing(1);
slider.setPaintTicks(true);
slider.setPaintLabels(true);
subject.getContentPane().add(slider);
}
/**
* Updated die Observer-Daten.
*
*/
public void update()
{
int tempInt = subject.getSubjectState();
observerState = tempInt;
slider.setValue(tempInt);
}
public void stateChanged(ChangeEvent e)
{
JSlider tempSlider = (JSlider) e.getSource();
int tempInt = tempSlider.getValue();
subject.setSubjectState(tempInt);
}
}
package aufgabenblatt5.aufgabe10;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JSlider;
import javax.swing.JTextField;
/**
* Konkreter Observer, implementiert das Interface 'Observer', gehört zur Observer
* Pattern.
*
* @author Kai
*
*/
public class JTextFieldConcreteObserver implements Observer, ActionListener
{
private JTextField textField;
private FrameConcreteSubject subject;
public JTextFieldConcreteObserver(FrameConcreteSubject subject)
{
textField = new JTextField(3);
subject.getContentPane().add(textField);
}
/**
* Updated die Observer-Daten.
*
*/
public void update()
{
int tempInt = subject.getSubjectState();
textField.setText(String.valueOf(tempInt));
}
public void actionPerformed(ActionEvent e)
{
System.out.println("test");
String tempString = textField.getText();
int tempInt = Integer.parseInt(tempString);
subject.setSubjectState(tempInt);
}
}
package aufgabenblatt5.aufgabe10;
/**
* Startet das Programm.
* @author CHUCKY
*
*/
public class ObserverTestClass
{
public static void main(String[] args)
{
FrameConcreteSubject fcs = new FrameConcreteSubject();
new JSliderConcreteObserver(fcs);
new JTextFieldConcreteObserver(fcs);
}
}