当前位置: 首页 > 面试题库 >

JTable。删除行。消耗事件以免进一步调度

夏建弼
2023-03-14
问题内容

我需要在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

该事件无法继续进行,因此蜂鸣声消失了,但我认为这是一个糟糕的解决方案,并且有更好的解决方案。但是,哪个更好的解决方案呢?


问题答案:

改用按键绑定…

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,您需要转换为使用的模型)。

另外,如果您进行编辑,这可能仍然会触发,因此您需要检查一下



 类似资料:
  • 我正在用java创建一个没有数据库的库系统程序。(直接使用文件)。 我在删除jtable中的一行时遇到了一个奇怪的问题(也就是从文件中删除)。 有时当我在表格中选择一行并单击删除按钮时,不止一行被删除了! 大多数时候它也能正常工作!! 我的代码: 我的模型类: 用户信息类别: 我的文本文件:

  • 我正在使用ListSelectionListener从所选行更新我的JTextField(countryTxt)。 但是,当我选择一行并单击按钮时,它会弹出一个异常。当我没有在表格中选择一行并单击按钮时,一切正常。显然,我可以在未触发事件时删除一行。因此,我的问题是:如何在触发事件后删除一行。提前谢谢。

  • 我是新来的希望你们能帮我。。。 我是java编程的初学者,我想我对这个问题有点不知所措。 我的程序运行得很好,除了一个让我恼火的小细节。我有一个JTable,第一列有一个按钮,可以从表中删除这一行。它工作得很好,除了当我试图删除表的最后一行时,按钮停留在那里,然后表冻结,我无法删除任何行,因为我收到了一个“越界异常”。但是,当我使用命令表时。getRowCount()); 在删除该行之前和之后,表

  • 我必须在react-native中编写代码,允许用户上传视频到amazon s3,以转码供各种设备使用。对于上传发生后的处理;我正在审查两种方法: 此外,不管怎样,我需要一种方法来传递额外的参数到lambda或沿sns消息,这将允许我以某种方式将上传视频的用户与他们的帐户联系起来。是否有一种方法可以将额外的基于文本的值传递到s3,以便在上传完成时传递到lambda或sns?作为警告,我计划使用re

  • 我将HiberNate与JTA(容器管理事务)一起使用。 假设我有以下模型:与办公室和团队有多对一关系的员工。我已经建立了双向关联。 现在数据: Emp 1与Ofc 1和团队1 Emp 2与Ofc 1和团队2 问题是:我遍历Team 1员工(即emp 1)并删除他们。然后在同一个事务中,我执行HQL选择以获取Ofc 1。现在,在Ofc 1员工列表中,我希望只找到emp 2(因为emp 1在上一步中

  • 问题内容: 我需要删除JTable中的所有行。 我已经尝试了以下两种方法: 和 两者都不会删除所有行。有任何想法吗? 问题答案: 以下代码为我工作: