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