Java JComponent.getGraphics() всегда возвращает нуль

Я пытаюсь объект, который функционирует как кнопка, но использует изображения для отображения. Моя проблема в том что при звонке getGraphics() это возвращается null, Я искал по всему месту и не могу найти почему?

Мой код для конструктора, где он умирает...

public class ImageButton extends javax.swing.JComponent implements java.awt.event.MouseListener {

private static BufferedImage DEFAULTBUTTON;
private BufferedImage button;
private Graphics g;


public ImageButton(){
    //Call the constructor for JComponent
    super();
    //Grab Graphics
    g = this.getGraphics();

    //Find the default images
    try{
    InputStream image;
    image = this.getClass().getClassLoader().getResourceAsStream("DefaultButton.png");
    DEFAULTBUTTON = ImageIO.read(image);

    System.out.println("Default image FINE");
    }catch(IOException e){
        System.out.println("Default image fail");
    }
    button = DEFAULTBUTTON;

    //Add listener for things like mouse_down, Mouse_up, and Clicked
    this.addMouseListener(this);

    //Draw the Default button
    g.drawImage(button, 0, 0, this);

}

Я ЛЮБЛЮ это, ты можешь помочь мне или указать правильное направление.

2 ответа

Решение

Ты не должен звонить getGraphics() на компоненте. Вместо этого вы должны переопределить paintComponent(Graphics) метод, и сделайте рисование в этом методе, используя объект Graphics, переданный в качестве аргумента.

getGraphics вернусь null в конструкторе, так как компонент не будет виден во время создания. Для пользовательской живописи в Swing переопределите paintComponent(g) метод вместо. Там Graphics дескриптор всегда будет правильно инициализирован.

Вот пример

Подробнее читайте в разделе "Выполнение заказной живописи".

Другие вопросы по тегам