Есть проблемы с отображением изображения в JFrame - PullRequest
1 голос
/ 08 января 2012

Итак, я попытался написать несколько пикселей с помощью 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 Ответ

5 голосов
/ 08 января 2012

Есть две проблемы с вашим кодом. Во-первых

public void ImageDraw() {  ... }

это метод, а не конструктор. Метод не вызывается в вашем коде вообще. Измените эту строку на

public ImageDraw() {  ... }

без void, чтобы сделать его конструктором по умолчанию.

Во-вторых, вам нужно установить альфа-значение ваших данных пикселей:

pixels[i] = 255 + 0xFF000000;

И еще два пункта:

  • Пожалуйста, не переопределяйте paint(...), а paintComponent(...).
  • Не устанавливайте размер JFrame, но переопределяйте метод компонента getPreferredSize() и используйте frame.pack().
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...