当我试图在JFrame
上显示图像时,它没有被加载。我在类中定义了displayImage(File file)
方法,它扩展了类JFrame
-
public void displayImage(File file)
{
BufferedImage loadImg = StegImage.loadImage(file);
System.out.println(loadImg.getWidth() + "x" + loadImg.getHeight() + " image is loaded.");
setVisible(true);
setState(JFrame.NORMAL);
setBounds(0, 0, loadImg.getWidth(), loadImg.getHeight());
Graphics2D g = (Graphics2D)getRootPane().getGraphics();
System.out.println("Drawing the image.");
g.drawImage(loadImg, null, 0, 0);
}
我在终端上的输出是 -
877 x 587 image is loaded.
Drawing the image.
但是在框架中它是不可见的。
答案 0 :(得分:3)
不应该像你那样绘制或调用组件的图形。如果您需要自定义图形渲染,请使用具有JComponent
功能的JPanel
或paintComponent
。覆盖它以在其中绘制。
class MyCanvas extends JComponent
{
public BufferedImage bgImg; // your background image
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(bgImg, x, y, this); // draw background image
}
}
}
在创建bgImg
实例时,请阅读您的图片并将其分配给MyCanvas
。对于您的用例,您希望将图像用作JFrame的背景:将MyCanvas
的实例作为内容窗格添加到JFrame
。
jFrame.setContentPane(new MyCanvas());
// you might want to set layout or other thing to the
// MyCanvas component before adding it
阅读一些在线教程,例如custom graphics drawing and painting on component。
答案 1 :(得分:1)
第一 创建一个公共BufferedImage loadImg;在类的顶部变量,稍后在displayImage(文件文件)函数中初始化它;
loadImg = StegImage.loadImage(file);
第二 创建一个绘制图像的函数;
public void paintComponent(Graphics g) {
super.paintComponent(g); // Paint background
// Draw image at its natural size first.
g.drawImage(loadImag, 0, 0, this); //85x62 image
// Now draw the image scaled.
g.drawImage(loadImag, 90, 0, 300, 62, this);
}