使用MouseListeners绘画?

时间:2015-06-15 18:33:31

标签: java swing debugging events graphics

我正在尝试使用简单的矩形网格制作一个程序,如果用户点击一个矩形,它将被填充为黑色。我遇到的问题是我的mouseClicked方法无法访问我的paintComponent方法,所以我收到错误。

以下是相关代码:

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;
}

“squares”是rectangle2Ds的arraylist。错误发生在'g'上的mouseClicked方法中,因为eclipse无法找到g。谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

在List对象中,您需要存储包含两条信息的对象:

  1. Rectangle
  2. Color
  3. Rectangle

    当您点击Rectangle时,您会遍历List以查找被点击的Rectangle,然后您更新Color的{​​{1}}属性并调用repaint()。

    在调用draw()方法之前,还需要更改绘制代码以设置Rectangle的颜色。

    查看{{3}}中的Rectangle示例。它显示了如何创建自定义对象以存储两个属性以及如何在paintComponent()方法中绘制此对象。