public interface ValueModel<T> {
public T getValue();
public void setValue(T val);
public void addPropertyChangeListener(PropertyChangeListener listener);
public void removePropertyChangeListener(PropertyChangeListener listener);
}
public static void bind(final JLabel l, ValueModel<?> model) {
model.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
l.setText(evt.getNewValue().toString());
}
});
}
ValueModel<String> irgendwelcheDaten = new ....();
bind(einLabel, irgendwelcheDaten);
irgenwelcheDaten.setValue("aggaugga");
public class ValueLabel extends javax.swing.JLabel
{
private Object obj;
public ValueLabel()
{
}
public void setValue(Object obj)
{
this.obj = obj;
this.setText(obj);
this.repaint();
}
}
nein, das steht da nicht drin. wenn du den code richtig liest: das model kennt die view nicht und das model hat die view auch nicht zu kennen, deshalb ist eine idee wie JLabel subclassen verwenden auch pfui. vor allem wenn du das in ein bestehendes programm einbauen willst. hier die default impl von ValueModel:thE_29 hat gesagt.:label.setText(val);
package net.roarsoftware.binding;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.List;
public class DefaultValueModel<T> implements ValueModel<T> {
private T value;
private List<PropertyChangeListener> listeners = new ArrayList<PropertyChangeListener>();
public DefaultValueModel() {
}
public DefaultValueModel(T value) {
this.value = value;
}
public T getValue() {
return value;
}
public void setValue(T val) {
T old = value;
this.value = val;
firePropertyChangeEvent(old, val);
}
protected void firePropertyChangeEvent(T oldVal, T newVal) {
PropertyChangeEvent propertyChangeEvent = new PropertyChangeEvent(this, "value", oldVal, newVal);
for(PropertyChangeListener l: listeners) {
l.propertyChange(propertyChangeEvent);
}
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
listeners.add(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
listeners.remove(listener);
}
}