为什么Java图形化界面JFrame显示白板却没有组件呢

import javax.swing.*;
import java.awt.*;
@SuppressWarnings("serial")
public class Notebook extends JFrame{
public static final int LINES=50;
public static final int CHAR_PER_LINES=40;

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

public Notebook()
{
        JFrame one = new JFrame("学生界面");
        JLabel lab1 = new JLabel("学号");
        JTextField jtfid1 = new JTextField(10);
        JLabel lab2 = new JLabel("姓名");
        JTextField jtfid2 = new JTextField(10);
        JLabel lab3 = new JLabel("性别");
        JTextField jtfid3 = new JTextField(10);
        JLabel lab4 = new JLabel("专业");
        JTextField jtfid4 = new JTextField(10);
        JLabel lab5 = new JLabel("宿舍号");
        JTextField jtfid5 = new JTextField(10);
        JLabel lab6 = new JLabel("入住时间");
        JTextField jtfid6 = new JTextField(10);
        JButton b1 = new JButton("添加");
        JButton b2 = new JButton("关闭");
        
        GridLayout myCard = new GridLayout(7,1);
            one.setLayout(myCard);
        
        one.add(lab1);
        one.add(jtfid1);
        one.add(lab2);
        one.add(jtfid2);
        one.add(lab3);
        one.add(jtfid3);
        one.add(lab4);
        one.add(jtfid4);
        one.add(lab5);
        one.add(jtfid5);
        one.add(lab6);
        one.add(jtfid6);
        one.add(b1);
        one.add(b2);
        
        getContentPane().add(one);
        this.setBounds(500, 200, 300, 400);
        this.setVisible(true);
  }
}

有人说是因为在构造方法中重新定义了JFrame导致的,但是我还是不太理解到底是为什么,它的解决方法是什么呢?
改用下面的JPanel就可以显示组件

                JLabel lab1 = new JLabel("学号");
        JTextField jtfid1 = new JTextField(10);
        JLabel lab2 = new JLabel("姓名");
        JTextField jtfid2 = new JTextField(10);
        JLabel lab3 = new JLabel("性别");
        JTextField jtfid3 = new JTextField(10);
        JLabel lab4 = new JLabel("专业");
        JTextField jtfid4 = new JTextField(10);
        JLabel lab5 = new JLabel("宿舍号");
        JTextField jtfid5 = new JTextField(10);
        JLabel lab6 = new JLabel("入住时间");
        JTextField jtfid6 = new JTextField(10);
        JButton b1 = new JButton("添加");
        JButton b2 = new JButton("关闭");
        
        GridLayout myCard = new GridLayout(7,1);
            JPanel p = new JPanel();
            p.setLayout(myCard);
        
        p.add(lab1);
        p.add(jtfid1);
        p.add(lab2);
        p.add(jtfid2);
        p.add(lab3);
        p.add(jtfid3);
        p.add(lab4);
        p.add(jtfid4);
        p.add(lab5);
        p.add(jtfid5);
        p.add(lab6);
        p.add(jtfid6);
        p.add(b1);
        p.add(b2);
        getContentPane().add(p);
        this.setTitle("添加学生");
        this.setBounds(500, 200, 300, 400);
                this.setVisible(true);

getContentPane().add(one);你这是把JFrame加在内容面板上了,一般不会这么做,所以显示不了
我们是将组件加在内容面板上才可以显示,就像你的第二个例子一样

没有显示是因为你没有给对应的组件设置大小。需要调用setBounds()方法来设置组件的显示位置和宽高;
你使用的是默认布局方式:
img

把第一部分代码换成如下:

import javax.swing.*;
import java.awt.*;
@SuppressWarnings("serial")
public class Notebook extends JFrame{
public static final int LINES=50;
public static final int CHAR_PER_LINES=40;
public static void main(String args[])
{
    new Notebook();
}
public Notebook()
{
        JFrame one = new JFrame("学生界面");
        JLabel lab1 = new JLabel("学号");
        JTextField jtfid1 = new JTextField(10);
        JLabel lab2 = new JLabel("姓名");
        JTextField jtfid2 = new JTextField(10);
        JLabel lab3 = new JLabel("性别");
        JTextField jtfid3 = new JTextField(10);
        JLabel lab4 = new JLabel("专业");
        JTextField jtfid4 = new JTextField(10);
        JLabel lab5 = new JLabel("宿舍号");
        JTextField jtfid5 = new JTextField(10);
        JLabel lab6 = new JLabel("入住时间");
        JTextField jtfid6 = new JTextField(10);
        JButton b1 = new JButton("添加");
        JButton b2 = new JButton("关闭");
        GridLayout myCard = new GridLayout(7,1);
            one.setLayout(myCard);
        one.add(lab1);
        one.add(jtfid1);
        one.add(lab2);
        one.add(jtfid2);
        one.add(lab3);
        one.add(jtfid3);
        one.add(lab4);
        one.add(jtfid4);
        one.add(lab5);
        one.add(jtfid5);
        one.add(lab6);
        one.add(jtfid6);
        one.add(b1);
        one.add(b2);
        // getContentPane().add(one);
        one.setBounds(500, 200, 300, 400);
        one.setVisible(true);
  }
}

如图:
img