gpt4 book ai didi

java - JComponent 未在 JPanel 内绘制

转载 作者:行者123 更新时间:2023-11-30 02:55:07 27 4
gpt4 key购买 nike

Swing 常客的简单问题。

这个想法是加载图像并通过 JComponent 对象将其用作 JPanel 的背景。它似乎加载得很好,因为来自 toString() 方法的图像信息正确加载并且 paintComponent() 方法正在运行,但由于某种原因它无法正确渲染在 JFrame 内导致一个空框架。代码如下:

RicochetFrame.java

public class RicochetFrame extends JFrame {
RicochetStartPanel startPanel;

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
RicochetFrame window = new RicochetFrame();
window.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

public RicochetFrame() throws IOException {
startPanel = new RicochetStartPanel();

this.getContentPane().add(startPanel);

this.setBounds(0, 0, 500, 500);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//this.pack();
this.setVisible(true);
}

}

RicochetStartPanel.java

public class RicochetStartPanel extends JPanel {
RicochetStartPanel() throws IOException {
BufferedImage myImage = ImageIO.read(new File("frame_bg.jpg"));
this.add(new RicochetImagePanel(myImage));

this.setVisible(true);

this.validate();
this.repaint();
}

}

RicochetImagePanel.Java

public class RicochetImagePanel extends JComponent {
private Image image;

public RicochetImagePanel(Image image) {
this.setVisible(true);

this.image = image;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, this);
}
}

最佳答案

您的 RicochetImagePanel 正在将自身大小调整为首选大小 => [0, 0]。重写其 getPreferredSize() 以返回图像的尺寸(如果不为空)。更好的是,为什么不简单地将图像显示为 JLabel 中的 ImageIcon?

关于java - JComponent 未在 JPanel 内绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37466661/

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