窝窝没有头 2021-07-12 14:43 采纳率: 100%
浏览 106
已采纳

为什么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);
  • 写回答

3条回答 默认 最新

  • CSDN专家-Fay 2021-07-12 14:55
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已采纳回答 7月12日
  • 创建了问题 7月12日

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题