我有 2 个窗口,一个窗口显示 JTable
模型数据,当双击该行时会弹出一个新窗口来编辑数据,提交后如何刷新 JTable
?
客户.java:
JPanel getJPanel() {
if (jPanel == null) {
jPanel = new JPanel();
jPanel.setLayout(null);
jPanel.setSize(new Dimension(792, 420));
jPanel.add(getJScrollPane(), null);
setUpTableData();
}
JScrollPane getJScrollPane() {
if (jScrollPane == null) {
jScrollPane = new JScrollPane();
jScrollPane.setBounds(new Rectangle(20, 166, 759, 241));
jScrollPane.setViewportView(getJTable());
}
return jScrollPane;
}
JTable getJTable() {
if (jTable == null) {
jTable = new JTable();
jTable.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent e) {
new ContactEdit(name,email,phoneNo,phoneNo2,id).getJInternalFrame().setVisible(true);
}
}
});
DefaultTableModel tableModel = (DefaultTableModel) jTable.getModel();
String[] colName = {"No." ,"Name", "Email","Contact No. 1","Contact No. 2","ID"};
tableModel.setColumnIdentifiers(colName);
jTable.getTableHeader().setBackground(Color.WHITE);
jTable.getTableHeader().setForeground(Color.BLUE);
Font Tablefont = new Font("DialogInput",Font.BOLD,12);
jTable.getTableHeader().setFont(Tablefont);
}
return jTable;
}
public void setUpTableData() {
DefaultTableModel tableModel = (DefaultTableModel) jTable.getModel();
ArrayList<Address> list = sql.getContactLists();
int i = 0;
for (i = 0; i < list.size(); i++) {
String[] bill = new String[6];
for (int j = 0; j < 6; j += 6) {
bill[j] = Integer.toString(i);
bill[j + 1] = list.get(i).getName();
bill[j + 2] = list.get(i).getEmail();
bill[j + 3] = list.get(i).getPhoneNo();
bill[j + 4] = list.get(i).getPhoneNo2();
bill[j + 5] = list.get(i).getId();
}
tableModel.addRow(bill);
}
jTable.setModel(tableModel);
}
编辑.java
private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setBounds(new Rectangle(155, 138, 85, 25));
jButton.setText("Update");
jButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
Address a = new Address(jTextField1.getText(),jTextField.getText(),jTextField3.getText(),jTextField2.getText(),"");
sql.updateContact(a, Integer.parseInt(getJTextField4().getText()));
Customer c = new Customer();
c.setUpTableData();
getJInternalFrame().setVisible(false);
getJInternalFrame().dispose();
}
});
}
return jButton;
}
在 JPanel
Load 上将调用此 setUpTableData
从数据库中检索数据。
在编辑窗口,我在更新按钮上添加了一个 Action 监听器来刷新表格,但我不知道如何让jTable 刷新更新的数据? ActionListener
上的 setUpTableData 给我空指针。
最佳答案
一种解决方案是为编辑窗口提供另一个 JPanel
的实例。 (您可以通过将面板传递给编辑窗口的构造函数来完成此操作)然后您可以简单地从 ActionListener
中调用 setUpTableData()
方法。
执行此操作的代码可能如下所示:
编辑框架构造函数
public EditFrame(CustomerListFrame cListFrame, ... other params) {
this.cListFrame = cListFrame;
}
更新 ActionListener
public void actionPerforment(ActionEvent e) {
cListFrame.setUpTableData(the new data);
}
关于Java Swing : How to refresh JTable Model from another page button,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2913400/