我有一个JTable
,其中包含我从CSV文件中读取的内容。我使用以下方法,当我点击一行时,它将打开一个新的JFrame
并关闭前一个。它将显示诸如ID,坐标,在该表上写入的内容的状态,并且如果需要可以编辑它们。例如。表格如下:
|ID |co-ordinates | status |
| 1 | (3,21) | pending |
| 2 | (4,21) | full |
| 3 | (9, 12) | empty |
如果我单击第1行,它将弹出ID(1)的帧,坐标(3,21)和另一帧中文本字段中的状态,并且是可编辑的。我能够执行单击功能但不确定如何在单击该行时将该数据带到下一帧。
//in location class
table.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 1) {
int row = table.getSelectedRow();
AddEdit An = new AddEdit(); //goes to next class
An.setVisible(true);
dispose();
}
}
});
如何在点击行时将数据带到下一帧?
答案 0 :(得分:4)
在不知道JTable
的内容类型的情况下,我只能提供通用解决方案。
int row = table.getSelectedRow();
int userID = (Integer) table.getValueAt(row, 0);
// is co-ordinates [sic] a String or a Point?
// You can do the same as for userID and use (row,1) to get the value
String status = (String) table.getValueAt(row, 2)
使用此功能,您可以创建Object[]
并将其发送给AddEdit
的构造函数,或者在getJTableObject()
中编写方法AddEdit
或类似内容。这取决于您是否可以更改AddEdit
。
您还应该考虑安德鲁斯的建议并使用cardLayout。有了这个,您可以使用ObserverPattern
并发送您的对象。
另一种方法是使用JOptionPane
:
Object[] message = { "Please update the information:", newStatusPanel };
int response = JOptionPane.showConfirmDialog(null, message, "Update information",
JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE);
newStatusPanel
只是JPanel
,您放置了JTextFields
。然后,通过我之前显示的方法,使用JTable
中的内容填充这些字段,当用户点击正常时,您更新JTable
。
// Do something with the result
if (response == JOptionPane.OK_OPTION) {
model.addRow(new Object[] { txtID.getText(), coordinates.getText(), ... });
这看起来像这样:
(PS:我稍后会将基于文本的密码更改为基于哈希的密码。请忽略这种明显不安全的密码处理方式)