Java Swing Mouse举行了下来的活动

时间:2014-08-06 20:49:27

标签: java swing mouseevent

在我的程序中,我希望能够点击JPanel中的某个位置,以便将对象添加到屏幕上。单击鼠标时,将在该点创建一个对象。如果按住鼠标按钮半秒钟,则每隔1/10秒开始创建一次对象。这部分工作正常。代码如下所示。

我的问题是,当鼠标在屏幕上拖动时,我想获取鼠标的更新位置,并在该新位置创建一个对象,而不是在事件被触发的位置。 MouseEvent具有getX和getY函数,但它只返回触发事件时鼠标所在的位置。有关如何在拖动鼠标时保持位置更新的任何想法?注意:下面的mouseDragged函数永远不会运行。有什么想法吗?

//MyClass extends JPanel, and is put into a JFrame before being displayed
final MyClass simulation = new MyClass();
simulation.setBounds(0, 0, 500, 500);
simulation.addMouseListener(new MouseAdapter() {
    private Timer timer;

    //Create a new body and add it to the list, then repaint the screen.
    public void createBody(int x, int y) {
        simulation.getBodies().add(simulation.createBody(x, y));
        simulation.repaint();
    }

    @Override
    public void mousePressed(final MouseEvent e) {
        if (timer == null) {
            timer = new Timer();
            createBody(e.getX(), e.getY());
        }
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                createBody(e.getX(), e.getY());
            }
        }, 500, 100);
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        if (timer != null) {
            timer.cancel();
            timer = null;
        }
    } 

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

我目前的代码取自this question

0 个答案:

没有答案