如何解决JTable删除行消耗事件以免进一步调度
改用按键绑定…
InputMap im = table.getInputMap(JTable.WHEN_FOCUSED);
ActionMap am = table.getActionMap();
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0), "DeleteRow");
am.put("DeleteRow", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Delete row");
int row = table.getSelectedRow();
if (row > -1) {
DefaultTableModel model = (DefaultTableModel) table.getModel();
model.removeRow(row);
}
}
});
(我借用了mKorbel数据进行测试,因此我的测试使用DefaultTableModel
,您需要转换为使用的模型)。
另外,如果您进行编辑,这可能仍然会触发,因此您需要检查一下
解决方法
我需要在Delete键上从JTable删除行。所以用例很简单,用户选择一些行,按Delete键,这些行将被删除。代码也很简单:
DefaultTableModel tableModel = (DefaultTableModel) table.getModel();
int[] selectedRows = table.getSelectedRows();
for (int i = selectedRows.length - 1; i > -1; i--) {
tableModel.removeRow(selectedRows[i]);
}
问题是,删除操作完成后,我们会听到一声蜂鸣声(我在窗户上,是典型的窗户蜂鸣声),就像在空白文本框中按Delete键时(或插入符号在键盘的末尾)一样。文本)。我正在发生的事情是,按键被进一步分派到显示该单元格(已删除单元格之后的第一个单元格)的文本内容的文本组件。因为在点前没有字符,所以DefaultEditorKit
$ DeleteNextCharAction#actionPerformed方法会发出哔声。作为一种技巧,我在侦听器中修改了该事件:
e.setKeyCode(KeyEvent.VK_SHIFT) // see JTable#processKeyBinding
该事件无法继续进行,因此蜂鸣声消失了,但我认为这是一个糟糕的解决方案,并且有更好的解决方案。但是,哪个更好的解决方案呢?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。