我正在尝试使用简单的矩形网格制作一个程序,如果用户点击一个矩形,它将被填充为黑色。我遇到的问题是我的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。谢谢你的帮助!
答案 0 :(得分:2)
在List对象中,您需要存储包含两条信息的对象:
Rectangle
Color
Rectangle
醇>
当您点击Rectangle
时,您会遍历List
以查找被点击的Rectangle
,然后您更新Color
的{{1}}属性并调用repaint()。
在调用draw()方法之前,还需要更改绘制代码以设置Rectangle的颜色。
查看{{3}}中的Rectangle
示例。它显示了如何创建自定义对象以存储两个属性以及如何在paintComponent()方法中绘制此对象。