0

我正在尝试一个用作按钮但使用图像进行显示的对象。我的问题是,当调用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);

}

我会喜欢它,你可以给我帮助或指出正确的方向。

4

2 回答 2

3

您不应该调用getGraphics()组件。相反,您应该重写该paintComponent(Graphics)方法,并使用作为参数传递的 Graphics 对象在此方法中进行绘制。

于 2013-03-23T22:12:06.837 回答
1

getGraphicsnull在构造函数中返回,因为组件在创建时不可见。对于 Swing 中的自定义绘画,请改写该paintComponent(g)方法。在那里,Graphics句柄将始终正确初始化。

这是一个例子

欲了解更多信息,请阅读执行自定义绘画

于 2013-03-23T22:12:21.747 回答