Java Swingライブラリのパネルでグラフィックスを使用する際の問題
-
07-07-2019 - |
質問
皆さん、次のプログラムを実行しようとしていますが、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);
}
}
他のヒント
いくつかのこと:パネルを 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);
}
}
所属していません StackOverflow