列在JTable中移动[finished]事件

ash*_*lal 11 java events swing jtable

如何在JTable中检测到列移动操作已完成?我已经将columnModeListener添加到我的列模型中,但问题是每次列移动时都会调用columnMoved方法(按某些像素).我不想要这种行为.我只想检测列拖动完成的时间.

columnModel.addColumnModelListener(new TableColumnModelListener() {

            public void columnAdded(TableColumnModelEvent e) {
            }

            public void columnRemoved(TableColumnModelEvent e) {
            }

            public void columnMoved(TableColumnModelEvent e) {
                //this is called so many times
                //I don't want this, but something like column moved finished event
                System.out.println("Moved "+e.getFromIndex()+", "+e.getToIndex());
            }

            public void columnMarginChanged(ChangeEvent e) {
            }

            public void columnSelectionChanged(ListSelectionEvent e) {
            }
        });
Run Code Online (Sandbox Code Playgroud)

我希望很清楚我在寻找什么.谢谢.

ash*_*lal 14

这就是我最终做的事情.我知道它很脏,但它适合我正在寻找的东西:

boolean dragComplete = false;
        apTable.getTableHeader().addMouseListener(new MouseAdapter() {
            @Override
            public void mouseReleased(MouseEvent e) {
                if (dragComplete) {
                    System.out.println("Drag completed");
                }
                dragComplete = false;
            }
        });
        columnModel.addColumnModelListener(new TableColumnModelListener() {

            public void columnAdded(TableColumnModelEvent e) {
            }

            public void columnRemoved(TableColumnModelEvent e) {
            }

            public void columnMoved(TableColumnModelEvent e) {
                dragComplete = true;
            }

            public void columnMarginChanged(ChangeEvent e) {
            }

            public void columnSelectionChanged(ListSelectionEvent e) {
            }
        });
Run Code Online (Sandbox Code Playgroud)