2013-07-29 49 views
1

我正在Netbeans 7.3中使用jdesktop的beansbinding庫。我有一個非常具體的問題。如果另一個bean的任何屬性不爲null,並且如果它爲null,則我想要啓用JButton。javabeanbinding JButton.enabled

所以我試圖創建一個ELBinding(其中有像${myProperty > 50}返回布爾持這種表達是否是真還是假有條件的支持。

但在我的機會,我想不出(也沒有找到在互聯網上)如何。寫下這個條件,如果我有屬性更改事件偵聽器,我會寫這樣的事情(在某些的PropertyChangeListener實例的抽象方法):

if (propertyChangeEvent.getNewValue() == null) { 
    button.setEnabled(false); 
} else { 
    button.setEnabled(true); 
} 

非常感謝任何提示,因爲我覺得ELProperties不佳已記錄。

回答

2

workforme,請參閱下面的示例。

但是:通常啓用管理應該由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; 
    } 
}