gpt4 book ai didi

Java 绘画问题

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

好吧,我想知道为什么下面的代码不会显示 JLabel。

MyPanel 已正确添加到 JFrame 和所有内容,因为它全部显示但不会绘制 JLabel。如有任何帮助,我们将不胜感激。

public class MyPanel extends JPanel {
private Root root;
...

public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
root.paint(g2);
}
}

class Root {
private Node1 node1;

...
public void paint(Graphics g) {
node1.paint(g);
}
}

class Node1 {
...
public void paint(Graphics g) {
JLabel jtp = new JLabel();
jtp.setLocation((int) x, (int) y);
jtp.setSize((int) width, (int) height);
jtp.setLocation(40, 40);
jtp.setSize(40, 40);
jtp.setText("Hello world");
//jtp.setVisible(true);
jtp.paint(g);
}
}

最佳答案

我建议您不要在绘制方法中将组件添加到容器中,因为 1) 您没有绝对控制何时或即使调用绘制方法,并且 2) 绘制和 PaintComponent 必须非常快尽可能,现在不是更新 GUI 的时间或地点。 3) 由于 Paint 通常会被多次调用,因此您将多次向容器中添加组件,而所有这些都超出了您的直接控制范围。

此外,当您在 Paint 方法中将组件添加到 Root 中(无论 Root 是什么,因为它不扩展 JComponent、JPanel 或类似的组件)时,Root 对象永远不会添加到我可以告诉的任何其他内容中,因此,“添加”到最终未添加到顶级窗口的组件中的任何内容都是不可见的,这是有道理的。

底线:我认为您需要重新设计 GUI 作为您的解决方案。如果您告诉我们更多相关信息,我们可以为您提供帮助。接下来我们需要讨论布局管理器的使用以及为什么设置组件的绝对位置和大小通常不受欢迎。

如果我说的任何内容令人困惑,请要求澄清,或者如果有任何错误,请帮助我纠正!

关于Java 绘画问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4974268/

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