Intellij使用GUI表单问题

时间:2017-10-09 20:50:41

标签: java swing user-interface intellij-idea

我试图使用Intellij的GUI表单设计器来为类项目设计GUI。我从来没有真正使用过挥杆,所以它比我原先想象的要困难得多。

基本上,我已经创建了GUI表单并将其绑定到我的类,然后我根据在线指令生成了主要方法。当我没有工作时,我试图使用.add来添加它。

这就是我现在所处的位置。 https://pastebin.com/u0gcs15u

    public static void main(String[] args) {
    JFrame frame = new JFrame("TicketGenie");
    frame.setContentPane(new TicketGenie().panel);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
}

这就是表格的样子。 https://imgur.com/a/5CYIM

我还应该提一下,我正在获取main方法的空指针异常。另外,我目前正在上课的是编程基础,这高于我们正在学习的内容,但我一直在努力教自己如何使用java制作一个中等体面的GUI。

感谢。

1 个答案:

答案 0 :(得分:1)

  

Intellij使用GUI表单问题

这不是关于使用GUI表单问题的Intellij,您正在获取空指针异常,因为您在构造函数TicketGenie()中的TicketGenie java类中尝试添加空容器和组件。

您刚刚声明了JPanel容器和其他组件但忘记初始化

这是你获得空指针异常的原因。

public class TicketGenie {

    private JPanel panel;
    private JTextField firstname;
    private JTextField lastname;
    private JTextField address;
    private JTextField city;
    private JTextField state;
    private JTextField zipcode;
    private JTextField phonenumber;
    private JTextField email;
    private JTextField numberoftickets;
    private JButton submitButton;
    private JLabel firstnamelbl;
    private JLabel lastnamelbl;
    private JLabel addresslbl;
    private JLabel citylbl;
    private JLabel statelbl;
    private JLabel zipcodelbl;
    private JLabel phonenumberlbl;
    private JLabel emaillbl;
    private JLabel ticketlbl;

    public TicketGenie() {
        panel.add(firstname);
        panel.add(lastname);
        panel.add(address);
        panel.add(city);
        panel.add(state);
        panel.add(zipcode);
        panel.add(phonenumber);
        panel.add(email);
        panel.add(numberoftickets);

        panel.add(firstnamelbl);
        panel.add(lastnamelbl);
        panel.add(addresslbl);
        panel.add(citylbl);
        panel.add(statelbl);
        panel.add(zipcodelbl);
        panel.add(phonenumberlbl);
        panel.add(emaillbl);
        panel.add(ticketlbl);

        submitButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

            }
        });
    }

}
  

解决方案java类

    public class TicketGenie {

    //Initialized and declared static JPanel Container 
    static JPanel panel=new JPanel();

    //Components declared
    private JTextField firstname;
    private JTextField lastname;
    private JTextField address;
    private JTextField city;
    private JTextField state;
    private JTextField zipcode;
    private JTextField phonenumber;
    private JTextField email;
    private JTextField numberoftickets;
    private JButton submitButton;
    private JLabel firstnamelbl;
    private JLabel lastnamelbl;
    private JLabel addresslbl;
    private JLabel citylbl;
    private JLabel statelbl;
    private JLabel zipcodelbl;
    private JLabel phonenumberlbl;
    private JLabel emaillbl;
    private JLabel ticketlbl;

    public TicketGenie() {

    //Components initialized
    firstname=new JTextField();
    lastname=new JTextField();
    address=new JTextField();
    city=new JTextField();
    state=new JTextField();
    zipcode=new JTextField();
    phonenumber=new JTextField();
    email=new JTextField();
    numberoftickets=new JTextField();
    submitButton=new JButton();
    firstnamelbl=new JLabel();
    lastnamelbl=new JLabel();
    addresslbl=new JLabel();
    citylbl=new JLabel();
    statelbl=new JLabel();
    zipcodelbl=new JLabel();
    phonenumberlbl=new JLabel();
    emaillbl=new JLabel();
    ticketlbl=new JLabel();

        //Add Components to JPanel Container 
        panel.add(firstname);
        panel.add(lastname);
        panel.add(address);
        panel.add(city);
        panel.add(state);
        panel.add(zipcode);
        panel.add(phonenumber);
        panel.add(email);
        panel.add(numberoftickets);

        panel.add(firstnamelbl);
        panel.add(lastnamelbl);
        panel.add(addresslbl);
        panel.add(citylbl);
        panel.add(statelbl);
        panel.add(zipcodelbl);
        panel.add(phonenumberlbl);
        panel.add(emaillbl);
        panel.add(ticketlbl);

        submitButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

            }
        });
    }
 }

Foo Class JFrame框架设置TicketGenie Class静态JPanel面板的ContentPane

public class Foo {

    public static void main(String[] args) {
        JFrame frame = new JFrame("TicketGenie");
        frame.setContentPane(new TicketGenie().panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }
}

注意:您需要设置组件的高度,重量等,并为外观UI设置布局属性