質問

皆さん、次のプログラムを実行しようとしていますが、NullPointerExceptionが発生しています。 Java Swingライブラリーは初めてなので、非常に愚かなことをすることができます。いずれにせよ、私が今遊んでいる2つのクラスがあり、やりたいことは(最後に絞首刑執行人を絞って絞首台を描きたい)

package hangman2;

import java.awt.*;
import javax.swing.*;

public class Hangman2 extends JFrame{
    private GridLayout alphabetLayout = new GridLayout(2,2,5,5);
    private Gallow gallow = new Gallow();

    public Hangman2() {

        setLayout(alphabetLayout);

        setSize(1000,500);
        setVisible( true );

    }

    public static void main( String args[] ) {   
     Hangman2 application = new Hangman2();
     application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    }
}


package hangman2;

import java.awt.*;
import javax.swing.*;

public class Gallow extends JPanel {
    private Graphics g;

    public Gallow(){
        g.fillOval(10, 20, 40, 25);       
    }
}

NullPointerExceptionはg.fillOval行にあります。

事前に感謝、

Tomek

役に立ちましたか?

解決

g が設定されていないため、NPEを取得しているため、 null です。さらに、コンストラクターで描画を行うべきではありません。オーバーロード代わりに paintComponent(Graphics g)

public class Gallow extends JPanel {
    public paintComponent(Graphics g){
        g.fillOval(10, 20, 40, 25);       
    }
}

BufferedImage

他のヒント

いくつかのこと:パネルを JFrame に追加することを忘れないでください。また、カスタムペイントの JPanel paint()メソッドをオーバーライドします。 JPanel のpaintメソッドはいずれの場合でも1つへの参照を持つため、Graphicsオブジェクトを宣言する必要はありません。

package hangman2;

import java.awt.*;
import javax.swing.*;

public class Hangman2 extends JFrame{
    private GridLayout alphabetLayout = new GridLayout(2,2,5,5);
    private Gallow gallow = new Gallow();

    public Hangman2() {

        setLayout(alphabetLayout);
        add(gallow, BorderLayout.CENTER);//here
        setSize(1000,500);
        setVisible( true );

    }

    public static void main( String args[] ) {   
        Hangman2 application = new Hangman2();
        application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    }
}


package hangman2;

import java.awt.*;
import javax.swing.*;

public class Gallow extends JPanel {

    public Gallow(){
        super();
    }

    public void paint(Graphics g){
        g.fillOval(10, 20, 40, 25);       
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top