2011-11-05 97 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"}); 
}