Java 当JTable中的表失去焦点时,如何取消选择该行?

Java 当JTable中的表失去焦点时,如何取消选择该行?,java,swing,jtable,focuslistener,Java,Swing,Jtable,Focuslistener,为了选择行,我使用以下代码: table_2.addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent event1) { if (event1.getButton() == MouseEvent.BUTTON3) { Point point = event1.getPoint();

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

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.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
为了选择行,我使用以下代码:

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.changeSelection(row, column, false, false);
然后,要重置高亮显示的行,我使用以下代码:

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();
    }
});  
单击表中的另一个单元格时,不会生成focusLost(..)事件,因为焦点仍在表上。无需清除选择,因为使用我建议的代码单击另一行时,选择将自动清除

if (event1.getButton() == MouseEvent.BUTTON3) {
不要使用“MouseEvent.BUTTON3”,人们不知道这是什么意思。改用

//if (SwingUtilties.isRightMouseButton( event1 ))
if (SwingUtilities.isRightMouseButton( event1 ))
更容易阅读和理解

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

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.changeSelection(row, column, false, false);
然后,要重置高亮显示的行,我使用以下代码:

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();
    }
});  
单击表中的另一个单元格时,不会生成focusLost(..)事件,因为焦点仍在表上。无需清除选择,因为使用我建议的代码单击另一行时,选择将自动清除

if (event1.getButton() == MouseEvent.BUTTON3) {
不要使用“MouseEvent.BUTTON3”,人们不知道这是什么意思。改用

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


哪个更容易阅读和理解。

为什么要用另一种方式搜索?我觉得很好你为什么需要另一种方式?
clearSelection()
有什么问题?@realpoint:当我单击右键,然后失去焦点时,选择没有重置。您正在编辑单元格吗?还是仅仅选择它?@满是鳗鱼的气垫船:我只是选择了右键。编辑已禁用。为什么要以其他方式搜索?我觉得很好你为什么需要另一种方式?
clearSelection()
有什么问题?@realpoint:当我单击右键,然后失去焦点时,选择没有重置。您正在编辑单元格吗?还是仅仅选择它?@满是鳗鱼的气垫船:我只是选择了右键。编辑被禁用。谢谢您的回答!但是我应该在哪里使用
table.changeSelection(行、列、false、false)
?@Tomas,而不是设置列和行选择间隔。请告诉我们,当我使用
swingutilites.isRightMouseButton(event1))
时,Eclipse为什么建议创建一个常量。该常量是:
受保护的静态最终SwingUtilities SwingUtilities=null@Tomas,我在我发布的代码中输入了一个错误。我把“公用事业”拼错了。我忘了第二个“我”。谢谢你的回答!但是我应该在哪里使用
table.changeSelection(行、列、false、false)
?@Tomas,而不是设置列和行选择间隔。请告诉我们,当我使用
swingutilites.isRightMouseButton(event1))
时,Eclipse为什么建议创建一个常量。该常量是:
受保护的静态最终SwingUtilities SwingUtilities=null@Tomas,我在我发布的代码中输入了一个错误。我把“公用事业”拼错了。我忘了第二个“我”。