2015-06-15 27 views
0

我想用一個簡單的矩形網格來製作一個程序,如果用戶點擊一個矩形,它會填充黑色。我遇到的問題是我的mouseClicked方法不能訪問我的paintComponent方法,所以我得到一個錯誤。使用MouseListeners繪畫?

下面是相關代碼:

public void paintComponent(Graphics g) { 
    Graphics2D g2 = (Graphics2D) g; 
    super.paintComponent(g2); 
    g2.setColor(Color.BLACK); 
    for(Rectangle2D rect : squares) { 
     g2.draw(rect); 
    } 
} 

public void mouseClicked(MouseEvent e) { 
    if((e.getX()>RECT_WIDTH && e.getX()<RECT_WIDTH+(game.getSize()-1)*BOX_DIM) && (e.getY()>RECT_HEIGHT && e.getY()<RECT_HEIGHT+(game.getSize()-1)*BOX_DIM)) { 
     Point2D point = new Point2D.Double(e.getX(), e.getY()); 
     Rectangle2D rect = findRect(point); 
     g.setColor(Color.BLACK); 
     g.fill(rect); 
     repaint(); 
    } 

} 

public Rectangle2D findRect(Point2D p) { 
    for(Rectangle2D rect : squares) { 
     if(rect.contains(p)) { 
      return rect; 
     } 
    } 
    return null; 
} 

「廣場」 是rectangle2Ds的ArrayList。錯誤發生在'g'的mouseClicked方法中,因爲eclipse找不到g。謝謝你的幫助!

回答

2

在列表中的對象,你需要存儲一個包含兩個部分信息的對象:

  1. 當你點擊Rectangle你的Rectangle

Rectangle

  • Color遍歷List找到被點擊的Rectangle,然後更新該01的Color屬性並調用repaint()。

    在調用draw()方法之前,您還需要更改繪畫代碼以設置矩形的顏色。

    查看Custom Painting Approaches中的DrawOnComponent示例。它演示瞭如何創建自定義對象以存儲兩個屬性以及如何在paintComponent()方法中繪製此對象。