【问题标题】:JTable how to fire event selecting a row or double click on a rowJTable如何触发事件选择一行或双击一行
【发布时间】:2015-02-28 19:22:11
【问题描述】:

我正在使用 javax.swing.JTable 来显示数据库表中的行。 我需要针对两种不同的情况触发两个不同的事件:

  • 当至少选择一行时(或者在执行至少行的单击时)。
  • 双击行时。

我已经在寻找堆栈溢出的答案,但我没有找到任何令人满意的东西。 有什么想法吗?

【问题讨论】:

  • 1- 使用表ListSelectionModel 附加ListSelectionListener; 2- 在JTable 上使用MouseListener 并监视双击,大概是用鼠标左键。您可能还想描述您查看过哪些解决方案以及它们不适合的原因,因此我们不会涵盖相同的领域并浪费彼此的时间

标签: java swing jtable double-click


【解决方案1】:

您可以在表格中添加鼠标侦听器并使用鼠标事件在此处捕获事件,如下所示

table.addMouseListener
      (
        new MouseAdapter()
        {
          public void mouseClicked(MouseEvent e)
          {
            if (e.getClickCount() == 2)
            {
            }
            if (e.getClickCount() == 1)
            {
            }
          }
        }
      );
    }

您可以使用捕获选择事件

table.getSelectionModel().addListSelectionListener(...);

【讨论】:

  • 因此,如果我双击右键,这将触发您的if 语句。如果我用键盘更改选择怎么办?
  • @MadProgrammer 还需要添加 keyListener 以使用键盘监视更改选择
  • 啊,不,KeyListener 不是答案,选择更改可能由于关键操作以外的原因发生
  • @MadProgrammer 你的意思是只有 ListSelectionListener 可以解决目的?
  • ListSelectionListener 是监控表格行选择变化的最佳选择,它会考虑到鼠标、键盘和程序本身的变化...
【解决方案2】:

当至少选择一行时(或者在执行至少一行上的单击)。

您应该通过ListSelectionListener 使用JTables ListSelectionModel 监控对行选择的更改。当用户使用鼠标或键盘更改选择时,或者如果选择因某种原因以编程方式更改时,这将通知您

详情请见How to Write a List Selection Listener

当双击一行时

您可以检测到这一点的唯一方法是使用MouseListener。通常,用户希望鼠标左键单击会执行一项操作,而鼠标右键会执行其他操作。

您需要使用SwingUtilities.isLeftMouseButtonSwingUtilities.isRightMouseButton 来确定用户实际在做什么。

详情请见How to Write a Mouse Listener

【讨论】:

    猜你喜欢
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 2018-03-31
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    相关资源
    最近更新 更多