在Java中,鼠标按下后不会激发MouseMoved
我正在尝试实现一种类似拖动的行为,允许用户画一条线在Java中,鼠标按下后不会激发MouseMoved,java,swing,mouseevent,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).get
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(绘制组件使用它来绘制线),线从球的中心绘制到当前鼠标位置,释放鼠标时,drawLine和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());
}
}
公共组件(图形g){
超级组件(g);
牵引杆(g);
if(抽绳){
g、 设置颜色(颜色为黑色);
g、 抽绳(lx1、ly1、lx2、ly2);
}
}
公用空心牵引杆(图g){
对于(int x=0;x您应该尝试实现mouseDragged():
你能实现mouseDragged()事件吗?当你在组件中单击并拖动时会触发该事件。我尝试了这种方法,但它在程序中导致了一个错误。但有一个问题,鼠标按下和鼠标释放是否在mouseDragged()之前和之后触发?是的。为什么你不能实现mouseDragged()?导致mousedpressed()呢在那之前不会被炒鱿鱼。
public void mouseDragged(MouseEvent e) {
System.out.println("mouseDragged: " + e.getX() + " , " + e.getY());
}