【问题标题】:java.lang.NullPointerException when drawOval in JPaneljava.lang.NullPointerException 当 JPanel 中的 drawOval
【发布时间】:2014-08-27 16:15:59
【问题描述】:

我正在尝试在程序中画线,但我不断收到此错误.. 我正在做的是以下内容: 我有一个带有 BoxLayout 的 JFrame(在 Y_AXIS 中),在这个框架内我有 6 个 JPanel,一个在另一个之下。 在前 2 个面板中,我有一些 JLabels 和 JTextFields,我想在第三个 JPanel 中画线,我这样做了:

public void Dibujar(int vidas){ Graphics graf = panel3.getGraphics(); if(vidas == 6){ graf.drawOval(10, 10, 30, 30); } else{ graf.drawOval(10, 10, 60, 60); } }

但是这样做我得到了 NullPointerException,而不是这个,我尝试使用它可以工作的方法 paintComponent,但它在所有 Jpanel 下方绘制,而不是在 Jpanel3 下方。

如果您需要解释其他内容,请告诉我。 非常感谢您。

【问题讨论】:

  • 绘画必须在paintComponent()中完成。发布一个简短但完整的可运行示例,在paintComponent() 中绘制,并重现问题。告诉我们您希望它做什么以及它会做什么。

标签: java graphics nullpointerexception jframe jpanel


【解决方案1】:

在您的 Panel3 部分中调用此方法。你想paint 一个特定的component

@Override
class PaintExtension extends JComponent
{
    public void paintComponent(Graphics g)
    {
       int vidas = GetVidas(); //Make a method to get the vidas
       super.paintComponent(g);
       if(vidas == 6)
       {
          g.drawOval(10, 10, 30, 30);
       } 
       else
       {
          g.drawOval(10, 10, 60, 60);
       }

    }
}

在图形界面中:

panel3.add(new PaintExtension());

【讨论】:

  • 非常感谢,帮助很大,现在完美了。
  • 省略 Graphics g = getGraphics(); 并添加 super.paintComponent(g)。 (除此之外,该方法可能是protected 并且应该有一个@Override 注释。)
  • 谢谢,我会编辑的。我几乎无限期地用 C# 编程,但我确实忘记了一些小事。
猜你喜欢
  • 1970-01-01
  • 2020-01-25
  • 2015-03-10
  • 2012-09-06
  • 1970-01-01
  • 2013-11-03
  • 1970-01-01
  • 1970-01-01
  • 2015-12-31
相关资源
最近更新 更多