簡體   English   中英

Java beanbinding JButton.enabled

[英]java beansbinding JButton.enabled

我正在使用Netbeans 7.3中的jdesktop的bean綁定庫。 我有一個非常具體的問題。 如果另一個bean的任何屬性都不為null,則我想啟用JButton;如果為null,則禁用它。

因此,我嘗試創建一個ELBinding(具有條件支持,如${myProperty > 50}返回一個布爾值,表示此表達式是否為真。

但是在我這種情況下,我無法弄清楚(也無法在互聯網上找到)如何寫下這種情況。 如果我有一個用於屬性更改的事件偵聽器,則可以編寫如下內容(在某些PropertyChangeListener實例的抽象方法中):

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

非常感謝您提供的任何提示,因為我發現ELProperty的文檔記錄不佳。

worksforme,請參見下面的示例。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM