为什么drawImage没有在jframe上绘制图像

时间:2013-10-19 22:35:34

标签: java swing

当我试图在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.

但是在框架中它是不可见的。

2 个答案:

答案 0 :(得分:3)

不应该像你那样绘制或调用组件的图形。如果您需要自定义图形渲染,请使用具有JComponent功能的JPanelpaintComponent。覆盖它以在其中绘制。

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);
}