JPanel 在调整 Jframe 大小之前不会更新

2022-09-02 03:04:41

我子类JPanel覆盖paintComponent(图形),我想在jframe中将图像绘制到jpanel上。

但是,在我更改 jframe 的大小之前,我的图像尚未显示出来。这是我的代码:

public class ImagePanel extends JPanel{

    public void setImage(BufferedImage bi)
    {
        image = bi;
        revalidate();
    }

    @Override
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        if(image != null)
        {
            g.drawImage(image, 0, 0, this);
        }
    }
}

答案 1

验证在添加组件并调用 pack() 是否调用,如此相关示例中所述。您可能还需要采用适当的布局。如此处所建议,调用 可以解决症状,但不能解决根本原因。setVisible()repaint()


答案 2

看看 的文档,它继承自 :JPanel.add()java.awt.Container

将指定的组件追加到此容器的末尾。这是 addImpl(java.awt.Component, java.lang.Object, int) 的一种方便方法。此方法更改与布局相关的信息,因此会使组件层次结构失效。如果已显示容器,则必须在之后验证层次结构才能显示添加的组件。

着重号是后加的。

因此,如果在容器已显示对其进行修改,则必须调用才能显示该容器。仅仅调用是不够的。您可能已经注意到,呼叫也有效;这是因为它在内部调用 validate()。validate()repaint()setVisible(true)


推荐