2014-06-28 82 views
0

我希望能夠點擊其中將改變位置並更改圓的圓。我不知道如何實現鼠標監聽器。如何以正確的方式使用鼠標偵聽器?

有沒有把鼠標監聽器在一個新的類中,它會改變x和y的位置,並改變顏色的方法嗎?

class drawCircle extends JPanel{  

    int x = 70; 
    int y = 70; 
    int dx = 0; 
    int dy = 0; 

drawCircle(){ 
    addMouseMotionListener(new MouseMotionAdapter(){ 
     public void mousePressed(MouseEvent e){ 

      x = (int)(Math.random()*getWidth() - 70); 
      y = (int)(Math.random()*getHeight() - 70); 
      repaint(); 
      } 

    }); 
} 


protected void paintComponent(Graphics g){ 
super.paintComponent(g); 

    int red = (int)(Math.random()*255); 
    int blue =(int)(Math.random()*255); 
    int green = (int)(Math.random()*255); 

    Color color = new Color(red,blue,green); 

    g.setColor(color); 
    g.fillOval(x + dx, y +dy, x + dx, y + dy); 
    g.drawString(" ", x + dx, y + dy); 


} 

}

回答

4

我會用的東西是「點擊」,如Ellipse2D的對象,因爲實現形狀像所有的類,它有一個contains(...)方法,可以爲如果任何圈子決定是有用的( s)已被點擊,並且可以通過將您的paintComponent的Graphics參數轉換爲Graphics2D,然後調用其方法fill(Shape s),將您的Ellipse2D對象傳入,從而輕鬆繪製該圖像。

+0

+1簡單直接。 – camickr

3

對於更新的實現,您可以查看Playing With ShapesShapeComponent類將允許您創建一個可支持MouseListener的實際組件,以便輕鬆響應MouseEvents。

您不應該在paintComponent()方法中設置圓的(隨機)顏色。每當Swing確定組件需要重新繪製時,paintComponent()方法都會被調用。因此,無需任何用戶交互,顏色可能會發生變化。相反,您的圈子的顏色應該可以使用setForeground(...)方法進行設置。然後繪製代碼可以使用該圓的getForeground()方法。

而且,只要你的風俗畫,你需要重寫getPreferredSize()方法來設置組件的大小,因此它可以與佈局管理器一起使用。閱讀Swing教程Custom Painting中的部分以獲取更多信息。

相關問題