你是对的 - 你不需要重新构造 JPanel。实际上,您甚至不需要重构JTable,甚至可能甚至不需要重构TableModel。 (另外,您可能想阅读一些有关 Model-View-Controller 设计模式的信息)
相反,您应该重置TableModel 中的数据。我认为这应该导致JTable 被重新粉刷。如果没有,您可以致电:
table.tableChanged(new TableModelEvent(tableModel));
或者,如果您觉得最好用新数据构造一个新的TableModel:
table.setModel(newTableModel);
这是 JTable 中的 SSCCE 由其他东西更新...我已经用来自 JTextField 的输入替换了数据库连接,但它应该给你一个想法:
public class TableTest {
public static void main(String[] args) {
JFrame frame = new JFrame("Table Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JTextField text = new JTextField("Editable Text");
final TableModel model = new DefaultTableModel(new String[]{"Text"},1);
model.setValueAt(text.getText(), 0, 0);
text.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
model.setValueAt(text.getText(), 0, 0);
}
});
JTable table = new JTable(model);
JPanel panel = new JPanel(new BorderLayout());
panel.add(text, BorderLayout.NORTH);
panel.add(new JScrollPane(table), BorderLayout.SOUTH);
frame.setContentPane(panel);
frame.pack();
frame.setVisible(true);
}
}