【问题标题】:How to deselect the row, when lost focus for a table in JTable?当 JTable 中的表失去焦点时,如何取消选择行?
【发布时间】:2015-05-30 11:23:28
【问题描述】:

为了选择一行,我使用以下代码:

table_2.addMouseListener(new MouseAdapter() {
          @Override
          public void mousePressed(MouseEvent event1) {
          if (event1.getButton() == MouseEvent.BUTTON3) {
                  Point point = event1.getPoint();
                  int column = table_2.columnAtPoint(point);
                  int row = table_2.rowAtPoint(point);
                  table_2.setColumnSelectionInterval(column, column);
                  table_2.setRowSelectionInterval(row, row);
          }
       }
  });

然后,要重置突出显示的行,我使用以下代码:

table_2.addFocusListener(new FocusAdapter() {
    @Override
    public void focusLost(FocusEvent arg0) {
       table_2.clearSelection();
    }
});  

但我想知道,是否有任何其他方式来重置突出显示的行?
所以我得到了:

table_2.getSelectedRow()==-1

【问题讨论】:

  • 为什么要以另一种方式搜索?对我来说它看起来非常好..
  • 为什么需要另一种方式? clearSelection() 怎么了?
  • @RealSkeptic:当我单击右键,然后失去焦点时,选择不会重置。
  • 您在编辑单元格吗?还是只是选择它?
  • @Hovercraft Full Of Eels:我只是选择右键。编辑被禁用。

标签: java swing jtable focuslistener


【解决方案1】:

为了选择一行,我使用以下代码:

更简单的方法是使用:

table.changeSelection(row, column, false, false);

然后,要重置突出显示的行,我使用以下代码:

当您单击表格中的另一个单元格时,不会生成 focusLost(..) 事件,因为焦点仍在表格上。无需清除选择,因为使用我建议的代码单击另一行时会自动清除选择。

if (event1.getButton() == MouseEvent.BUTTON3) {

不要使用“MouseEvent.BUTTON3”,人们不知道那是什么意思。而是使用

//if (SwingUtilties.isRightMouseButton( event1 ))
if (SwingUtilities.isRightMouseButton( event1 ))

更容易阅读和理解。

【讨论】:

  • 感谢您的回答!但是我应该在哪里使用table.changeSelection(row, column, false, false);
  • @Tomas,而不是设置列和行选择间隔。
  • 请告诉我们,当我使用SwingUtilties.isRightMouseButton( event1 ))时,Eclipse为什么建议创建一个常量。就是这个常量:protected static final SwingUtilities SwingUtilties = null;
  • @Tomas,我在发布的代码中打错了字。我拼错了“实用程序”。我忘记了第二个“我”。
猜你喜欢
  • 1970-01-01
  • 2019-01-02
  • 1970-01-01
  • 1970-01-01
  • 2012-11-05
  • 1970-01-01
  • 2021-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多