Обновить Jtable - PullRequest
       17

Обновить Jtable

4 голосов
/ 29 января 2009

У меня есть JTable, созданный из Vector. Как обновить таблицу JTable для отображения новых данных, добавляемых в вектор?

Ответы [ 2 ]

17 голосов
/ 29 января 2009

Ваш JTable должен обновляться автоматически при изменении TableModel. Я делаю прыжок здесь, но я предполагаю, что вы не используете свою собственную TableModel, а просто вызвали конструктор JTable с вашим Vector. В этом случае вы можете получить хук к TableModel и привести его к DefaultTableModel, а затем вызвать один из его методов уведомления, чтобы JTable узнал об изменении, что-то вроде:

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

Что бы я действительно порекомендовал бы использовать вашу собственную TableModel, если это не что-то очень тривиальное, но тот факт, что вы обновляете данные, указывает, что это не так.

Ознакомьтесь с руководством по солнцу , работающим с таблицами , в частности, с разделом , прослушивающим изменения данных .

Может показаться, что впереди больше работы, но в долгосрочной перспективе это избавит вас от многих головных болей, и Правильный путь для этого

1 голос
/ 02 ноября 2011

Я вызываю метод 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);
        }
    }
...