【问题标题】:Refresh Jtable刷新 Jtable
【发布时间】:2010-10-04 05:02:13
【问题描述】:

我有一个从 Vector 创建的 JTable。 如何刷新 JTable 以显示添加到 Vector 中的新数据?

【问题讨论】:

    标签: refresh jtable


    【解决方案1】:

    当 TableModel 发生更改时,您的 JTable 应该会自动更新。我在这里迈出了一大步,但我猜你没有使用自己的 TableModel,只是用你的 Vector 调用了 JTable 构造函数。在这种情况下,您可以获取 TableModel 上的挂钩并将其转换为 DefaultTableModel,然后调用其通知方法以让 JTable 知道更改,例如:

    DefaultTableModel model = (DefaultTableModel)table.getModel();
    model.fireTableChanged(new TableModelEvent(........));
    

    真正推荐的是使用您自己的 TableModel,除非这是非常琐碎的事情,但您正在更新数据的事实表明它不是。

    查看working with tables 上的太阳教程,尤其是listening for data changes 上的部分。

    这似乎需要更多的前期工作,但从长远来看,它会为您省去很多麻烦,并且是正确的方法

    【讨论】:

    • 好吧,在我的表中,首先我将数据从数据库传输到向量中,然后放入 DefaultTableModel 对象以显示到 jtable 中。现在,当我通过分割一行并单击创建的editButton 并完成更新来更新数据库中的一行时,我需要知道如何将数据重新传输到向量,然后调用fireTableDataChanged() 进行更改。我的代码在这里:stackoverflow.com/questions/18282753/…
    【解决方案2】:

    我调用 initTable 方法,然后调用 loadTable()。我敢肯定还有很多其他方法,但这就像 acharm 一样。

    private void initBerkheimerTable() {
            tblBerkheimer = new JTable();
            tblBerkheimer.getSelectionModel().addListSelectionListener(new SelectionListener());
            tblBerkheimer.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            tblBerkheimer.setModel(new DefaultTableModel(
                new Object[][] {
                },
                new String[] {
                    "Id", "Name", "Berkheimer PSD", "Rate", "Current PSD", "Current Rate"
                }
            ) {
                Class[] columnTypes = new Class[] {
                    String.class, String.class, String.class, String.class, String.class, String.class
                };
                public Class getColumnClass(int columnIndex) {
                    return columnTypes[columnIndex];
                }
                boolean[] columnEditables=new boolean[]{false,false,false,false,false,false,false,false,false,false};
                public boolean isCellEditable(int row, int column) {
                    return columnEditables[column];
                }
            });
            scrollPane.setViewportView(tblBerkheimer);
            add(scrollPane);
        }
    
    private void loadTable(){
            PreparedStatement ps=null;
            ResultSet rs=null;
            try {
                PayrollPsdAuditing.payroll=Database.connectToSQLServerDataBase(PayrollPsdAuditing.payrollIni);
                ps=PayrollPsdAuditing.payroll.prepareStatement(
                    "SELECT a.EMPLOYID, " +
                    "   a.NAME, " +
                    "   a.PSD_CODE, " +
                    "   a.RATE, " +
                    "   b.STRINGS_I_2 as CURRENT_PSD, " +
                    "   c.lcltaxrt as CURRENT_RATE " +
                    "FROM PYRL_PSD_VALIDATION a, " +
                    "   EX010130 b, " +
                    "   UPR41400 c " +
                    "WHERE a.employid=b.empid_i " +
                    "   AND c.localtax=b.strings_i_2");
                rs=ps.executeQuery();
                while(rs.next()) {
                    Swing.fillJTable(tblBerkheimer,
                            new String[]{rs.getString("EMPLOYID").trim()
                                ,rs.getString("NAME").trim()
                                ,rs.getString("PSD_CODE").trim()
                                ,String.valueOf(rs.getDouble("RATE"))
                                ,rs.getString("CURRENT_PSD").trim()
                                ,String.valueOf(rs.getDouble("CURRENT_RATE")/100000)});
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            } finally {
                Database.close(PayrollPsdAuditing.payroll);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2015-09-06
      • 2011-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-06
      • 2012-06-13
      相关资源
      最近更新 更多