将选定数据从frame1中的jtable复制到frame2中的另一个表

时间:2015-06-29 08:16:54

标签: java swing jtable

我在frame1中有一个JTable2,在frame2中有一个JTable1。我想复制并将表2中的选定数据发送到table1。我该怎么做 ?

private void jButton3MouseClicked(java.awt.event.MouseEvent evt) {                                      
String sql = "select * from table1 where Bill_No like '"+jTextField2.getText()+"'";
        try{
            pst = conn.prepareStatement(sql);
            rs = pst.executeQuery();
            jTable2.setModel(DbUtils.resultSetToTableModel(rs));
            JFrame NewJFrame2 = new NewJFrame2();
            NewJFrame2.setVisible(true);           
            int i=0; 
            while(rs.next()) {
            Object bno = rs.getString("Bill No");
            Object bamount = rs.getString("Bill Amount");
            Object btds = rs.getString("TDS");
            Object btax = rs.getString("Tax");
            Object bpayable = rs.getString("Payable");      

            jTable1.getModel().setValueAt(bno,i, 0 );
            jTable1.getModel().setValueAt(bamount, i, 1);
            jTable1.getModel().setValueAt(btds, i, 2);
            jTable1.getModel().setValueAt(btax, i, 3);
            jTable1.getModel().setValueAt(bpayable, i, 4);              
            System.out.println(i);
            i++;
            }
        }
        catch(Exception e){
            JOptionPane.showMessageDialog(null, e);
        }
    }             

1 个答案:

答案 0 :(得分:1)

首先看一下How to Use Tables

如果要“复制”所选数据,则需要知道选择了哪些行,请参阅JTable#getSelectedRows

你使用DbUtils使自己的生活变得困难,因为你已经失去了将对象从一个模型转移到另一个模型的能力。

基本思路是将原始表中的值复制到新的TableModel并将其传递给第二个窗口,如

TableModel original = table.getModel();
DefaultTableModel model = new DefaultTableModel(table.getSelectedRowCount(), original.getColumnCount());
for (int col = 0; col < original.getColumnCount(); col++) {
    model.addColumn(original.getColumnName(col));
}

int[] selectedRows = table.getSelectedRows();
for (int targetRow = 0; targetRow < selectedRows.length; targetRow++) {
    int row = selectedRows[targetRow];
    int modelRow = table.convertRowIndexToModel(row);
    for (int col = 0; col < original.getColumnCount(); col++) {
        model.setValueAt(original.getValueAt(modelRow, col), targetRow, col);
    }
}
例如,

。现在您只需将model传递到第二个窗口并将其应用于

中包含的JTable