如何通过鼠标按下和拖动来关闭jtable单元格选择

时间:2012-02-02 03:22:33

标签: java swing jtable selection

我想使用JTable但使用不同的单元格选择方法而不是单击单元格。我正在使用glasspane来允许用户绘制一个矩形,并发现要包含在矩形中的单元格以供选择。但我只想选择一个单元格,如果它完全在矩形内。例如,想象一个简单的3 x 3表。用户我想选择中间单元格(1,1)。我希望他们能够在第一个单元格0,0中单击并向下拖动到单元格2,2绘制矩形以供选择。但我不希望选择0,0或2,2个单元格。或者就此而言,选择所有9个。这是一个简化的例子。绘制矩形实际上可能包含屏幕上多个表格中的单元格。

我研究了实现ListSelectionModel接口,但实际上并不想尝试重写它。在进行实验时,我看到模型中的setSelectionInterval()被称为疯狂(对于每一个鼠标移动),因为我在表格中单击并拖动。我真正想要的是找到一种简单的方法来关闭调用SelectionModel的表上的任何监听器/机制,同时保持模型的位置。我仍然希望它报告isSelectedIndex()例如。我会告诉模型选择的间隔。

我认为某处有一个鼠标输入适配器固有内置于JTable中?如果可能的话,我想把它关掉。

谢谢, BBB

1 个答案:

答案 0 :(得分:3)

对于基于通用/基于文本的问题,您将获得基于文本的通用响应。 :)首先卸载默认情况下安装在表上的MouseListeners:

MouseListener[] listeners = myTable.getMouseListeners();
for (MouseListener l : listeners)
{
    myTable.removeMouseListener(l);
}

然后,将您自己的MouseListener添加到表中(如果需要,使用MouseAdapter)并覆盖“mousePressed”/“mouseReleased”方法以记录拖动开始的点,并拖动结束。确定封闭的矩形并调用:

setRowSelectionInterval(#, #)
setColumnSelectionInterval(#,#)

选择一个(或多个)单元格。