2011-11-05 71 views
1

更新JTable的内容我似乎遇到了麻烦认真处理实现一个简单的JTable,当按下GUI的按钮,它只是更新表的内容基础上的actionPerformed

到目前为止,我似乎是得到什么类型的表来实现这个目的的混合想法,但从搜索它似乎是DefaultTable模型。 到目前为止,我已在申报表

private JTable table; 
static Object[] columnNames = new Object[]{"Column 1","Column 2"}; 
static Object[][] rowData = { {"1", "2"} };  

public TestTables() { 
    DefaultTableModel tableModel; 
    tableModel = new DefaultTableModel(rowData, columnNames); 
} 

我甚至不知道我是否已经正确地宣布这一点,但是当我运行GUI它正确地显示表中的数据。我只是不明白,我怎么可以用一个动作进行

public void actionPerformed(ActionEvent e) { 
    if (e.getSource() == X1btn) { 
    // not sure how to set table to be {"3", "4"} instead 
} 

回答

5

在您的actionPerformed方法更新它,得到JTable的模型(这个细节将取决于你的程序结构的引用 - 这是我们不现在知道),这将是一个DefaultTableModel,然后你可以很容易地做任何需要完成这个对象,包括添加行,删除行,更改单元格保存的值...

如果你仍然卡住,考虑创建并发布一个可展示您的问题的最小可编译和可运行示例,即sscce

例如:

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.table.DefaultTableModel; 

public class TestTables { 
    static Object[] columnNames = new Object[] { "Column 1", "Column 2" }; 
    static Integer[][] rowData = { {1, 2}, {3, 4} }; 

    private JPanel mainPanel = new JPanel(); 
    private DefaultTableModel tableModel = new DefaultTableModel(rowData, columnNames); 
    private JTable table = new JTable(tableModel); 

    public TestTables() { 
     JButton timesTwoBtn = new JButton("Multiply By 2"); 
     timesTwoBtn.addActionListener(new ActionListener() { 

     public void actionPerformed(ActionEvent e) { 
      for (int row = 0; row < tableModel.getRowCount(); row++) { 
       for (int col = 0; col < tableModel.getColumnCount(); col++) { 
        Integer value = (Integer) tableModel.getValueAt(row, col); 
        value *= 2; 
        tableModel.setValueAt(value, row, col); 
       } 
      } 
     } 
     }); 
     JPanel btnPanel = new JPanel(); 
     btnPanel.add(timesTwoBtn);  


     mainPanel.setLayout(new BorderLayout()); 
     mainPanel.add(new JScrollPane(table), BorderLayout.CENTER); 
     mainPanel.add(btnPanel, BorderLayout.SOUTH); 
    } 

    public JPanel getMainPanel() { 
     return mainPanel; 
    } 

    private static void createAndShowGui() { 
     TestTables testTables = new TestTables(); 

     JFrame frame = new JFrame("TableFoo"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().add(testTables.getMainPanel()); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGui(); 
     } 
     }); 
    } 
} 
+0

谢谢您花时间做到这一点。对此,我真的非常感激。这是我正在寻找的确切答案。 – user1020024

+0

不客气。 –

1

让那么actionPerformed方法让你的JTable模型。然后用该模型做一些事情。

public void actionPerformed(ActionEvent e) { 
     DefaultTableModel model = (DefaultTableModel)mytable.getModel(); 
     //do something with the model say add a new row or data to the table 
     model.addRow(new Object[]{"new Column1 Data","new Column2 Data"}); 
}