JInternalFrame 重绘问题

JInternalFrame repainting issue

下面的代码是我显示流式摄像机的视图。控制器句柄设置图像并重新绘制 JInternalFrame。我对此有疑问,因为相机图像覆盖了整个 JInternalFrame 甚至标题栏。我尝试使用 JPanel,但在 JPanel 上获取图像时遇到问题,因为我扩展了 JInternalFrame。

public class CameraView extends JInternalFrame{

    private BufferedImage image;

    public CameraView(){
        super("Camera", false,false,false, false);

        setSize(500,500);
        setLocation(200,200);

    }

    @Override
    public void paint(Graphics g){
        g.drawImage(image, 0, 0, null);
    }


   public void setImage(BufferedImage image){
       this.image = image;
   }
}

这就是它的样子。没有标题栏。

您正在覆盖框架的 paint 方法。 paint 方法就是绘制标题栏的方法。

您应该创建第二个 class 来扩展 JComponent,覆盖 class 上的 paint 方法,然后将它的一个实例添加到您的框架中。

类似于:

public class CameraView extends JInternalFrame{

    private BufferedImage image;

    public CameraView(){
        super("Camera", false,false,false, false);

        setLocation(200,200);

        add(new JComponent() {

            {
                setSize(500, 500); // size of the image
            }

            @Override
            public void paint(Graphics g){
                g.drawImage(image, 0, 0, null);
            }

        });

        pack();
    }

   public void setImage(BufferedImage image){
       this.image = image;
   }
}

您也可以调用 paint 方法 super.paint(g); 但按照您现在的设置方式,您的图像将覆盖标题栏。


此外,调用 super("Camera", false,false,false, false); 与调用 super("Camera") 相同。默认值为 false.