PropertyChangeListener

flashray

Erfahrenes Mitglied
Hallo,

könnte mir jemand folgendes Beispiel unter Anwendung eines propertychangelisteners implementieren.

Ein JRadioButton und eine JCheckBox auf einem JFrame. Beide sollen gleichzeitig aktiviert und deaktiviert werden.

Vg Erdal
 
Hallo,

ich habs doch noch selber hinbekommen. Allerdings würden mich zwei Dinge interessieren.

Habe ich den PropertyChangeListener richtig angewendet?
Welche Vorteile bringt der PropertyChangeListener? Ich konnte leider keine erkennen!


Vg Erdal
 
Hallo!

Habe ich den PropertyChangeListener richtig angewendet?
Da du kein Beispiel gepostet hast, kann man das schwer sagen...

Welche Vorteile bringt der PropertyChangeListener? Ich konnte leider keine erkennen!
Der Vorteil eines PropertyChangeListeners ist der, dass du gezielt auf Aenderungen aller oder eines speziellen Properties reagieren kannst. Dabei hast du dann sowohl den alten als auch den neuen Wert zur verfuegung um eventuelle Ueberpruefungen durch zufuehren. Weiterhin kannst du auch mit einem VetoableChangeListener Aenderungen von ablehnen, beispielsweise wenn versucht wird einem Property ein Wert zuzuweisen, der ausserhalb eines bestimmten "Gueltigkeitsbereiches" liegt.

Gruss Tom
 
Stimmt :-( und ich dachte schon die user hier können Wahrsagen :-) .

Code:
import java.awt.Canvas;
import java.awt.FlowLayout;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;

import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JRadioButton;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class Beann extends Canvas {
	private static JCheckBox cb = new JCheckBox();

	private static JRadioButton rb = new JRadioButton();

	private String string = "";

	private boolean activ = false;

	private PropertyChangeSupport changes = new PropertyChangeSupport(this);

	public void setActiv(boolean newActiv) {
		boolean oldActiv = activ;
		activ = newActiv;
		changes.firePropertyChange("string", oldActiv, newActiv);
	}

	public boolean getActiv() {
		return activ;
	}

	public void setString(String newString) {
		String oldString = string;
		string = newString;
		changes.firePropertyChange("string", oldString, newString);
	}

	public String getString() {
		return string;
	}

	@Override
	public void addPropertyChangeListener(PropertyChangeListener l) {
		changes.addPropertyChangeListener(l);
	}

	@Override
	public void removePropertyChangeListener(PropertyChangeListener l) {
		changes.removePropertyChangeListener(l);
	}

	public Beann() {
		JFrame f = new JFrame();
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.setAlwaysOnTop(true);
		f.setLocationByPlatform(true);
		f.setLayout(new FlowLayout());

		f.add(rb);
		f.add(cb);
		f.pack();
		
		rb.addChangeListener(new ChangeListener() {
			public void stateChanged(ChangeEvent e) {
				setActiv(rb.isSelected());
			}
		});
		f.setVisible(true);
		cb.addChangeListener(new ChangeListener() {
			public void stateChanged(ChangeEvent e) {
				setActiv(cb.isSelected());
			}
		});
		
		f.setVisible(true);
	}

	public static void main(String[] args) {

		final Beann p = new Beann();
		p.addPropertyChangeListener(new PropertyChangeListener() {
			public void propertyChange(PropertyChangeEvent evt) {
				rb.setSelected(p.getActiv());
				cb.setSelected(p.getActiv());
			}
		});
	}
}

Vg Erdal
 
Hallo,

kann mir jetzt vielleicht jemand sagen, ob ich den PropertyChangeListener richtig implementiert habe. Er funktioniert zwar. Aber dafür das Beispielsweise ein RadioButton und eine CheckBox gleichzeitig aktiviert und deaktiviert werden ist glaube ich der PropertyChangeListener nicht gedacht, weil ich ja nochmals zwei ActionListener brauche. Der PropertyChangeListener scheint hier irgendwie nichts dazu zu beitragen, es ist ein Mehraufwand an Implementation.

Vg Erdal
 
Zurück