Java JFrame帮助-将值传递到PaintComponent()中

Java JFrame帮助-将值传递到PaintComponent()中,java,swing,jframe,Java,Swing,Jframe,我已经在一个小的“游戏”项目上工作了一段时间了,但一直无法以任何方式将值传递到我的paintComponent方法中 这是我的节目。我使用了布尔测试参数,但是 PruttClices < /Cl>方法不考虑 test >代码> True < /Cl> >并且不绘制蓝色正方形。< /P> 我怎样才能解决这个问题?任何帮助都将不胜感激 第1类(摇摆): 第2类(抽签): paintComponent可以重载,但重载版本不会用于绘制组件。实际上,paintComponent不是由用户调用的,而是由绘

我已经在一个小的“游戏”项目上工作了一段时间了,但一直无法以任何方式将值传递到我的
paintComponent
方法中

这是我的节目。我使用了<代码>布尔测试参数,但是<代码> PruttClices < /Cl>方法不考虑<代码> test <代码> >代码> True < /Cl> >并且不绘制蓝色正方形。< /P> 我怎样才能解决这个问题?任何帮助都将不胜感激

第1类(摇摆):

第2类(抽签):


paintComponent
可以重载,但重载版本不会用于绘制
组件
。实际上,
paintComponent
不是由用户调用的,而是由绘制例程调用的。而不是重载该方法,您应该考虑使用变量<代码>测试< /COD>和读取/更新此变量。 像这样:

private boolean test = true;

@Override
public void paintComponent(Graphics g){
    super.paintComponent(g);

    if(test){
        //the rest of the code
    }
}

简短的回答,你不能。这不是方法重写的工作方式


paintComponent
是绘制子系统使用的一种有文档记录的方法,允许您插入自定义绘制,为了工作,它必须匹配一个非常特殊的方法签名,否则API如何知道调用什么

相反,
paintComponent
应该直接或间接地绘制组件的当前已知状态

这意味着,您的组件应该具有
paintComponent
方法可以访问的一组属性,或者可以使用某个其他对象(即模型)来确定要绘制的当前状态

您可以使用委托方法,这将允许定义一个契约(可能通过
接口
),该契约可以调用
paintComponent
,将您需要的信息传递给这些委托,以便他们执行所需的绘制

有关绘画工作原理的更多详细信息,请参见和

注意:

  • paintComponent
    方法上方添加
    @Override
    注释,编译器将错误地告诉您,它们没有支持您签名的匹配方法
  • 调用
    super.paintComponent
    而不是
    super.paintComponent“s”
    ,这将设置一个递归调用,该调用将导致
    堆栈溢出错误

为清晰易读而进行清理
package swing;

import javax.swing.*;
import java.awt.*;

public class draw extends JPanel
{

    boolean test = true;

    private static final long serialVersionUID = 1L;

    /*public void passMethod(draw object) {
        int x = (int) object.getAlignmentX();
        int y = (int) object.getAlignmentY();
    }*/

    public void drawing(draw object){
        draw thing = new draw();
        thing.setX(object.getAlignmentX());
        int x = 55;
        repaint();
    }

    private void setX(float alignmentX) {
        setX((int) alignmentX);

    }

    private void setY(float alignmentY) {
        setY((int) alignmentY);

    }

    public void paintComponent(Graphics g, boolean test){
        super.paintComponents(g);
        //int x = (int)object.getAlignmentX();
        //int y = (int)object.getAlignmentY();
        if(test==true)
        {
            g.setColor(Color.blue);
            g.fillRect(getX(),getY(),100,100);
        }

    }
}
private boolean test = true;

@Override
public void paintComponent(Graphics g){
    super.paintComponent(g);

    if(test){
        //the rest of the code
    }
}