我在Netbeans的7.3 JDesktop中的beansbinding图书馆工作。 我有一个非常具体的问题。 我想启用一个JButton如果其他bean的任何财产不为空,如果是空禁用。
所以,我试图创建一个ELBinding(其中有像有条件的支持${myProperty > 50}
返回布尔持这种表达是否是真还是假。
但在我的机会,我想不出(也没有在互联网上找到)如何写下这个条件。 如果我有属性更改事件侦听器,我会写这样的事情(在某些情况下的PropertyChangeListener的抽象方法):
if (propertyChangeEvent.getNewValue() == null) {
button.setEnabled(false);
} else {
button.setEnabled(true);
}
非常感谢任何提示,因为我觉得ELProperties不佳documentated。
WORKSFORME,见下面的例子。
但是:通常启用管理768,16由bean本身处理(与在飞行中这样做) - 在一个精心设计的分离世界上,只有bean本身应具有所有必要的知识。
一些代码:
final Person person = new Person();
// enablement binding with ad-hoc decision in view
Action action = new AbstractAction("Add year") {
public void actionPerformed(ActionEvent e) {
person.setAge(person.getAge() + 1);
}
};
JButton button = new JButton(action);
Binding enable = Bindings.createAutoBinding(UpdateStrategy.READ,
person, ELProperty.create("${age < 6}"),
button, BeanProperty.create("enabled"));
enable.bind();
// enablement binding to a bean property
Action increment = new AbstractAction("Increment year") {
public void actionPerformed(ActionEvent e) {
person.incrementAge();
}
};
JButton incrementButton = new JButton(increment);
Binding incrementable = Bindings.createAutoBinding(UpdateStrategy.READ,
person, BeanProperty.create("incrementable"),
incrementButton, BeanProperty.create("enabled"));
incrementable.bind();
JSlider age = new JSlider(0, 10, 0);
Binding binding = Bindings.createAutoBinding(UpdateStrategy.READ_WRITE,
person, BeanProperty.create("age"),
age, BeanProperty.create("value"));
binding.bind();
// the bean
public static class Person extends AbstractBean {
private int age;
private int max;
public Person() {
max = 6;
}
public void incrementAge() {
setAge(getAge() + 1);
}
public boolean isIncrementable() {
return getAge() < max;
}
public void setAge(int age) {
boolean incrementable = isIncrementable();
int old = getAge();
this.age = age;
firePropertyChange("age", old, getAge());
firePropertyChange("incrementable", incrementable, isIncrementable());
}
public int getAge() {
return age;
}
}