我尝试用Java编写一个小游戏。我认为有一个Window类(扩展JFrame)然后在其中为不同的屏幕(Menue,Game,GameOver等)放置一个JPanel是个好主意。 如果我把按钮和东西直接放在JFrame中,一切都是正确的,但是当我尝试将JPanel放入JFrame时它不起作用。这是代码:
public class Window extends JFrame{
private final int WIDTH = 800;
private final int HEIGTH = 600;
private final int QUADRAT = 50;
JButton startButton;
JButton exitButton;
JButton anleitungButton;
JLabel gameTitle;
public Window() {
super("Study Run");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(null);
setSize(WIDTH, HEIGTH);
setResizable(false);
getContentPane().add(new MenuePanel());
setVisible(true);
setLocationRelativeTo(null);
}
这是我的小组:
public class MenuePanel extends JPanel{
JButton startButton;
JButton exitButton;
JButton anleitungButton;
JLabel gameTitle;
public MenuePanel() {
super();
setBackground(Color.CYAN);
gameTitle = new JLabel("StudyRun", SwingConstants.CENTER);
gameTitle.setBounds(200, 25, 400, 75);
gameTitle.setFont(new Font("Arial", Font.ITALIC, 36));
add(gameTitle);
startButton = new JButton("start");
startButton.setBounds(325, 125, 150, 50);
add(startButton);
anleitungButton = new JButton("anleitung");
anleitungButton.setBounds(325, 200, 150, 50);
add(anleitungButton);
exitButton = new JButton("exit");
exitButton.setBounds(325, 450, 150, 50);
add(exitButton);
CloseListener closeListener = new CloseListener();
StartListener startListener = new StartListener();
AnleitungListener anleitungListener = new AnleitungListener();
startButton.addActionListener(startListener);
anleitungButton.addActionListener(anleitungListener);
exitButton.addActionListener(closeListener);
}
我在网上找到的唯一帮助是,我需要在设置框架可见之前添加面板。那不行。将pack()或revalidate()放在代码中的任何位置都不起作用。将面板设置为不透明或可见也不做任何事情。我不知道还能尝试什么?!
答案 0 :(得分:4)
你的问题在这里:
setLayout(null);
当您使用空布局时,您编码器对所有添加的组件的位置和大小负全部责任。您添加的组件没有大小,因此默认为0,0。
(坏)解决方案:给MenuePanel一个大小或边界
更好的解决方案:学习和使用布局管理器(因为您肯定已经告诉过您所有的搜索)。