2013-12-13 34 views
1

我想寫一個Java應用程序,我可以在圖像上繪製矩形(JLabel)。問題是矩形看起來不應該在它應該在的地方。它開始於屏幕,而不是與圖像組件的左上角..矩形出現不應該在它應該

我得到的x和像這樣的出發點y座標:

public void mouseClicked(MouseEvent e) { 
    System.out.println("X:"+e.getX()+"Y:"+e.getY()); 
} 

當鼠標拖動我得到結束x,y和調用repaint:

public void mouseDragged(MouseEvent e) { 
     if(e.getSource().equals(label)) { 
      System.out.println("X:"+e.getX()+"Y:"+e.getY()); 
      endX = e.getX(); 
      endY = e.getY(); 
      repaint(); 
     } 
    } 

那麼如何使它相對於標籤獲得X和Y?而不是窗戶?我想讓0,0成爲標籤的開始。

鼠標偵聽被添加到標籤:

label.addMouseListener(this); 
label.addMouseMotionListener(this); 

標籤被添加到佈局porpuse的面板。

更新:我試着printint座標。看起來他們沒事。但矩形仍然不在我想要的位置。我懷疑它被繪製在JFrame上。 如何在標籤上塗上東西?

已賣出:問題是我從未想過的地方。我剛剛從我的標籤上拿到了一個圖形對象,並隨它一起繪製。

+0

爲了更快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。當然,一種方法可能是將偵聽器添加到標籤,而不是父組件。 –

回答

4

的寬度和高度,那麼,如何使它獲得X和Y相對於標籤?而不是窗戶?

這聽起來像是你將MouseListener添加到窗口。

將MouseListener添加到標籤,並且鼠標點將相對於標籤。

編輯:

我怎麼畫的東西上的標籤?

重寫JLabel的paintComponent()方法。

對於在JPanel上繪製矩形的示例,還可以查看Custom Painting Approaches。該代碼對於JLabel將是相同的。 DrawOnComponent示例將是要查看的代碼。

如果您仍有問題,請發佈您的SSCCE並退出讓人們猜測您正在做什麼。

+0

** label.addMouseListener(this); ** ** label.addMouseMotionListener(this); **我將它們添加到標籤 – Bebras

0

你需要考慮數字

endX = e.getX() + (figureWidth/2); 
endY = e.getY() + (figureHeight/2); 
+0

我不太明白你的意思是什麼「數字」? – Bebras