Java 无法在JFrame上显示JPanel组件

Java 无法在JFrame上显示JPanel组件,java,swing,jframe,jpanel,layout-manager,Java,Swing,Jframe,Jpanel,Layout Manager,我正在为类编写一段简单的代码,它要求我实现JMenuBar。我在显示它时没有遇到任何问题,但我无法在菜单下方的JFrame上显示JPanel 我尝试过各种方法,但我从来没有得到一个面板显示。我试着给框架一个布局,给面板一个布局,但仍然不起作用。将显示的只是菜单。这是因为我是用一种主要的方法来做的吗?我知道这里的专业人士几秒钟内就能解决这个问题。谢谢 //TestPerson.java import javax.swing.*; import java.awt.*; public clas

我正在为类编写一段简单的代码,它要求我实现
JMenuBar
。我在显示它时没有遇到任何问题,但我无法在菜单下方的
JFrame
上显示
JPanel

我尝试过各种方法,但我从来没有得到一个面板显示。我试着给框架一个布局,给面板一个布局,但仍然不起作用。将显示的只是
菜单
。这是因为我是用一种主要的方法来做的吗?我知道这里的专业人士几秒钟内就能解决这个问题。谢谢

//TestPerson.java 
import javax.swing.*;
import java.awt.*;



public class TestPerson{
    public static void main(String [] args){
        JFrame f = new JFrame();
        f.setSize(600, 600);
        f.setVisible(true);
        JMenuBar pmb = new JMenuBar();
        f.setJMenuBar(pmb);
        f.setLocationRelativeTo(null);


        JMenu file = new JMenu("File");
        JMenu display = new JMenu("Display");
        JMenu edit = new JMenu("Edit");

        pmb.add(file);
        pmb.add(display);
        pmb.add(edit);

        file.add(new JMenuItem("Open"));
        file.add(new JMenuItem("Save"));

        edit.add(new JMenuItem("Add"));
        edit.add(new JMenuItem("Remove"));
        edit.add(new JMenuItem("Modify"));

        JPanel p1 = new JPanel();
        p1.add(new JLabel("Something"));
        p1.add(new JTextField("Type here"));
        JPanel p2 = new JPanel();
        p2.add(new JLabel("Something New"));
        p2.add(new JTextField("Type here again"));

        f.add(p1);
        f.add(p2);

    }
}   

您的GUI创建实现有点过时

如果需要进一步了解,您可以参考以下内容:

不过我已经解决了你的问题。请参阅下面的代码:(已尝试和测试)



那应该对你有帮助


让我知道结果,好吗:)

您的GUI创建实现有点过时

如果需要进一步了解,您可以参考以下内容:

不过我已经解决了你的问题。请参阅下面的代码:(已尝试和测试)



那应该对你有帮助


让我知道结果,好吗:)

您的GUI创建实现有点过时

如果需要进一步了解,您可以参考以下内容:

不过我已经解决了你的问题。请参阅下面的代码:(已尝试和测试)



那应该对你有帮助


让我知道结果,好吗:)

您的GUI创建实现有点过时

如果需要进一步了解,您可以参考以下内容:

不过我已经解决了你的问题。请参阅下面的代码:(已尝试和测试)



那应该对你有帮助


让我知道结果,好吗:)

不要在主线程中使用swing组件。这一点在本文中进行了解释

将构件添加到框架中,然后才能使框架可见

不要设置框架的大小。在使其可见之前调用
pack()


框架使用边框布局。将两个面板添加到布局的中心将不起作用:只有一个面板可见。学习使用。

不要在主线程中使用swing组件。这一点在本文中进行了解释

将构件添加到框架中,然后才能使框架可见

不要设置框架的大小。在使其可见之前调用
pack()


框架使用边框布局。将两个面板添加到布局的中心将不起作用:只有一个面板可见。学习使用。

不要在主线程中使用swing组件。这一点在本文中进行了解释

将构件添加到框架中,然后才能使框架可见

不要设置框架的大小。在使其可见之前调用
pack()


框架使用边框布局。将两个面板添加到布局的中心将不起作用:只有一个面板可见。学习使用。

不要在主线程中使用swing组件。这一点在本文中进行了解释

将构件添加到框架中,然后才能使框架可见

不要设置框架的大小。在使其可见之前调用
pack()



框架使用边框布局。将两个面板添加到布局的中心将不起作用:只有一个面板可见。学会使用。

谢谢。不过,对于为什么将文件重命名为thisle,我们有点困惑。谢谢你的链接。我会读一遍的。基本上我不需要在主方法中实现这些东西。请详细说明“文件到thisle”。。没问题,我会帮助回答关于答案的任何问题;您编写了这个文件;哦,对不起,我没看到。这是我将所有“f”替换为“this”的结果。我会快速编辑答案。好的,这很有意义。我真的很感激,谢谢你。不过,对于为什么将文件重命名为thisle,我们有点困惑。谢谢你的链接。我会读一遍的。基本上我不需要在主方法中实现这些东西。请详细说明“文件到thisle”。。没问题,我会帮助回答关于答案的任何问题;您编写了这个文件;哦,对不起,我没看到。这是我将所有“f”替换为“this”的结果。我会快速编辑答案。好的,这很有意义。我真的很感激,谢谢你。不过,对于为什么将文件重命名为thisle,我们有点困惑。谢谢你的链接。我会读一遍的。基本上我不需要在主方法中实现这些东西。请详细说明“文件到thisle”。。没问题,我会帮助回答关于答案的任何问题;您编写了这个文件;哦,对不起,我没看到。这是我将所有“f”替换为“this”的结果。我会快速编辑答案。好的,这很有意义。我真的很感激,谢谢你。不过,对于为什么将文件重命名为thisle,我们有点困惑。谢谢你的链接。我会读一遍的。基本上我不需要在主方法中实现这些东西。请详细说明“文件到thisle”。。没问题,我会帮助回答关于答案的任何问题;您编写了这个文件;哦,对不起,我没看到。这是我将所有“f”替换为“this”的结果。我会快速编辑答案。好的,这很有意义。我真的很感激,谢谢你。我会读一遍的。我把答案告诉了其他人,因为他就在你之前回答了。谢谢你的链接,先生。请注意,另一个答案有我提到的一些问题。代码可能看起来运行良好,但可能运行不正常,因为它不遵守swing.t的线程规则
//TestPerson.java 
import javax.swing.*;
import java.awt.*;



public class TestPerson extends JFrame{

    public TestPerson(){
        super("TestPerson");        


        JMenuBar pmb = new JMenuBar();
        this.setLayout(new BorderLayout());
        this.setJMenuBar(pmb);
        //this.setLocationRelativeTo(null);


        JMenu file = new JMenu("File");
        JMenu display = new JMenu("Display");
        JMenu edit = new JMenu("Edit");

        pmb.add(file);
        pmb.add(display);
        pmb.add(edit);

        file.add(new JMenuItem("Open"));
        file.add(new JMenuItem("Save"));

        edit.add(new JMenuItem("Add"));
        edit.add(new JMenuItem("Remove"));
        edit.add(new JMenuItem("Modithisy"));

        JPanel p1 = new JPanel();
        p1.add(new JLabel("Something"));
        p1.add(new JTextField("Type here"));
        JPanel p2 = new JPanel();
        p2.add(new JLabel("Something New"));
        p2.add(new JTextField("Type here again"));

        this.add(p1);
        this.add(p2);

        this.setSize(600, 600);
        this.setVisible(true);
        this.pack();
        this.setVisible(true);

    }

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