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