2017-05-05 88 views
-1

我有JTableMULTIPLE_INTERVAL_SELECTION。我需要CONTROL + CLICK来选择添加行。在我的LAF中,这不会自动发生。我写了使用鼠标监听下面的代码:使用CTRL + CLICK在JTable中选择多行

addMouseListener(new MouseAdapter() 
{ 
    @Override 
    public void mousePressed(MouseEvent event) 
    { 
     ListSelectionModel listSelectionModel = getSelectionModel(); 

     if (listSelectionModel.getSelectionMode() == 
       ListSelectionModel.MULTIPLE_INTERVAL_SELECTION) 
     { 
      if (event.isControlDown()) 
      { 
       int rowView = rowAtPoint(event.getPoint()); 

       if (isRowSelected(rowView)) 
       { 
        System.out.println("rowView already selected"); 

       } 

       listSelectionModel.addSelectionInterval(rowView, rowView); 
      } 
     } 
    } 
}); 

的问题是,在进入鼠标监听前行选择事件发生。被点击的行被选中,但之前的选择被清除。

我的问题是:

如何捕捉到评选活动由通自动选择?

我可以捕获该事件以阻止它清除以前的选择,请使用getModifiers()来查看CONTROL键是否被按下,并致电addSelectionInterval

我需要帮助识别并设置一个侦听器来执行此操作。

+0

请注意ListSelectionModel仅在2D数组中,可以有没有自定义代码部分的限制,那么您必须使用getSelectedIndices()。length和get-setAnchor/LeadSelectionIndex来玩例如[code by](http:// stackoverflow。 com/a/10793911/714968)@aterai或[this one](http://stackoverflow.com/a/7620693/714968) – mKorbel

+0

您可能需要[consume](http://docs.oracle.com/javase /8/docs/api/java/awt/event/InputEvent.html#consume--)控制关闭时的MouseEvent,所以JTable不会试图解释它。请注意,点击Control应该切换行的选择,而不是单方面选择行;这就是我所了解的每件作品的外观和感觉。 – VGR

+0

我只需要有多个选择。如果选中一行并按下另一行上的控制点击,则需要选中并突出显示这两行。 – Kit

回答

-1

我的一位鼠标监听者正在清除选中的选项,导致控件+单击不工作。感谢您审查我的问题。