无法让JPanel组件显示在JFrame上

时间:2015-04-18 16:05:30

标签: java swing jframe jpanel layout-manager

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

我尝试过各种方法,但我永远无法展示面板。我试过给框架一个布局,面板是一个布局,它仍然无法正常工作。所有显示的都是Menu。这是因为我在主要方法中这样做了吗?我知道这里的专业人士将能够在几秒钟内解决这个问题。谢谢。

//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);

    }
}   

2 个答案:

答案 0 :(得分:2)

不要在主线程中使用swing组件。这在the swing tutorial中解释。

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

不要设置框架的大小。在将其显示之前调用pack()

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

答案 1 :(得分:1)

您的GUI创建实现有点过了。

如果您需要进一步了解,可以参考此问题:Create JFrame Windows

但我确定了你的问题。请参阅下面的代码:(经过测试和测试)


//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();
    }
}  

那应该对你有帮助。

Proof

让我知道结果,你愿意吗?