如何接收JTable的mouseDragged事件

时间:2013-10-09 11:34:40

标签: java swing drag-and-drop jtable mouselistener

我正在尝试为JTable编写自定义的拖放行为,但无法接收MOUSE_DRAGGED个事件。我想问题是本机DnD操作消耗了这个事件(如mouseDragged的javadoc:"Due to platform-dependent Drag&Drop implementations, MOUSE_DRAGGED events may not be delivered during a native Drag&Drop operation. "中提到的那样),但我正在寻找一种方法来禁用它,或者解决它。 / p>

这是一个证明问题的SSCCE:

public class DragAndDrop {
    @SuppressWarnings("serial")
    public static void main(String[] args) {
        JFrame f = new JFrame();
        f.getContentPane().add(
                new JTable(
                        new Object[][] {{1,2,3},{4,5,6}}, 
                        new Object[] {"one", "two", "three"}) 
                {{

                        addMouseListener(new MouseAdapter() {

                            @Override
                            public void mouseDragged(MouseEvent e) {
                                System.out.println("mouseDragged");
                            }

                            @Override
                            public void mousePressed(MouseEvent e) {
                                System.out.println("mousePressed");
                            }

                            @Override
                            public void mouseReleased(MouseEvent e) {
                                System.out.println("mouseReleased");
                            }

                        });
                }}
        );

        f.setVisible(true);
    }
}

1 个答案:

答案 0 :(得分:2)

  • 只有使用适当的鼠标(Xxx)监听器并且与MouseAdapter结合使用时才会出错,并且没有/为了异常而哭泣

  • 你添加了MouseListener,正确的可能是MouseListener,并且与MouseMotionListener一起,你可以将这两个Listener分成两个独立的代码块(另一个可能的错误)TransferHandler

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JTable;

public class DragAndDrop {

    public static void main(String[] args) {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(new JTable(new Object[][]{{1, 2, 3}, {4, 5, 6}},
                new Object[]{"one", "two", "three"}) {
            {
                addMouseMotionListener(new MouseAdapter() {
                    @Override
                    public void mouseDragged(MouseEvent e) {
                        System.out.println("mouseDragged");
                    }

                    @Override
                    public void mousePressed(MouseEvent e) {
                        System.out.println("mousePressed");
                    }

                    @Override
                    public void mouseReleased(MouseEvent e) {
                        System.out.println("mouseReleased");
                    }
                });
            }
        });
        f.setVisible(true);
    }
}

run: 
mouseDragged mouseDragged mouseDragged 
mouseDragged mouseDragged 
BUILD STOPPED (total time: 1 minute 11 seconds)
相关问题