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

Java 如何通过鼠标按下和拖动关闭jtable单元格选择,java,swing,jtable,selection,Java,Swing,Jtable,Selection,我想使用一个JTable,但是使用不同的单元格选择方法,而不是单击单元格。我使用glasspane允许用户绘制一个矩形,并发现矩形中包含哪些要选择的单元格。但我只想选择一个完全在矩形内的单元格。例如,想象一个简单的3x3表格。用户my希望选择中间单元格(1,1)。我希望他们能够在第一个单元格0,0中单击并向下拖动到单元格2,2,绘制矩形以供选择。但我不希望选择单元格0,0或2,2。或者选择全部9个选项。这是一个简化的例子。绘制矩形实际上可能包含屏幕上多个表中的单元格 我研究了ListSelect

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

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

我发现某个地方有一个内置在JTables中的鼠标输入适配器?如果可能的话,我想把它关掉

谢谢,
BBB

对于一般性/基于文本的问题,您会得到一般性、基于文本的回答。:)首先卸载默认情况下安装在表上的鼠标侦听器:

MouseListener[] listeners = myTable.getMouseListeners();
for (MouseListener l : listeners)
{
    myTable.removeMouseListener(l);
}
然后,将您自己的MouseListener添加到表中(如果需要,请使用MouseAdapter),并覆盖“mousePressed”/“mouseReleased”方法以记录拖动开始和结束的点。确定封闭矩形并调用:

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

选择一个(或多个)细胞。

好肉汁!我要试试这个。我只是假设,因为我没有安装鼠标侦听器,所以我没有直接/简单的访问权限来删除它。我以为getMouseListeners()只会返回我安装的侦听器。如果这行得通,我为无知道歉。但我不确定你所说的“一般/基于文本的问题”是什么意思。我经常使用文本;)因为人类一直在爬出的大深坑中的所有东西的爱,它起作用了!我用MouseListener和MouseMotionListener完成了这项工作,并停止了选择。运动监听器正在获取拖动事件并添加选择间隔。没有冒犯的意思,我只是在和你开玩笑,因为你发布了一个描述很重但代码最少的问题。:)