用Panel为什么无法显现按钮


public class Test {
    public static void main(String[] args) {
        JFrame jFrame = new JFrame("学习监听");
        jFrame.setSize(600,600);
        jFrame.setLocationRelativeTo(null);
        jFrame.setLayout(null);
        jFrame.setDefaultCloseOperation(3);
        JButton jbt=new JButton("点我试试看");
        jbt.setBounds(50,50,100,100);
        jbt.addActionListener( new jian());
        jFrame.getContentPane().add(jbt);
        jFrame.setVisible(true);

    }


这样运行以后可以显示我的按钮
但是我换了另一种写法就不显示是为啥啊

public class Test {
    public static void main(String[] args) {
        JFrame jFrame = new JFrame("学习监听");
        jFrame.setSize(600,600);
        jFrame.setLocationRelativeTo(null);
        jFrame.setLayout(null);
        jFrame.setDefaultCloseOperation(3);
        JButton jbt=new JButton("点我试试看");
        jbt.setBounds(50,50,100,100);
        jbt.addActionListener( new jian());
        Panel p=new Panel();
        p.add(jbt);
        jFrame.add(p);
        jFrame.setVisible(true);

    }



彭于晏们快来看看吧

jFrame.setLayout(null) 注释掉这个,按钮就可以显示出来。
jFrame.setLayout(null)表示启用绝对布局,绝对布局的优点是你可以非常精确地控制组件的位置和大小,适用于一些特定的布局需求。然而,它也有一些局限性。由于组件的位置和大小是固定的,当窗体的大小改变时,组件的位置和大小不会自动调整,可能导致组件的重叠或不可见。此外,绝对布局不考虑不同操作系统或不同屏幕分辨率的差异,可能导致在不同环境下显示效果不一致。

以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:

在第二个写法中,你将按钮添加到了一个Panel中,但是没有设置该Panel的大小和位置,因此按钮无法显示出来。你可以通过设置Panel的大小和位置来解决这个问题,例如:

Panel p=new Panel();
p.setBounds(0, 0, 600, 600);
p.add(jbt);
jFrame.add(p);

这样就可以让按钮显示出来了。完整代码如下:

public class Test {
    public static void main(String[] args) {
        JFrame jFrame = new JFrame("学习监听");
        jFrame.setSize(600,600);
        jFrame.setLocationRelativeTo(null);
        jFrame.setLayout(null);
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JButton jbt=new JButton("点我试试看");
        jbt.setBounds(50,50,100,100);
        jbt.addActionListener(new jian());
        Panel p=new Panel();
        p.setBounds(0, 0, 600, 600);
        p.add(jbt);
        jFrame.add(p);
        jFrame.setVisible(true);
    }
}
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/729953
  • 你也可以参考下这篇文章:【layui相关研究第二篇】分页和panel组件
  • 除此之外, 这篇博客: Panel面板和三种布局管理器中的 Panel面板 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • panel面板可以理解为一个场景,它是可以嵌套在Frame里的

    panel本身也是一个类,就可以通过从操作类的方式去操作它

    下面的代码就是一个窗口中嵌套一个面板的实现

    import java.awt.*;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    
    public class TestPanel {
        public static void main(String[] args) {
            Frame frame = new Frame();
            Panel panel = new Panel();
    
            //设置布局
            frame.setLayout(null);
    
    
            //坐标,大小,颜色
            frame.setBounds(300,300,500,500);
            frame.setBackground(new Color(0xAF702B));
    
            //设置panel位置,大小,颜色
            panel.setBounds(50,50,400,400);
            panel.setBackground(new Color(0x861C5B));
    
            frame.add(panel);
    
            frame.setVisible(true);
    
            frame.addWindowListener(new WindowAdapter() {
                @Override
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
    
    
        }
    }
    
    

    在这里插入图片描述
    设置面板的属性的方法大致上和设置窗口的方法差不多

  • 以下回答由chatgpt基于相关博客总结生成:

    由于提供的信息太少,无法判断问题产生原因。请提供更具体的代码以及对比两种写法的差异,或者提供运行时的错误信息。