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
дескриптор всегда будет правильно инициализирован.
Вот пример
Подробнее читайте в разделе "Выполнение заказной живописи".