Java jTable beansbinding

Java jTable beansbinding,java,swing,desktop-application,beans-binding,Java,Swing,Desktop Application,Beans Binding,我使用beansbinding将数据从一个util.List插入到一个JTable中。我将一个ArrayList包装到一个ObservableList和一个分配到uitl.List的ObservableList中。我将数据绑定到Netbeans中,并在Netbeans的“JTable Beanbinding options”中的“Table Content”中设置属性。当列表第一次更新时,JTable也会更新,并且是ok。但第二次,当我将另一个转换到可观察列表中的util.List设置为绑定到J

我使用beansbinding将数据从一个util.List插入到一个JTable中。我将一个ArrayList包装到一个ObservableList和一个分配到uitl.List的ObservableList中。我将数据绑定到Netbeans中,并在Netbeans的“JTable Beanbinding options”中的“Table Content”中设置属性。当列表第一次更新时,JTable也会更新,并且是ok。但第二次,当我将另一个转换到可观察列表中的util.List设置为绑定到JTable的列表时,该列表被更新,但JTable没有更新。(但是当我设置一个列表时,System.out.pr..打印列表的正确值,在这里我将util.list更改为ObservableList,反之亦然,以查找问题所在,但没有我预期的结果)(但是当我向绑定到JTable的列表添加对象时,JTable被更新。) 当列表更新时,如何更新JTable(这意味着当我设置新列表时,表也会在每次设置新列表时更新)

这是我用来设置列表的代码

 public List<Customer> getSuggestionList() {
    return suggestionList;
 }

public void setSuggestionList(ObservableList suggestionList) {

    try {
        List oldSuggestionList = this.suggestionList;
        this.suggestionList = suggestionList;
        propertySupport.firePropertyChange(PROP_SUGGESTIONLIST, oldSuggestionList, suggestionList);

        System.out.println("Suggestionlist is setted-----------");
        Customer c = (Customer) suggestionList.get(0);
        System.out.println("sugesstion list customer--------" + c.getCustFname());
    } catch (Exception e) {
        e.printStackTrace();
    }
}
public List getSuggestionList(){
返回建议列表;
}
公共无效集合建议列表(可观察列表建议列表){
试一试{
List oldSuggestionList=this.suggestionList;
this.suggestionList=suggestionList;
属性支持。firePropertyChange(属性建议列表、旧建议列表、建议列表);
System.out.println(“Suggestionlist被设置为----------------”);
客户c=(客户)建议列表。获取(0);
System.out.println(“建议列表客户-------”+c.getCustFname());
}捕获(例外e){
e、 printStackTrace();
}
}

刚刚检查:它按预期工作(当然是手动编码,不会触及Netbeans),sourceBean是具有属性suggestionList的类

    BindingGroup context = new BindingGroup();
    BeanProperty valuesProperty = BeanProperty.create("suggestionList");

    JTableBinding tableBinding = SwingBindings.createJTableBinding(
            UpdateStrategy.READ_WRITE,
            sourceBean, valuesProperty,
            table);
    context.addBinding(tableBinding);
    tableBinding.addColumnBinding(BeanProperty.create("firstName"));
    tableBinding.addColumnBinding(BeanProperty.create("lastName"));
    context.bind();

    // add a button which changes the suggestionList 
    Action next = new AbstractAction("new data") {

        public void actionPerformed(ActionEvent e) {
            sourceBean.setSuggestionList(createRandomData());
        }

    };
    button.setAction(next);
摘要:未显示的代码有问题;-)


顺便说一句:getter/setter签名应该具有相同的类型,而您的签名没有。在我的测试中没有任何区别,在您的上下文中,可能会或可能不会指示某些不必要的混淆

该片段看起来没问题-我所能想到的可能是属性常量值的拼写错误…我认为这段代码没问题,因为第一次设置列表是正确的。JTable得到更新。第二次列表更新不起作用。另外,当我向绑定到JTable的列表中添加一个对象时,JTable会得到更新<代码>建议列表。添加(myObject)然后添加的对象显示在JTable中,可以添加任意数量的ojbect。不管怎样,谢谢你的关注