Java 用鼠标听器画画?

Java 用鼠标听器画画?,java,swing,debugging,events,graphics,Java,Swing,Debugging,Events,Graphics,我试图用一个简单的矩形网格制作一个程序,如果用户点击一个矩形,它就会被填充成黑色。我遇到的问题是,我的mouseClicked方法无法访问我的paintComponent方法,因此我得到了一个错误 以下是相关代码: public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; super.paintComponent(g2); g2.setColor(Color.BLACK); f

我试图用一个简单的矩形网格制作一个程序,如果用户点击一个矩形,它就会被填充成黑色。我遇到的问题是,我的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;
}
公共组件(图形g){
图形2d g2=(图形2d)g;
超级组件(g2);
g2.设置颜色(颜色为黑色);
用于(矩形2D矩形:正方形){
g2.绘制(rect);
}
}
公共无效mouseClicked(MouseEvent e){

如果在列表对象中((e.getX()>RECT_WIDTH&&e.getX()RECT_HEIGHT&&e.getY()),则需要存储包含两条信息的对象:

  • 矩形
  • 矩形的
    颜色
  • 当您单击
    矩形
    时,您将遍历
    列表
    ,找到单击的
    矩形
    ,然后更新该
    矩形
    颜色
    属性并调用repaint()

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

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