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 に答える