无法在JFrame中显示图像

Ach*_*int 1 java swing image pixel jframe

所以我尝试使用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);
 }
}
Run Code Online (Sandbox Code Playgroud)

和主要代码

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

How*_*ard 5

您的代码有两个问题.第一

public void ImageDraw() {  ... }
Run Code Online (Sandbox Code Playgroud)

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

public ImageDraw() {  ... }
Run Code Online (Sandbox Code Playgroud)

没有void使它成为默认构造函数.

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

pixels[i] = 255 + 0xFF000000;
Run Code Online (Sandbox Code Playgroud)

还有两点:

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