java - 为什么 GUI 不工作,代码是否正确?

标签 java swing nullpointerexception jpanel

所以我尝试创建 3 个面板。第一个面板具有布局集(例如单选按钮和下一个按钮),我现在添加两个具有不同背景颜色的新面板。但是当我执行代码时,出现空点异常错误。我该如何解决这个问题?

这是代码:

import java.awt.Color;import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.CardLayout;
import javax.swing.*;

public class Wizard {

private JLabel lblPicture;
private JRadioButton btLdap, btKerbegos, btSpnego, btSaml2;
private JButton btNext;
private JPanel panel;
private JPanel panelFirst;
private JPanel panelSecond;
CardLayout c1 = new CardLayout();

    public static void main(String[] args) {
        new Wizard();
    }

    public Wizard() {

        JFrame frame = new JFrame("Wizard");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(600,360);
        frame.setVisible(true);
        MyPanel();
        RadioButtons();
        Button();
        Image();
        groupButton();
        panel.setLayout(c1);
        panelFirst.setBackground(Color.BLUE);
        panelSecond.setBackground(Color.GREEN);
        panel.add(panelFirst,"1");
        panel.add(panelSecond,"2");
        c1.show(panel,"panel");
        frame.add(panel); 
        frame.pack();
        frame.setVisible(true);
    }

    public void MyPanel() {
        panel = new JPanel();
        panel.setLayout(null);
    }

    public void RadioButtons() {
        btLdap = new JRadioButton ("Ldap");
        btLdap.setBounds(60,85,100,20);
        panel.add(btLdap);

        btKerbegos = new JRadioButton ("Kerbegos");
        btKerbegos.setBounds(60,115,100,20);
        panel.add(btKerbegos);

        btSpnego =new JRadioButton("Spnego");
        btSpnego.setBounds(60,145,100,20);
        panel.add(btSpnego);

        btSaml2 = new JRadioButton("Saml2");
        btSaml2.setBounds(60,175,100,20);
        panel.add(btSaml2);
    }

    public void Button() {
        btNext = new JButton ("Next");
        btNext.setBounds(400,260,100,20);
        panel.add(btNext);
        btNext.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent arg0) {
                    c1.show(panel, "2");
                }
            });
    }

    public void Image() {
        ImageIcon image = new ImageIcon("image.jpg");
        lblPicture = new JLabel(image);
        lblPicture.setBounds(200,20, 330, 270);
        panel.add(lblPicture);
    }

    private void groupButton() {

        ButtonGroup bg1 = new ButtonGroup( );

        bg1.add(btLdap);
        bg1.add(btKerbegos);
        bg1.add(btSpnego);
        bg1.add(btSaml2);

    }

}

最佳答案

当我去运行你的代码时,我得到了你提到的空指针异常:

Exception in thread "main" java.lang.NullPointerException
    at Wizard.<init>(Wizard.java:35)
    at Wizard.main(Wizard.java:20)

因此,我在 Wizard 的构造函数中查找了生成它的行:

panelFirst.setBackground(Color.BLUE);

我看到您正在 panelFirst 上设置一个属性,它是 Wizard 类的实例数据成员。

我没有看到您声明 panelFirst = new JPanel(); 的任何地方,这就是创建 NullPointerException 的原因。看起来您还没有初始化许多其他变量(例如,panel 是我看到的唯一已初始化的 JPanel)。

请在 Java API 中查找 JPanel 的构造函数,并了解您希望如何为您的应用程序创建它们。您还可以考虑使用 IDE 为您生成 GUI 代码。

JPanel API(从 jdk 1.7 开始):http://docs.oracle.com/javase/7/docs/api/javax/swing/JPanel.html

谢谢

关于java - 为什么 GUI 不工作,代码是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18092036/

相关文章:

java - 泛型方法实现中的不同返回值类型

java - 使用Java源代码进行调试

尝试访问外部存储(sdcard)上的视频时出现android-get nullpointerexception

带有 Atom 的 JavaFX CSS?

java - 从 Eclipse 在 Tomcat 中部署多个具有应用程序特定配置的 Web 应用程序

Java:优化代码

java - 如何取消选择 JFrame 中的单选按钮

java - 取消按下 esc 键的用户输入的简单方法?

android - LoaderManager 的 restartLoader 方法中的 NullPointerException

nullpointerexception - 带有牛轧糖的java.lang.NullPointerException