【发布时间】:2020-05-21 04:26:25
【问题描述】:
我知道这个问题被问了很多,我已经完成了我的研究,但仍然找不到任何东西。以下是在任何人不高兴之前的证明:
我找到了这个链接: 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,并且不要在框架构造函数中创建框架(也没有这样做)
当我运行它时,我只会得到一个空白框架,就好像从未添加过面板一样。
如果我错过了这些链接中的某些内容,我深表歉意。反正下面是我的课:
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 构建器,这个社区中的某个人向我指出这不是一个好的开始(非常正确!)
【问题讨论】:
-
你为什么将 GUIPanel 声明为超类的一个实例,而不是它实际上是什么?
JPanel myPanel1 = new GUIPanel(); -
这就是我们在我大学的教程中的做法。只做 GUIPanel myPanel1 = new GUIPanel() 会更好吗?我最初是这样做的,但最终因为我看到了教程而改变了它。
标签: java swing user-interface jframe jpanel