JInternalFrame重绘问题

时间:2016-04-29 18:42:29

标签: java jpanel repaint jinternalframe

下面的代码是我的视图,我在其中显示流式摄像机。控制器句柄设置图像并重新绘制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;
   }
}

这就是它的样子。没有标题栏。 enter image description here

1 个答案:

答案 0 :(得分:0)

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

您应该创建第二个扩展JComponent的类,覆盖该类的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