java - Intellij使用GUI表单问题

标签 java swing user-interface intellij-idea

我正在尝试使用 Intellij 的 GUI 表单设计器来为类(class)项目设计 GUI。我从未真正使用过 swing,所以事实证明它比我最初想象的要困难。

基本上,我已经创建了 GUI 表单并将其绑定(bind)到我的类,然后我根据在线指令生成了主要方法。当这不起作用时,我尝试使用 .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);
}

这就是表单的样子。 /image/slYh3.jpg

我还应该提到,我在 main 方法中遇到了空指针异常。另外,我目前正在学习的类(class)是编程基础知识,这超出了我们正在学习的内容,但我一直在尝试自学如何使用 java 制作一个还算不错的 GUI。

谢谢。

最佳答案

Intellij using GUI form issue

这与 Intellij 使用 GUI 表单问题无关,您收到空指针异常,因为在构造函数 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) {

            }
        });
    }

}

Below solution java class

    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 外观和感觉的布局属性

关于java - Intellij使用GUI表单问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46654761/

相关文章:

java - for循环导致异常

java - swing:有没有办法让按钮/复选框只有在按下 SHIFT 或 CTRL 时才可单击?

ios - 如何使用删除(_ :) in Swift4 to Removes the selected content from your interface?

java - 在java中添加actionlistener到jcheckbox

ios - 如何向下平移以关闭键盘?

java - Selenium:如何删除选定的属性

java - 通用文档格式转换器

java - 如何将元素添加到具有模型类型的列表中

java - JPanel 未显示

java - 用于根据 JComboBox 选择确定要执行的操作的 JButton