-3

クリックした後にグラフィックを表示させようとしていたこのコードがあり、これを行う方法を見つけようとしていましたが、実行しようとするたびにエラーが発生し、修正方法がわかりませんそれを機能させるために。

Exception in thread "main" java.lang.NullPointerException
    at memor.main(memor.java:131)

Graphics g= pan.getGraphics();  

コード

import java.awt.*;

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.GridLayout;

import javax.swing.JButton;

public class memor extends JFrame
{
public static void main(String args[]){

final JPanel pan;
GridLayout h=new GridLayout(3,3);

pan =new JPanel(h);
JButton button1= new JButton("1");
pan.add(button1);
if (button1.isEnabled()){
Graphics g= pan.getGraphics();
g.setColor(new Color(156, 93, 82));
g.fill3DRect(21,3,7,12, true);
g.setColor(new Color(156,23,134));
g.fillOval(1,15,15,15);
g.fillOval(16,15,15,15);
g.fillOval(31,15,15,15);
g.fillOval(7,31,15,15);
g.fillOval(22,31,15,15);
g.fillOval(16,47,15,15);
}}
}
4

1 に答える 1

4

aのGraphicsオブジェクトはJComponent、コンポーネントを描画する必要があるときに初期化されます。これは、オブジェクトにアクセスするJPanel 前にをレンダリングする必要があることを意味しますGraphics

したがって、 を(または)に追加しJPanel、ウィンドウを可視に設定する必要があります。そうすれば、コンポーネントのオブジェクトを使用できるようになります。JFrameJWindowGraphics

とにかく、カスタム描画はJPanelpaintComponentメソッドをオーバーライドして作成する必要があります。

于 2013-10-02T20:12:07.947 に答える