用Java中的MouseDragged绘制麻烦

时间:2015-09-21 05:16:06

标签: java swing mouseevent

拖动鼠标时出现问题或设置JPanel的大小, 我设置的位置,我点击的位置和尺寸取决于拖动位置(X和Y)绘制一个可调整大小的矩形(JPanel)。

private void panelMouseDragged(java.awt.event.MouseEvent evt) {                                   
    rSX = (int)MouseInfo.getPointerInfo().getLocation().getX();
    rSY = (int)MouseInfo.getPointerInfo().getLocation().getY();
    rectanguloDefault.setBounds(rX,rY,rSX-rX,rSY-rY);
}                                  

private void panelMousePressed(java.awt.event.MouseEvent evt) {                                   
    rX = (int)MouseInfo.getPointerInfo().getLocation().getX();
    rY = (int)MouseInfo.getPointerInfo().getLocation().getY();
    rectanguloDefault.setLocation(rX,rY);
}       

但是当我将鼠标拖动到点击的负坐标(绘图开始)时,它会消失。

这里有更好的解释 http://i.picasion.com/resize80/49c88c55d4c11c53c020acfcc4fc2f45.png

1 个答案:

答案 0 :(得分:2)

  

但是我在负坐标中拖动鼠标

 rectanguloDefault.setBounds(rX,rY,rSX-rX,rSY-rY);

您的宽度/高度计算始终假定您向正方向拖动鼠标。

您需要使用两点的绝对值:

int width = Math.abs(rSX - rX);
int height = Math.abs(rSY - rY);
rectanguloDefault.setBounds(rX, rY, width, height);

您的x / y值也需要是(rX和rSX)和(ry和rSY)的最小值。您可以使用Math.min(...)方法。