gpt4 book ai didi

java - 尽管 JPanel 设置了 PreferredSize,但 PaintComponent() 并未被调用

转载 作者:行者123 更新时间:2023-12-01 08:46:23 26 4
gpt4 key购买 nike

我试图理解为什么下面的短代码不起作用。据我所知,当没有布局或组件的大小为0时,不会调用paint组件方法。

但这里的情况并非如此。

你能解释一下为什么我无法为此设置背景吗?

public class Login extends JPanel {

private BufferedImage bgImage;

public Login() {
super();
initImages();
setLayout(new BorderLayout());

setPreferredSize(new Dimension(600, 600));
add(new JLabel("Hi"), BorderLayout.CENTER);
}

private void initImages() {
try {
bgImage = ImageIO.read(new File("images/login.jpg"));
System.out.println("image loaded");
} catch (IOException e) {
e.printStackTrace();
System.out.println("image not loaded");
}
}

@Override
public void paintComponents(Graphics g) {
super.paintComponents(g);
g.drawImage(bgImage, 0, 0, null);
System.out.println("repaint");
}

public static void createAndShowGui() {
JFrame frame = new JFrame();
Login login = new Login();
frame.add(login, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}

最佳答案

如果您希望它起作用,那么您需要更改...

@Override
public void paintComponents(Graphics g) {
super.paintComponents(g);
g.drawImage(bgImage, 0, 0, null);
System.out.println("repaint");
}

更像是......

@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(bgImage, 0, 0, this);
}

paintComponent 负责绘制组件的“底层”,paintComponents 负责绘制子组件

关于java - 尽管 JPanel 设置了 PreferredSize,但 PaintComponent() 并未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43022050/

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