Java - GUI (swing) - 空指针异常

标签 java swing user-interface nullpointerexception

我有 2 个类(class):
- 第一。制作一个框架(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();            ))

最佳答案

那不是你应该画的。要绘制组件,请覆盖 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) 专用于 swing 组件。

关于Java - GUI (swing) - 空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16365575/

相关文章:

java - 如何将 pre-wrap 与 swing HTML 文本一起使用?

java - 在Android Studio中创建UI并在Unity中使用它使元素跳转到0,0

android - 访问更新 ListView 的第一个元素会导致 System.ArgumentOutOfRangeException

wpf - WPF 的 IsDirty 实现

java - 如何将 java.util.Map 与 hibernate xml 中的关联映射?

java - 如何在 NavigationView 的项目上添加选取框文本?

java - 如何在 swing 中调整与面板相关的组件的大小?

java - 如何使用 JFrame 类作为主类?

java - Android 盒子模糊算法

java - 当 Graphics 实例创建时