我正在构建一个电子表格应用程序。但这不是一个像使用 table.getSelectedColumn()
和 table.getSelectedRow()
在 JTable 中查找所选单元格的问题。
在 Microsoft Excel
,当我们使用箭头键浏览单元格时,单元格中的内容会在突出显示单元格后立即显示在Formula Bar
中。在这里,最重要的是,when a cell is highlighted by the selection as above, the value inside the cell is displayed at the sametime
.所以我的问题是,我们如何在 JTable 中做同样的事情?
我尝试使用 keyEvent listener
做类似的事情,但问题是,当生成关键事件时,下一个单元格被突出显示,但上一个(之前突出显示的)的索引在 getSelectedRow() 和 getSelectedColumn() 方法中返回。我也尝试了ListSelectionListener
.但同样的错误也存在。
如果有任何方法可以在使用箭头键导航时突出显示新单元格后立即获取所选单元格的索引,这将起作用。还应该生成一个事件,因为我想像在Excel中一样更新编辑栏。有人可以帮助我吗?
提前感谢!
你可以使用这个简单的技巧!只需要制作两个多余的jTextfields。(可以设置为在运行时不可见)
尝试从下面的代码段中获取一个想法。
private int r;
private int c;
private String buffer;
private void jTextField1KeyTyped(java.awt.event.KeyEvent evt) {
jTextField2.requestFocus();
buffer = jTextField1.getText();
jTable1.getModel().setValueAt(jTextField1.getText(), r, c);
}
private void jTable1KeyTyped(java.awt.event.KeyEvent evt) {
r = jTable1.getSelectedRow();
c = jTable1.getSelectedColumn();
jTable1.putClientProperty("terminateEditOnFocusLost", true);
jTextField1.requestFocus();
}
private void jTextField1FocusGained(java.awt.event.FocusEvent evt) {
buffer = (String)jTable1.getModel().getValueAt(r, c);
jTextField1.setText(buffer);
jLabel1.setText(buffer);
}
private void jTextField2FocusGained(java.awt.event.FocusEvent evt) {
buffer = jTextField1.getText();
jTable1.getModel().setValueAt(buffer, r, c);
jTextField1.requestFocus();
}