0

次のコードを使用して、JPanel に四角形を描画しようとしています。

JPanel background = new JPanel();
Graphics2D g = null;
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.BLACK);
g2d.drawRect(0, 0, 800, 600);

コンパイルしようとすると、エラーが発生します

設定された色の行で java.lang.NullPointerException が発生しました。

私もこれを試しましたが、同じバグが発生します

JPanel background = new JPanel();
Graphics bg = background.getGraphics();
bg.setColor(Color.BLACK);
bg.drawRect(0, 0, 800, 600);

誰かがこのバグを修正するのを手伝ってくれますか?

4

3 に答える 3

4

JPanel のサブクラスを作成し、paintComponent(Graphics g)メソッドをオーバーライドします。Graphics安全にキャストできるメソッドに引数として渡されたを使用して、このメソッドからのみペイントしGraphics2Dます。

JPanel background = new JPanel() {
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.setColor(Color.BLACK);
        g2d.drawRect(0, 0, 800, 600);
    }
}
于 2013-07-31T21:55:03.253 に答える
3

Swing でのカスタム ペイントは、通常、JComponent を拡張する任意のクラスの paintComponent メソッドをオーバーライドすることによって行われます。特に必要がない限り、JPanel などから拡張することをお勧めします。

public class MyPanel exends JPanel {
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.BLACK);
        g.drawRect(0, 0, 800, 600);
    }

    public Dimension getPreferredSize() {
        return new Dimension(800, 600);
    }
}

詳細については、カスタム ペインティング2D グラフィックスの実行を参照してください。

于 2013-07-31T22:06:24.843 に答える