在Java中使用MousePressed后,不会触发MouseMoved

时间:2014-05-15 19:03:58

标签: java swing mouseevent

尝试实现允许用户绘制线条的拖动行为。

public void mousePressed(MouseEvent e) {
    int index = clickedBall(e.getX(),e.getY());
    if(index!=-1){
        MainWindow.inFocusBall = index;
        lx1 = TestPlay.balls.get(index).getX()+TestPlay.balls.get(index).getRadius()/2;
        ly1 = TestPlay.balls.get(index).getY()+TestPlay.balls.get(index).getRadius()/2;
        System.out.println("Line Start:"+lx1+","+ly1);  
        BallProp.update();
    }
    isPressed = true;
    drawLine = true;
}

public void mouseMoved(MouseEvent e) {
    if(isPressed){
    System.out.println("MouseMoved");
    int index = MainWindow.inFocusBall;
    if(index!=-1){
        MainWindow.inFocusBall = index;
        lx1 = TestPlay.balls.get(index).getX()+TestPlay.balls.get(index).getRadius()/2;
        ly1 = TestPlay.balls.get(index).getY()+TestPlay.balls.get(index).getRadius()/2;
        BallProp.update();
    }
    lx2 = e.getX();
    ly2 = e.getY();
    repaint();
    }
}

public void mouseReleased(MouseEvent e) {
    isPressed = false;
    drawLine = false;
    System.out.println("MouseRelased");
    //TestPlay.balls.get(MainWindow.inFocusBall);
}

此代码的输出是MousePressed - > MouseRelased。

更多细节(如果您理解代码不读)。

这里的想法是,当按下鼠标时,它会计算它是否按下了一个图形对象(在这种情况下是球),如果是这样的话,它会将指数(球阵列中的索引)设置为按下的球,它还设置将从圆心绘制到其坐标的线的起点。

鼠标移动如果isPressed为true,则将标志drawLine设置为true(绘图组件用于绘制线条),该线条从球的中心绘制到当前鼠标位置,在鼠标释放时,绘制线和ispressed被设置为false。

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    drawBalls(g);
    if(drawLine){
        g.setColor(Color.BLACK);
        g.drawLine(lx1, ly1, lx2, ly2);
    }
}

public void drawBalls(Graphics g){
    for(int x=0;x<TestPlay.balls.size();x++){
        g.setColor(TestPlay.balls.get(x).getColor());
        g.fillOval(TestPlay.balls.get(x).getX(), TestPlay.balls.get(x).getY(), TestPlay.balls.get(x).getRadius(), TestPlay.balls.get(x).getRadius());
    }
}

1 个答案:

答案 0 :(得分:1)

您应该尝试实现mouseDragged():

public void mouseDragged(MouseEvent e) {
    System.out.println("mouseDragged: " + e.getX() + " , " + e.getY());

}