gpt4 book ai didi

Java PaintComponent 正在运行但不显示

转载 作者:行者123 更新时间:2023-12-01 17:18:42 25 4
gpt4 key购买 nike

所以我只想在屏幕的随机部分绘制一个正方形作为自定义JComponent:

public void paintComponent(Graphics g){
Graphics2D g2d = (Graphics2D) g;
if( this.good ){
g2d.setColor(Color.green);
}
else{
g2d.setColor(Color.red);
}
g2d.fillRect(this.x, this.y, this.w, this.h);
System.out.println("painting");
}

这是通过repaint()调用绘画的方法

private void stateChange(){

double rand = Math.random();

if (rand < 0.5){
this.good = !this.good;
}
setLocation(this.x,this.y);
repaint();
}

this.xthis.y 不断变化,但我知道这是有效的。当我运行代码时,它在应该的地方打印 "painting"但没有显示任何内容。我做错了什么吗?

额外代码:

这是我尝试让它显示出来的内容:

\\in JComponent constructore
setOpaque(true);
setVisible(true);
setSize(this.w,this.h);

最佳答案

我的猜测:您有一个 while (true) 循环绑定(bind)了 Swing 事件线程,因此当您更改状态时,GUI 无法重新绘制自身以显示它的发生。要么是您的 JComponent 的尺寸非常小,太小而无法显示图像。

要获得不仅仅是猜测的答案,您需要使用相关代码提出更完整的问题。

请注意,您的 paintComponent(...) 方法重写缺少对 super 方法的调用。

注意:您可以通过在 PaintComponent 中添加 getSize() 方法来测试 JComponent 的大小:

public void paintComponent(Graphics g){
super.paintComponent(g); // **** don't forget this.
Graphics2D g2d = (Graphics2D) g;
if( this.good ){
g2d.setColor(Color.green);
}
else{
g2d.setColor(Color.red);
}
g2d.fillRect(this.x, this.y, this.w, this.h);

// TODO: ***** delete this lines
System.out.println("painting");
System.out.println(getSize()); // **** add this***
}

注意:您不应该不要在组件上调用setSize(...)。它通常会产生误导,因为它经常被布局管理器忽略。

关于Java PaintComponent 正在运行但不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20317865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com