Hallo,
ich möchte gerne einen eigenen Listener für Änderungen einer boolean Variable schreiben.
dabei habe ich das Problem, dass das übergebene Objekt anscheinend keine Refferenz auf das Original ist? Könnt ihr mir eventuel bei der Problemfindung helfen?
hier mein Beispielcode:
Vielen Dank im voraus.
Martin
ich möchte gerne einen eigenen Listener für Änderungen einer boolean Variable schreiben.
dabei habe ich das Problem, dass das übergebene Objekt anscheinend keine Refferenz auf das Original ist? Könnt ihr mir eventuel bei der Problemfindung helfen?
hier mein Beispielcode:
Java:
package observer;
import java.util.Observable;
import java.util.Observer;
public class VariableChangeListener extends Observable implements Runnable, Observer {
private Boolean value;
private boolean valueOld;
public VariableChangeListener(Boolean value){
this.value = value;
this.valueOld = value.booleanValue();
addObserver(this);
new Thread(this).start();
}
private void valueChanged(){
setChanged();
notifyObservers();
}
@Override
public void update(Observable o, Object arg) {
System.out.println("change");
}
@Override
public void run() {
while (true) {
if (valueOld != value.booleanValue()) {
valueChanged();
}
}
}
}
Java:
package observer;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
public class Test extends JFrame {
private JPanel contentPane;
private Boolean value;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Test frame = new Test();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
* @throws CloneNotSupportedException
*/
public Test() {
value = new Boolean(false);
new VariableChangeListener(value);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JButton btnNewButton = new JButton("true");
btnNewButton.setBounds(41, 124, 89, 23);
contentPane.add(btnNewButton);
JButton btnFalse = new JButton("false");
btnFalse.setBounds(239, 124, 89, 23);
contentPane.add(btnFalse);
btnFalse.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
value = true;
}
});
btnNewButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
value = false;
}
});
}
}
Vielen Dank im voraus.
Martin