【问题标题】:Why can't I add components to my JFrame (Java Swing)?为什么我不能将组件添加到我的 JFrame (Java Swing)?
【发布时间】:2021-09-21 21:27:34
【问题描述】:

如果我的代码很糟糕,请原谅。第一次学习 Swing,一般对 Java 一无所知;仍在尝试学习 Java,还想添加一个 UI 组件以使其更具挑战性。

我有一个反复出现的错误,我无法弄清楚。

首先,当前代码将启动(从主文件调用)但在窗口中没有组件(即,它以空白窗口启动),所以我已经开始将组件添加到我的 JFrame(请参阅' frame.add()',位于 initComponents()) 的开头。尝试添加组件时出现此错误:

错误:“无法读取字段“父”,因为“comp”为空”

这是因为缺少事件处理吗?我打算尝试让它工作,然后再添加该功能。见下文。还是其他原因造成的?

public class UserInterface extends javax.swing.JFrame {

    private javax.swing.JFrame frame;
    private java.awt.Button button_Number_One;
    private java.awt.Button button_Number_Two;
    private java.awt.Button button_Number_Three;
    private java.awt.Button button_Number_Four;
    private java.awt.Button button_Number_Five;
    private java.awt.Button button_Number_Six;
    private java.awt.Button button_Number_Seven;
    private java.awt.Button button_Number_Eight;
    private java.awt.Button button_Number_Nine;
    private java.awt.Button button_Number_Zero;
    private java.awt.Button back_Button1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JTextField jTextField1;

    public void starter() {
        initComponents();
        new UserInterface().setVisible(true);
    }

    private void initComponents() {

        frame = new javax.swing.JFrame();
        frame.add(jLabel1);

        jTextField1 = new javax.swing.JTextField();
        jTextField1.setText("jTextField1");
        jTextField1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jTextField_ActionPerformed(evt);
            }
        });

        jLabel1 = new javax.swing.JLabel();
        jLabel1.setText("Result:");

        button_Number_One = new java.awt.Button();
        button_Number_One.setLabel("1");
        button_Number_One.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                button_Number_One_ActionPerformed(evt);
            }
        });

        button_Number_Two = new java.awt.Button();
        button_Number_Two.setLabel("1");
        button_Number_Two.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                button_Number_Two_ActionPerformed(evt);
            }
        });

        button_Number_Three = new java.awt.Button();
        button_Number_Three.setLabel("1");
        button_Number_Three.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                button_Number_Three_ActionPerformed(evt);
            }
        });

        button_Number_Four = new java.awt.Button();
        button_Number_Four.setLabel("1");
        button_Number_Four.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                button_Number_Four_ActionPerformed(evt);
            }
        });

        button_Number_Five = new java.awt.Button();
        button_Number_Five.setLabel("1");
        button_Number_Five.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                button_Number_Five_ActionPerformed(evt);
            }
        });

        button_Number_Six = new java.awt.Button();
        button_Number_Six.setLabel("1");
        button_Number_Six.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                button_Number_Six_ActionPerformed(evt);
            }
        });

        button_Number_Seven = new java.awt.Button();
        button_Number_Seven.setLabel("1");
        button_Number_Seven.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                button_Number_Seven_ActionPerformed(evt);
            }
        });

        button_Number_Eight = new java.awt.Button();
        button_Number_Eight.setLabel("1");
        button_Number_Eight.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                button_Number_Eight_ActionPerformed(evt);
            }
        });

        button_Number_Nine = new java.awt.Button();
        button_Number_Nine.setLabel("1");
        button_Number_Nine.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                button_Number_Nine_ActionPerformed(evt);
            }
        });

        button_Number_Zero = new java.awt.Button();
        button_Number_Zero.setLabel("1");
        button_Number_Zero.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                button_Number_Zero_ActionPerformed(evt);
            }
        });

        back_Button1 = new java.awt.Button();
        back_Button1.setLabel("Back");
        back_Button1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                back_Button1_ActionPerformed(evt);
            }
        });

        // jLabel1 = new javax.swing.JLabel();
        // jLabel1.setText("Result: ");

        jMenu1 = new javax.swing.JMenu();
        jMenu1.setText("File");
        setJMenuBar(jMenuBar1);

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    }

    private void button_Number_One_ActionPerformed(java.awt.event.ActionEvent evt) {
        // Event handling code here.
    }

    private void button_Number_Two_ActionPerformed(java.awt.event.ActionEvent evt) {
        // Event handling code here.
    }

    private void button_Number_Three_ActionPerformed(java.awt.event.ActionEvent evt) {
        // Event handling code here.
    }

    private void button_Number_Four_ActionPerformed(java.awt.event.ActionEvent evt) {
        // Event handling code here.
    }

    private void button_Number_Five_ActionPerformed(java.awt.event.ActionEvent evt) {
        // Event handling code here.
    }

    private void button_Number_Six_ActionPerformed(java.awt.event.ActionEvent evt) {
        // Event handling code here.
    }

    private void button_Number_Seven_ActionPerformed(java.awt.event.ActionEvent evt) {
        // Event handling code here.
    }

    private void button_Number_Eight_ActionPerformed(java.awt.event.ActionEvent evt) {
        // Event handling code here.
    }

    private void button_Number_Nine_ActionPerformed(java.awt.event.ActionEvent evt) {
        // Event handling code here.
    }

    private void button_Number_Zero_ActionPerformed(java.awt.event.ActionEvent evt) {
        // Event handling code here.
    }

    private void back_Button1_ActionPerformed(java.awt.event.ActionEvent evt) {
        // Event handling code here.
    }

    private void jTextField_ActionPerformed(java.awt.event.ActionEvent evt) {
        // Event handling code here.
    }

}

【问题讨论】:

  • 第一次学习 Swing... - 1) 那你为什么要在测试之前先写 100 行代码呢?慢慢开始。添加几个组件并进行测试。一旦可行,请添加更多。 2) 不要使用“Button”,这是一个 AWT 组件。 Swing 组件以“J”开头,因此您应该使用JButton。首先阅读Swing tutorial 中的工作示例,这些示例将帮助您更好地构建代码。
  • "..在 Java 方面一无所知;仍在努力学习 Java,还想添加一个 UI 组件以使其更具挑战性。" 适合谁?对我们来说,整理发布的乱七八糟的代码,充斥着程序员在尝试制作多线程、事件驱动、跨平台 GUI 之前应该过去的误解?我建议坚持使用非 GUI 应用程序,直到您不必写 "clueless at Java general"

标签: java swing user-interface


【解决方案1】:

您正在尝试将null 组件添加到框架中。从您的代码来看,这可能是您尚未初始化的组件之一。

例如在这部分代码中

frame = new javax.swing.JFrame();
// You first add the label which is not initialised at this point and is therefore null
frame.add(jLabel1); 

// You must initialise the label before adding it to the frame.
jLabel1 = new javax.swing.JLabel();
jLabel1.setText("Result:");

还有一些其他注意事项:

  • 发布错误时,请包含完整的堆栈跟踪信息,以便人们可以最有效地帮助您。
  • Java 中的查找命名约定
  • 查找如何导入内容

【讨论】:

    【解决方案2】:

    您的类UserInterface 扩展了JFrame 类,因此它继承了JFrame 的所有功能。您在那里所做的是为您自己的目的定义一种特殊类型的JFrame,因此在您自己的实现中创建JFrame 对我来说真的没有意义。这可能是您的问题,因为父类将引用JFrame。我建议尝试使用标准 JFrame 并首先将您的按钮、标签等添加到其中。

    【讨论】:

      【解决方案3】:

      这是修改后的代码,它将在JFrame 中添加jLabel1,其余组件您必须根据您的要求添加到框架中。 该错误与您在初始化之前将组件添加到框架中有关,这就是它引发空指针异常的原因。

      import java.awt.Button;
      import java.awt.event.ActionEvent;
      import java.awt.event.ActionListener;
      
      import javax.swing.JLabel;
      import javax.swing.JMenu;
      import javax.swing.JMenuBar;
      import javax.swing.JTextField;
      import javax.swing.WindowConstants;
      
      public class UserInterface extends javax.swing.JFrame {
      
        private Button button_Number_One;
        private Button button_Number_Two;
        private Button button_Number_Three;
        private Button button_Number_Four;
        private Button button_Number_Five;
        private Button button_Number_Six;
        private Button button_Number_Seven;
        private Button button_Number_Eight;
        private Button button_Number_Nine;
        private Button button_Number_Zero;
        private Button back_Button1;
        private JLabel jLabel1;
        private JMenu jMenu1;
        private JMenuBar jMenuBar1;
        private JTextField jTextField1;
      
        public static void main(String[] args) {
          new UserInterface().starter();
        }
      
        public void starter() {
          initComponents();
          setSize(300, 300);
          setVisible(true);
        }
      
        private void initComponents() {
      
          jLabel1 = new JLabel();
          jLabel1.setText("Result:");
      
          this.add(jLabel1);
      
          jTextField1 = new JTextField();
          jTextField1.setText("jTextField1");
          jTextField1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
              jTextField_ActionPerformed(evt);
            }
          });
      
      //    jLabel1 = new JLabel();
      //    jLabel1.setText("Result:");
      
          button_Number_One = new Button();
          button_Number_One.setLabel("1");
          button_Number_One.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
              button_Number_One_ActionPerformed(evt);
            }
          });
      
          button_Number_Two = new Button();
          button_Number_Two.setLabel("1");
          button_Number_Two.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
              button_Number_Two_ActionPerformed(evt);
            }
          });
      
          button_Number_Three = new Button();
          button_Number_Three.setLabel("1");
          button_Number_Three.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
              button_Number_Three_ActionPerformed(evt);
            }
          });
      
          button_Number_Four = new Button();
          button_Number_Four.setLabel("1");
          button_Number_Four.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
              button_Number_Four_ActionPerformed(evt);
            }
          });
      
          button_Number_Five = new Button();
          button_Number_Five.setLabel("1");
          button_Number_Five.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
              button_Number_Five_ActionPerformed(evt);
            }
          });
      
          button_Number_Six = new Button();
          button_Number_Six.setLabel("1");
          button_Number_Six.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
              button_Number_Six_ActionPerformed(evt);
            }
          });
      
          button_Number_Seven = new Button();
          button_Number_Seven.setLabel("1");
          button_Number_Seven.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
              button_Number_Seven_ActionPerformed(evt);
            }
          });
      
          button_Number_Eight = new Button();
          button_Number_Eight.setLabel("1");
          button_Number_Eight.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
              button_Number_Eight_ActionPerformed(evt);
            }
          });
      
          button_Number_Nine = new Button();
          button_Number_Nine.setLabel("1");
          button_Number_Nine.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
              button_Number_Nine_ActionPerformed(evt);
            }
          });
      
          button_Number_Zero = new Button();
          button_Number_Zero.setLabel("1");
          button_Number_Zero.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
              button_Number_Zero_ActionPerformed(evt);
            }
          });
      
          back_Button1 = new Button();
          back_Button1.setLabel("Back");
          back_Button1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
              back_Button1_ActionPerformed(evt);
            }
          });
      
          // jLabel1 = new JLabel();
          // jLabel1.setText("Result: ");
      
          jMenu1 = new JMenu();
          jMenu1.setText("File");
          setJMenuBar(jMenuBar1);
      
          setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        }
      
        private void button_Number_One_ActionPerformed(ActionEvent evt) {
          // Event handling code here.
        }
      
        private void button_Number_Two_ActionPerformed(ActionEvent evt) {
          // Event handling code here.
        }
      
        private void button_Number_Three_ActionPerformed(ActionEvent evt) {
          // Event handling code here.
        }
      
        private void button_Number_Four_ActionPerformed(ActionEvent evt) {
          // Event handling code here.
        }
      
        private void button_Number_Five_ActionPerformed(ActionEvent evt) {
          // Event handling code here.
        }
      
        private void button_Number_Six_ActionPerformed(ActionEvent evt) {
          // Event handling code here.
        }
      
        private void button_Number_Seven_ActionPerformed(ActionEvent evt) {
          // Event handling code here.
        }
      
        private void button_Number_Eight_ActionPerformed(ActionEvent evt) {
          // Event handling code here.
        }
      
        private void button_Number_Nine_ActionPerformed(ActionEvent evt) {
          // Event handling code here.
        }
      
        private void button_Number_Zero_ActionPerformed(ActionEvent evt) {
          // Event handling code here.
        }
      
        private void back_Button1_ActionPerformed(ActionEvent evt) {
          // Event handling code here.
        }
      
        private void jTextField_ActionPerformed(ActionEvent evt) {
          // Event handling code here.
        }
      
      }
      

      【讨论】:

        猜你喜欢
        • 2011-01-30
        • 1970-01-01
        • 2015-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-02
        • 1970-01-01
        相关资源
        最近更新 更多