Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将JList绑定到Bean类属性_Java_Swing_Beans Binding - Fatal编程技术网

Java 如何将JList绑定到Bean类属性

Java 如何将JList绑定到Bean类属性,java,swing,beans-binding,Java,Swing,Beans Binding,我试图将JList绑定到绑定类属性Vector。在binding类中,当UI中的JTextField被更新时,向量将被更新 public void setName(String name) { String oldName = this.name; this.name = name; Vector oldList=this.list; list.add(name); propertySupport.firePropertyChange("name", ol

我试图将
JList
绑定到绑定类属性
Vector
。在binding类中,当UI中的
JTextField
被更新时,
向量将被更新

public void setName(String name) {
    String oldName = this.name;
    this.name = name;
    Vector oldList=this.list;
    list.add(name);
    propertySupport.firePropertyChange("name", oldName, this.name); //textField updates
    propertySupport.firePropertyChange(PROP_LIST, oldList, list); // JList
}
另外,另一个单独的setter可用于更新
向量
。我还设置了添加/删除属性ChangeListeners

我真正的需求是根据
BeanBinding
类中的数据更新
JList
。例如,当用户在
JTextField
中键入时,来自数据库和类中现有变量的相关数据应加载到
JList


请告诉我如何为NetBeans中的
JList
绑定数据
BeanBinding
class(source)属性。至少有任何教程链接。NetBeans站点中有一个示例,但它是用于直接从数据库获取数据的。

不知道NetBeans,只是简单的编码:-)在这个示例中,将您的列表包装到observable列表中,并对observable进行所有更改。这里有一个被剪掉的可运行代码(很抱歉这么长,现在没有精力把它删掉)

公共类SimpleListBinding{
@抑制警告(“未使用”)
专用静态最终记录器日志=记录器
.getLogger(SimpleListBinding.class.getName());
私有组件内容;
私人名单;
私有JTextField textField;
私人名单;
私有JButton修改按钮;
私有JButton addButton;
/**
*绑定列表和简单属性。
*/
私有void bindBasics(){
BindingGroupBean上下文=新的BindingGroupBean();
JListBinding listBinding=SwingBindings.createJListBinding(UpdateStrategy.READ\u WRITE,
beanList,list);
setDetailBinding(BeanProperty.create(“value”));
addBinding(listBinding);
context.addBinding(Bindings.createAutoBinding(UpdateStrategy.READ\u WRITE,
列表,BeanProperty.create(“selectedElement.value”),
textField,BeanProperty.create(“text”);
context.bind();
动作动作=新的抽象动作(“程序性变更”){
已执行的公共无效操作(操作事件e){
int selectedBean=list.getSelectedIndex();
如果(selectedBean<0)返回;
MyBean=beanList.get(selectedBean);
setValue(bean.getValue()+“*”);
}
};
modifyButton.setAction(动作);
actionadd=新的抽象操作(“addbean”){
整数计数=0;
@凌驾
已执行的公共无效操作(操作事件e){
添加(newmybean(“添加:“+count++”);
}
};
addButton.setAction(添加);
}
私有void initData(){
MyBean[]bean=新的MyBean[]{
新豆豆(“第一”)、新豆豆(“第二”)、新豆豆(“第三”)
};
beanList=observeCollections.observebleList(新的ArrayList(Arrays.asList(bean));
}
公共静态类MyBean扩展了AbstractBean{
私有字符串值;
私有布尔活动;
公共MyBean(字符串值){
这个值=值;
}
公共字符串getValue(){
返回值;
}
公共void设置值(字符串值){
对象old=getValue();
这个值=值;
firePropertyChange(“value”,old,getValue());
}
public void setActive(布尔激活){
布尔old=getActive();
这个.active=active;
firePropertyChange(“活动”,旧,getActive());
}
公共布尔getActive(){
主动返回;
}
}
私有JComponent getContent(){
if(content==null){
初始化组件();
内容=构建();
initData();
bindBasics();
}
返回内容;
}
私有JComponent构建(){
JComponent comp=Box.createVerticalBox();
公司新增(新JScrollPane(列表));
组件添加(文本字段,BorderLayout.SOUTH);
组件添加(修改按钮);
组件添加(添加按钮);
返回补偿;
}
私有组件(){
列表=新JList();
textField=新的JTextField();
modifyButton=新JButton(“以编程方式修改”);
addButton=newjbutton();
}
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
最终JXFrame帧=新JXFrame(“列表绑定”,true);
添加(新的SimpleListBinding().getContent());
frame.pack();
框架。设置尺寸(400300);
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
});
}
}

编辑:将JXList替换为JList(行为没有区别,只是为了使其可编译:-)

您能告诉我使用ObservableList时会发生什么吗?我所做的只是将列表包装在ObservableList中。它工作得很好再次非常感谢:):)
public class SimpleListBinding {
    @SuppressWarnings("unused")
    private static final Logger LOG = Logger
            .getLogger(SimpleListBinding.class.getName());
    private JComponent content;
    private JList list;
    private JTextField textField;

    private List<MyBean> beanList;
    private JButton modifyButton;
    private JButton addButton;


    /**
     * Binds list and simple properties.
     */
    private void bindBasics() {
        BindingGroupBean context = new BindingGroupBean();
        JListBinding listBinding = SwingBindings.createJListBinding(UpdateStrategy.READ_WRITE,
                beanList, list);
        listBinding.setDetailBinding(BeanProperty.create("value"));
        context.addBinding(listBinding);
        context.addBinding(Bindings.createAutoBinding(UpdateStrategy.READ_WRITE,
                list, BeanProperty.create("selectedElement.value"), 
                textField,  BeanProperty.create("text")));
        context.bind();
        Action action = new AbstractAction("programatically change") {
            public void actionPerformed(ActionEvent e) {
                int selectedBean = list.getSelectedIndex();
                if (selectedBean < 0) return;
                MyBean bean = beanList.get(selectedBean); 
                bean.setValue(bean.getValue() + "*");
            }

        };
        modifyButton.setAction(action); 

        Action add = new AbstractAction("add bean") {
            int count = 0;
            @Override
            public void actionPerformed(ActionEvent e) {
                beanList.add(new MyBean("added: " + count++));
            }

        };
        addButton.setAction(add);
    }

    private void initData() {
        MyBean[] beans = new MyBean[] {
                new MyBean("first"), new MyBean("second"), new MyBean("third")
        };
        beanList = ObservableCollections.observableList(new ArrayList(Arrays.asList(beans)));
    }

    public static class MyBean extends AbstractBean {
        private String value;
        private boolean active;
        public MyBean(String value) {
            this.value = value;
        }
        public String getValue() {
            return value;
        }

        public void setValue(String value) {
            Object old = getValue();
            this.value = value;
            firePropertyChange("value", old, getValue());
        }

        public void setActive(boolean active) {
            boolean old = getActive();
            this.active = active;
            firePropertyChange("active", old, getActive());
        }

        public boolean getActive() {
            return active;
        }
    }

    private JComponent getContent() {
        if (content == null) {
            initComponents();
            content = build();
            initData();
            bindBasics();
        }
        return content;
    }

    private JComponent build() {
        JComponent comp = Box.createVerticalBox();
        comp.add(new JScrollPane(list));
        comp.add(textField, BorderLayout.SOUTH);
        comp.add(modifyButton);
        comp.add(addButton);
        return comp;
    }

    private void initComponents() {
        list = new JList();
        textField = new JTextField();
        modifyButton = new JButton("modify programmtically");
        addButton = new JButton();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                final JXFrame frame = new JXFrame("List binding", true);
                frame.add(new SimpleListBinding().getContent());
                frame.pack();
                frame.setSize(400, 300);
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

}