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

5

要在 JPanel 上绘图,您需要覆盖paintComponent(). 您可以按如下方式动态覆盖它或创建一个子类:

JPanel background = new JPanel()
{
    @Override
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.setColor(Color.BLACK);
        g2d.drawRect(0, 0, 800, 600);
    }
};
于 2013-07-31T21:56:19.743 回答
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

Custom painting in Swing is normally done by overriding the paintComponent method of any class that extend JComponent. Unless you have some need to do otherwise, it is recommended that you extend from something like a 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);
    }
}

Take a look at Performing custom painting and 2D Graphics for more details

于 2013-07-31T22:06:24.843 回答