【问题标题】:Java - GUI (swing) - Null Pointer ExceptionJava - GUI (swing) - 空指针异常
【发布时间】:2013-05-03 18:40:41
【问题描述】:

我有 2 节课:
- 第一个。制作一个框架 (JFrame) 并在其上添加一个面板 (JPanel)
- 第二个制作面板并在其上绘制一个矩形(至少我认为它会)

这是第一堂课

class Frame {
JFrame frame;
Panel panel;

void draw() {
    frame = new JFrame ("qwertz");
    frame.setVisible(true);
    frame.setLocationRelativeTo(null);
    frame.setSize(300,200);

    panel = new Panel();
    panel.setLayout(null);
    panel.paint();
    frame.add(panel);
    }}

第二个

class Panel extends JPanel {
void paint() {
    Graphics g = getGraphics();

    g.drawRect(50,50,90,70);
}}

当我从第一个类调用 draw() 方法时,它会向我抛出这个异常:

java.lang.NullPointerException  
          at Panel.paint(Panel.java:8) ((  g.drawRect(50,50,90,70);  ))
          at Frame.draw(Frame.java:15) ((  panel.paint();            ))

【问题讨论】:

标签: java swing user-interface nullpointerexception


【解决方案1】:

这不是你应该画的。要绘制组件,请覆盖JPanelpaintComponent(Graphics g) 方法,然后调用repaint();

class MyPanel extends JPanel {
    @Override // <-- this makes a compiler error if you typod the method name
    public void paintComponent(Graphics g) {
        g.drawRect(50,50,90,70);
    }
}

panel = new MyPanel();
panel.setLayout(null);
panel.repaint(); // <<---- Look here! It says repaint() not paint()
frame.add(panel);

另外,如果您只需在此面板上绘画,我会考虑使用普通的 Component,并覆盖 paint(Graphics g) 而不是 paintComponent(Graphics g)paintComponent(Graphics g) 专用于摆动组件。

【讨论】:

  • 当你重写 paintComponent(Graphics g) 方法并且不将 super.paintComponent(Graphics g) 添加到方法实现的第一行?
  • 如果您没有覆盖该方法,它不会执行该类通常会执行的任何其他绘画操作,例如将 childred 添加到容器中。
【解决方案2】:

您应该实现paintComponent(Graphics g) 方法,而不是实现paint 方法。这样,您拥有的图形对象是有效的。

http://docs.oracle.com/javase/6/docs/api/javax/swing/JComponent.html#paintComponent(java.awt.Graphics)

【讨论】:

    【解决方案3】:

    您正在尝试在将面板添加到框架之前绘制面板。尝试将frame.paint(); 移动到frame.add(panel); 下方。此外,如果您使用 Swing,则应使用 JPanel 而不是 Panel。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-21
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多