【发布时间】:2020-07-16 13:38:52
【问题描述】:
解决方案:我需要将 JPanel 添加到 JFrame 中。调用paint方法绑定到JFrame的可见性。感谢@matt
这是我的第一个问题,如果有什么遗漏,我很抱歉。
我的问题: 我想创建一个扩展 JPanel 的类,以便我可以在我的 JFrame 上绘制东西。我也希望它能够重新粉刷自己。到目前为止,run 方法有效,但 super.repaint() 无效。 “test1”正在打印,“test2”没有。
提前致谢:)
public class Main {
public static GUI gui;
public static void main(String[] args) {
gui = new GUI();
}
}
public class GUI extends JFrame{
public Draw draw;
public Thread drawT;
public GUI() {
draw = new Draw();
drawT = new Thread(draw);
drawT.start();
}
}
public class Draw extends JPanel implements Runnable{
@Override
public void run() {
while (true) {
System.out.println("test1");
super.repaint();
}
}
@Override
public void paint(Graphics graphics) {
System.out.println("test2");
Graphics2D g = (Graphics2D)graphics;
}
}
【问题讨论】:
-
Repaint 请求重新绘制,这意味着 EDT 将在它到达面板时重新绘制面板。因此,您的循环可能会在实际调用 paint 之前发生 20 次。
-
@matt 即使我省略了循环并在绘图中添加了一个我称之为重绘的构造函数,它也不起作用。
-
你永远不应该在构造函数中调用 repaint。您需要创建一个完整的示例,因为您在帖子中遗漏了太多内容。例如,您是否将 jpanel 添加到 jframe 中?
-
我现在没有将 JPanel 添加到 JFrame 中。这是一个新项目的开始,我想先进行重新粉刷。
-
哦,那我就跳枪了。如果你不将你的 jpanel 添加到任何东西,那么为什么它会被重新粉刷呢?只要它没有被设置为可见,我怀疑paint会被调用。
标签: java swing jpanel paint runnable