使用NetBeans绑定刷新jTable

时间:2015-08-05 01:34:48

标签: java netbeans binding jtable

我正在NetBeans开展一个关于小餐馆的项目。

我有2个Jtables,我绑定到我的数据库,有2个表单用于插入数据。第一个表是插入员工数据,第二个表是插入项目详细信息。

希望每次插入时刷新表中的记录。因此,我创建了2个刷新方法,传递(List l)作为参数,并从生成的代码中复制并粘贴绑定代码并传递l绑定。

但它不起作用。为什么? 还有其他方法可以刷新该表的数据吗?

这是我的刷新表

private  void refreshItm(List l){
        jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, itemsList, jTable2);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${itemid}"));
        columnBinding.setColumnName("Itemid");
        columnBinding.setColumnClass(Integer.class);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${itemname}"));
        columnBinding.setColumnName("Itemname");
        columnBinding.setColumnClass(String.class);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${availablequantity}"));
        columnBinding.setColumnName("Availablequantity");
        columnBinding.setColumnClass(Short.class);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${price}"));
        columnBinding.setColumnName("Price");
        columnBinding.setColumnClass(Integer.class);
        bindingGroup.addBinding(jTableBinding);
        jTableBinding.bind();
    }

    private void refreshEmp(List l){
        org.jdesktop.swingbinding.JTableBinding jTableBinding = org.jdesktop.swingbinding.SwingBindings.createJTableBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, l, jTable1);
        org.jdesktop.swingbinding.JTableBinding.ColumnBinding columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${empid}"));
        columnBinding.setColumnName("Empid");
        columnBinding.setColumnClass(String.class);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${empname}"));
        columnBinding.setColumnName("Empname");
        columnBinding.setColumnClass(String.class);
        columnBinding = jTableBinding.addColumnBinding(org.jdesktop.beansbinding.ELProperty.create("${address}"));
        columnBinding.setColumnName("Address");
        columnBinding.setColumnClass(String.class);
        bindingGroup.addBinding(jTableBinding);
        jTableBinding.bind();
    }

2 个答案:

答案 0 :(得分:0)

您忘记更新结果列表(即在您的第一个方法“itemsList”中)。寻找“initComponents”方法。在这个方法中应该有一行来获取“itemsList”,如:

    itemsList = java.beans.Beans.isDesignTime() ? java.util.Collections.emptyList() : itemsQuery.getResultList();

将该行复制到方法的第一行。

答案 1 :(得分:0)

由于user1545636建议你错过了重新加载itemsList。 现在,我希望与您分享一个更好的代码设计,以便在JPA插入/更新/删除操作发生后刷新jTable:

在Netbeans中,跳转到设计标签,右键单击您的jtable并点击“自定义代码......”

从“组件”下拉列表中选择itemsList并选择下方列表中的“自定义创建”。

现在从

更改itemsList inizialization
itemsList = java.beans.Beans.isDesignTime() ? java.util.Collections.emptyList() : itemsQuery.getResultList();

itemsList = java.beans.Beans.isDesignTime() ? java.util.Collections.emptyList() : org.jdesktop.observablecollections.ObservableCollections.observableList(itemsQuery.getResultList());

通过这种方式,您可以观察itemsList对象。 现在在你的refreshItm方法中只写这段代码:

itemsList.clear();
itemsList.addAll( itemsQuery.getResultList());

在JPA插入/更新/删除后调用该方法,jTable会像魅力一样自动刷新!

我希望你喜欢这个解决方案