拖动鼠标时损坏的行和列

时间:2017-06-14 21:33:18

标签: java swing jtable mouselistener jtabbedpane

我现在正在考虑JTable,但现在这两次我遇到了这种类型的问题,我觉得我的方法错了,

我有一个JTabbedPane,其中有三个标签设置为表格,我运行测试以查看我对所选标签的检测是否有效以及我是否成功获取了行信息和列信息。

我在这三个表中添加了MouseListener,通过从事件中抓取getRow()getColumn(),可靠地产生了良好的效果!然而,这并没有产生可靠的结果,因为我现在发现如果我点击一行,按住鼠标按钮并拖动到另一行,然后释放getRowgetColumn将单击该单元格但是突出显示的行将是我发布的那一行!

public void detectMouseClickRow(JTable aTabbedPane) {
        aCol = aTabbedPane.getSelectedColumn(); 
        aRow = aTabbedPane.getSelectedRow();
        valueAt = (String)aTabbedPane.getValueAt(aRow, aCol);
}

如何获取突出显示的行的行和列信息?否则当有人点击要删除的作业时,他们可能会选择错误的作业吗?

1 个答案:

答案 0 :(得分:2)

根据我的有限测试,唯一的"看似"获取选择起点的可靠方法是直接使用行DefaultTableModel model = new DefaultTableModel(10, 10); JTable table = new JTable(model); ListSelectionListener listener = new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { if (e.getValueIsAdjusting()) { return; } int row = table.getSelectionModel().getAnchorSelectionIndex(); int col = table.getColumnModel().getSelectionModel().getAnchorSelectionIndex(); System.out.println(row + "x" + col); } }; table.getSelectionModel().addListSelectionListener(listener); table.getColumnModel().getSelectionModel().addListSelectionListener(listener); ...

ListSelectionModel

现在,此示例通过ListSelectionListenerMouseListener进行交互以演示该想法,但您可以轻松地将该想法合并到anchor中并提取选择{{那里有索引