2015-09-21 39 views
0

當我拖動鼠標時,繪製或設置JPanel的大小時出現問題, 我設置的位置在單擊位置,大小取決於拖動位置(X和Y)繪製可調整大小的矩形(JPanel中)。使用Java中的MouseDragged繪製故障

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

+0

當MouseEvent給出鼠標在生成事件的組件的座標空間內的位置時,爲什麼使用'MouseInfo.getPointerInfo()'?考慮提供一個[可運行的示例](https://stackoverflow.com/help/mcve),它可以證明你的問題。這不是代碼轉儲,而是您正在做的事情的一個例子,它突出了您遇到的問題。這將導致更少的困惑和更好的反應 – MadProgrammer

+0

噢好吧,我會忘記,可以得到與mouseEvent位置:p – Refer

回答

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(...)方法。

+0

這已發生http://i.picasion.com/resize80/49c88c55d4c11c53c020acfcc4fc2f45.png – Refer