java如果我是JPanel和JFrame的子类,为什么我的JFrame保持为空?
我正在尝试为我的Java应用程序编写自定义JFrame和JPanel。目前,我只想要一个在屏幕中间有一个开始按钮的JPanel。下面是我的代码:
package gui;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
@SuppressWarnings("serial")
public class SubitizingFrame extends JFrame implements KeyListener {
public SubitizingFrame() {
super("Subitizing");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addKeyListener(this);
add(new LaunchPanel());
pack();
setVisible(true);
}
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_F5)
System.out.println("F5 pressed");
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
}
}
这是我的小组:
package gui;
import instructions.Settings;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class LaunchPanel extends JPanel implements ActionListener {
private JButton startButton;
public LaunchPanel() {
int width = Settings.getScreenSizeX(), height = Settings.getScreenSizeY();
setPreferredSize(new Dimension(width, height));
setLayout(null);
startButton = new JButton("Start");
startButton.setLocation((width/2) - (startButton.getWidth()/2), (height/2) - (startButton.getHeight()/2));
add(startButton);
}
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
}
}
但是当应用程序启动时,我什么也看不到。只是一个灰色的大屏幕
# 1 楼答案
如果您不使用任何LayoutManager(顺便说一句,您可能应该使用),那么您也需要使用面板的set the size(以及它的位置)
发件人:http://download.oracle.com/javase/tutorial/uiswing/layout/using.html
# 2 楼答案
不要使用键盘监听器。Swing设计用于键绑定。阅读Swing教程中关于How to Use Key Bindings的部分以了解更多信息
本教程还有一个关于
Using Layout Manager
的部分,您应该阅读。您不应该创建带有空布局的GUI# 3 楼答案
不要使用空布局。如果只使用默认布局管理器} 。
JPanel
(即FlowLayout
),则带有“自动”的JButton
将被放置在中间。此外,为了将^ {< CD4}}放置在屏幕的中间,调用^{由于很难说出“屏幕”是什么意思,本例显示了如何将
JButton
集中在JPanel
集中在JFrame
中,然后集中在显示器上# 4 楼答案
# 5 楼答案
建议: