无法在JFrame中显示图像

时间:2012-01-08 17:18:34

标签: java image swing jframe pixel

所以我尝试使用MemoryImageSource写一些像素并将其显示在一个帧中。这是代码:

public class ImageDraw extends JPanel {

Image img;

public void ImageDraw(){        
    //super();      
    int w=600;
    int h=400;

    int pixels[] = new int[w*h];    
    int i=0;    
    for(i=0;i<w*h;i++){
        //pixels[i++]=0;
        pixels[i]=255;      
    }   
    img = createImage(new MemoryImageSource(w,h,pixels,0,w));
}

 public void paint(Graphics g){     
    g.drawImage(img,  0, 0, this);
 }
}

和主要代码

public class FuncTest {

  public static void main(String[] args) {

    JFrame frame = new JFrame("Display");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(600, 400);

    ImageDraw pan = new ImageDraw();
    frame.getContentPane().add(pan);
    frame.setVisible(true);
  }
}

它只显示一个空框架。为什么?我的目的是学习如何逐个像素地绘制,所以这只是我正在绘制的测试图像,看它是否有效。

感谢。

1 个答案:

答案 0 :(得分:5)

您的代码存在两个问题。第一

public void ImageDraw() {  ... }

是一个方法,而不是构造函数。根本不会在您的代码中调用该方法。将此行更改为

public ImageDraw() {  ... }

没有void使其成为默认构造函数。

其次,您需要设置像素数据的alpha值:

pixels[i] = 255 + 0xFF000000;

还有两点:

  • 请勿覆盖paint(...),而是覆盖paintComponent(...)
  • 不要设置JFrame的大小,而是覆盖组件的方法getPreferredSize()并使用frame.pack()