下面的代码是我的视图,在那里我可以看到一个流式摄像头。控制器处理设置图像并重新绘制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;
}
}这就是看起来的样子。没有标题栏。

发布于 2016-04-29 19:03:25
您正在重写框架的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。
https://stackoverflow.com/questions/36945423
复制相似问题