JPanel 在 Java 中未显示在 JFrame 中
JPanel not showing inside JFrame in Java
我知道这个问题已经被问了很多,我已经做了我的研究,但仍然找不到任何东西。下面是在任何人不高兴之前证明这一点的证据:
我找到了这个 link:
https://coderanch.com/t/563764/java/Blank-Frame-Panel
还有这个:
Adding panels to frame, but not showing when app is run
还有这个:
Why shouldn't I call setVisible(true) before adding components?
还有这个:
JPanel not showing in JFrame?
但是第一个问题说使用重绘,我试过没有修复,第二个和倒数第三个问题是关于在我添加的组件之后放置 setVisible
。
最后一个谈到让用户 JPanelArt
成为 JPanel
的扩展(这样做)而不是 JFrame
而不是在框架构造函数中制作框架(也有未完成)
每当我 运行 这个我只是得到一个空白框,就好像从未添加面板一样。
如果我在 link 中遗漏了什么,我深表歉意。不管怎样,下面是我的类:
GUI.java(扩展 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(扩展 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 生成器,这个社区中有人向我指出它不适合开始于(非常正确!)
问题出在您调用 getContentPane().setLayout(null)
时 GUI
class。由于此方法调用,您的 JFrame 未显示任何内容。如果删除它,您的元素应该会显示。
我还注意到您将每个 JButton 设置为具有 BorderLayout.WEST
的约束。这很可能会将您的 JButton 放在彼此之上并仅呈现其中一个。
我知道这个问题已经被问了很多,我已经做了我的研究,但仍然找不到任何东西。下面是在任何人不高兴之前证明这一点的证据:
我找到了这个 link: https://coderanch.com/t/563764/java/Blank-Frame-Panel
还有这个: Adding panels to frame, but not showing when app is run
还有这个: Why shouldn't I call setVisible(true) before adding components?
还有这个: JPanel not showing in JFrame?
但是第一个问题说使用重绘,我试过没有修复,第二个和倒数第三个问题是关于在我添加的组件之后放置 setVisible
。
最后一个谈到让用户 JPanelArt
成为 JPanel
的扩展(这样做)而不是 JFrame
而不是在框架构造函数中制作框架(也有未完成)
每当我 运行 这个我只是得到一个空白框,就好像从未添加面板一样。
如果我在 link 中遗漏了什么,我深表歉意。不管怎样,下面是我的类:
GUI.java(扩展 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(扩展 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 生成器,这个社区中有人向我指出它不适合开始于(非常正确!)
问题出在您调用 getContentPane().setLayout(null)
时 GUI
class。由于此方法调用,您的 JFrame 未显示任何内容。如果删除它,您的元素应该会显示。
我还注意到您将每个 JButton 设置为具有 BorderLayout.WEST
的约束。这很可能会将您的 JButton 放在彼此之上并仅呈现其中一个。