无法让 JPanel 组件显示在 JFrame 上
Unable to get JPanel components to display on a JFrame
我正在为 class 编写一段简单的代码,需要我实现 JMenuBar
。我在显示它时没有遇到任何问题,但我无法在菜单下方的 JFrame
上显示 JPanel
。
我尝试过多种方法,但始终无法显示面板。我试过给框架一个布局,给面板一个布局,但它仍然不起作用。将显示的只是 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);
}
}
您对 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();
}
}
这应该对你有帮助。
让我知道结果,好吗:)
不要在主线程中使用swing组件。 the swing tutorial.
中对此进行了解释
将组件添加到框架中,然后才能使框架可见。
不要设置边框的大小。在使其可见之前调用 pack()
。
框架使用 BorderLayout。将两个面板添加到布局的中心是行不通的:只有一个是可见的。学会使用 layout managers.
我正在为 class 编写一段简单的代码,需要我实现 JMenuBar
。我在显示它时没有遇到任何问题,但我无法在菜单下方的 JFrame
上显示 JPanel
。
我尝试过多种方法,但始终无法显示面板。我试过给框架一个布局,给面板一个布局,但它仍然不起作用。将显示的只是 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);
}
}
您对 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();
}
}
这应该对你有帮助。
让我知道结果,好吗:)
不要在主线程中使用swing组件。 the swing tutorial.
中对此进行了解释将组件添加到框架中,然后才能使框架可见。
不要设置边框的大小。在使其可见之前调用 pack()
。
框架使用 BorderLayout。将两个面板添加到布局的中心是行不通的:只有一个是可见的。学会使用 layout managers.