gpt4 book ai didi

java - 创建 JFrame 时是否调用了 paint() 方法?

转载 作者:行者123 更新时间:2023-11-30 06:14:09 24 4
gpt4 key购买 nike

我对 Java 中的 GUI 还很陌生,但是我使用的教程我明白了一切,直到我走到这一步: 当我运行这段代码时,我得到了一个椭圆形的框架(就像我想要的那样)但是什么时候调用 paint 方法?

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Game extends JPanel {

public void paint(Graphics g) {
Graphics2D g2d = (Graphics2D) g;

g2d.drawOval(0, 0, 30, 30);
g2d.fillOval(0, 0, 30, 30);
}

public static void main(String[] args) {

JFrame frame = new JFrame("Single Player");
frame.setSize(300,300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new Game());
}
}

最佳答案

它也在setVisible(true) 方法中被调用,可以看出here

让我更清楚一点。我必须承认我低估了对 paint(Graphics g) 的调用次数。我知道它经常被 repaint() 调用,通常这种方法只在 setVisible(true) 之后才有意义。这是一个粗略的估计,repaint() 甚至没有直接调用 paint(Graphics g)

也就是说,您始终可以在您的 IDE 中查找方法的调用层次结构(在 Eclipse 中这当然是可能的,我还没有在其他的上尝试过)。为此,您只需要调用该方法或在父类(super class)中覆盖它,例如代码中的 frame.paint(frame.getGraphics()); 行(任何您想知道调用位置的方法)都可以,您可以从弹出菜单中选择 open call hierarchy查看每个直接调用并递归地查看调用这些方法的方法在哪里被调用等...

关于java - 创建 JFrame 时是否调用了 paint() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30786744/

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