我知道这个问题已经被问了很多,我也做了调查,但还是找不到什么。下面是证明,免得大家不高兴。
我找到了这个链接。https:/coderanch.comt563764javaBlank-Frame-Panel。
和这个。为什么我不应该在添加组件之前调用setVisible(true)?
还有这个。JPanel在JFrame中不显示?
但第一个问题说使用重绘,我试过了,但没有解决,而第二个和第三个问题到最后一个问题都说要把它放在 setVisible
组件添加后,我有。
最后一个说的是让用户 JPanelArt
延长 JPanel
而不是 JFrame
而不是在框架构造函数中做一个框架(也没有做过)。
每当我运行这个程序时,我都会得到一个空白的框架,就像从未添加过面板一样。
如果我在这些链接中错过了什么,我很抱歉。以下是我的类。
GUI.java (extends JFrame)
package javaapplication2;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GUI extends JFrame{
public GUI(String name) {
super(name);
getContentPane().setLayout(null);
JPanel myPanel1 = new GUIPanel();
myPanel1.setLocation(20, 20);
getContentPane().add(myPanel1);
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
setResizable(true);
}
public static void main(String[] args) {
JFrame frame = new GUI("Game");
frame.setVisible(true);
}
}
GUIPanel.java (extends JPanel)
package javaapplication2;
import java.awt.*;
import javax.swing.*;
public class GUIPanel extends JPanel {
JButton start;
JButton inspect1;
JButton inspect2;
JButton inspect3;
JButton suspect;
public GUIPanel() {
setLayout(new BorderLayout());
start = new JButton("Start Game");
inspect1 = new JButton("Inspect 1");
inspect2 = new JButton("Inspect 2");
inspect3 = new JButton("Inspect 3");
suspect = new JButton("Choose Suspect");
add(start, BorderLayout.WEST);
add(inspect1, BorderLayout.WEST);
add(inspect2, BorderLayout.WEST);
add(inspect3, BorderLayout.WEST);
add(suspect, BorderLayout.WEST);
}
}
我知道这很简单,但那是因为我正在跟着讲师的教程学习,以便掌握一些窍门,因为我之前使用的是GUI构建器,而这个社区里有人向我指出,这个GUI构建器并不好用(非常正确!)。
问题在于你的 GUI
类,当你调用 getContentPane().setLayout(null)
. 由于这个方法调用,你的JFrame没有显示任何东西。如果你删除它,你的元素应该会显示出来。
我还注意到,你把每个JButton都设置成了一个约束条件 BorderLayout.WEST
. 这很可能会把你的JButtons放在一起,只显示其中一个。