[英]Update JTable content based on ActionPerformed
我似乎很難掌握實現一個簡單的JTable的問題,即當在GUI上按下按鈕時,它只是更新表的內容
到目前為止,我似乎對實現哪種類型的表的想法不一,但是從周圍搜索似乎是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
}
在您的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();
}
});
}
}
制作一個可操作的方法,然后獲取您的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"});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.