Java 为什么我的组件不可见?

Java 为什么我的组件不可见?,java,swing,jframe,jbutton,Java,Swing,Jframe,Jbutton,这是我使用swing创建窗口的代码 我可以看到定义大小的窗口,但窗口中没有任何组件 为什么组件不可见 我有单独的方法用于创建、初始化和添加组件。这些方法是从构造函数调用的。具有标题和定义大小的窗口在输出中可见。我错过了什么 package swing_basics; import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; impor

这是我使用swing创建窗口的代码

我可以看到定义大小的窗口,但窗口中没有任何组件

为什么组件不可见

我有单独的方法用于创建、初始化和添加组件。这些方法是从构造函数调用的。具有标题和定义大小的窗口在输出中可见。我错过了什么

package swing_basics;

import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class MySwingDemo extends JFrame {

    JLabel lblName, lblPassword; //Declaration of variables
    JTextField txtfName;
    JPasswordField pwdfPassword;
    JButton btnSubmit, btnCancel, btnReset;

    public void createComponents(){  //method to initialise the components

        lblName = new JLabel();
        lblPassword = new JLabel();
        txtfName = new JTextField();
        pwdfPassword = new JPasswordField();
        btnSubmit = new JButton();
        btnCancel = new JButton();
        btnReset = new JButton();
    }

    public void setComponents(){  //method to set the components
        setVisible(true);
        setSize(400, 400);
        setTitle("My Swing Demo");
        setLayout(new FlowLayout());

        lblName.setText("Name");
        lblPassword.setText("Password");

        txtfName.setText("Name");// try

        pwdfPassword.setText("Password");

        btnSubmit.setText("Submit");
        btnCancel.setText("Cancel");
        btnReset.setText("Reset");
    }

    public void addComponents(JFrame frame){  //method to add the components
        frame.add(lblName);
        frame.add(txtfName);

        frame.add(lblPassword);
        frame.add(pwdfPassword);

        frame.add(btnSubmit);
        frame.add(btnCancel);
        frame.add(btnReset);
    }

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

    public MySwingDemo() {  //Constructor
        createComponents();
        setComponents();
        addComponents(this);
    }

}

这是操作顺序,在添加(和设置)组件之前,您要设置可见的
框架。而是移动
setVisible(true)在设置完组件后,确保调用
addComponents(此)setComponents()之前编写

我还将添加一个默认的
关闭操作

public void setComponents() { // method to set the components
    setSize(400, 400);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    setTitle("My Swing Demo");
    setLayout(new FlowLayout());

    lblName.setText("Name");
    lblPassword.setText("Password");

    txtfName.setText("Name");// try

    pwdfPassword.setText("Password");

    btnSubmit.setText("Submit");
    btnCancel.setText("Cancel");
    btnReset.setText("Reset");
    setVisible(true);
}
public void setComponents() { // method to set the components
    setSize(400, 400);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    setTitle("My Swing Demo");
    setLayout(new FlowLayout());

    lblName.setText("Name");
    lblPassword.setText("Password");

    txtfName.setText("Name");// try

    pwdfPassword.setText("Password");

    btnSubmit.setText("Submit");
    btnCancel.setText("Cancel");
    btnReset.setText("Reset");
    setVisible(true);
}