将按钮面板放置在Java Swing的中心
我是个新手,只是为了练习而尝试做一个简单的测试游戏。我想做的是这样的: 这是我的第一个实现,但在那里我扩展了JFrame,并在一个框架中实现了所有这些,然后我意识到我需要使用cardlayout从主菜单更改到游戏场景,所以我将其拆分为一个类主框架和其他类主菜单、游戏场景、游戏场景,等等。我的主菜单现在扩展了JPanel,当我将按钮添加到按钮面板,然后将按钮面板添加到主面板时,我得到以下结果: 它就像包含主菜单标签的面板和按钮面板是相邻的,但我需要它们,就像第一张图片一样。这是我的主菜单类:将按钮面板放置在Java Swing的中心,java,swing,layout-manager,Java,Swing,Layout Manager,我是个新手,只是为了练习而尝试做一个简单的测试游戏。我想做的是这样的: 这是我的第一个实现,但在那里我扩展了JFrame,并在一个框架中实现了所有这些,然后我意识到我需要使用cardlayout从主菜单更改到游戏场景,所以我将其拆分为一个类主框架和其他类主菜单、游戏场景、游戏场景,等等。我的主菜单现在扩展了JPanel,当我将按钮添加到按钮面板,然后将按钮面板添加到主面板时,我得到以下结果: 它就像包含主菜单标签的面板和按钮面板是相邻的,但我需要它们,就像第一张图片一样。这是我的主菜单类: p
public class MainMenu extends JPanel{
private JLabel menuTitle;
private JPanel menuTitlePanel;
private JPanel buttonPanel;
public MainMenu(){
this.setBackground(new Color(0, 128, 43));
//ADDING THE TITLE
menuTitle = new JLabel("<html><h1><strong><i>Krisko Beatz Quiz</i></strong></h1><hr></html>");
menuTitle.setForeground(Color.BLACK);
menuTitlePanel = new JPanel(new GridBagLayout());
menuTitlePanel.setBackground(new Color(0, 128, 43));
GridBagConstraints gbcTitle = new GridBagConstraints();
gbcTitle.weightx = 0;
gbcTitle.weighty = 0;
gbcTitle.gridx = 0;
gbcTitle.gridy = 0;
gbcTitle.gridwidth = 3;
gbcTitle.insets = new Insets(70, 0, 0, 0);
menuTitlePanel.add(menuTitle, gbcTitle);
this.add(menuTitlePanel, BorderLayout.NORTH);
buttonPanel = new JPanel(new GridBagLayout());
buttonPanel.setBackground(new Color(0, 128, 43));
JButton startButton = new JButton("Start");
GridBagConstraints gbcStart = new GridBagConstraints();
gbcStart.gridx = 1;
gbcStart.gridy = 1;
gbcStart.ipadx = 50;
gbcStart.ipady = 10;
gbcStart.gridwidth = 3;
gbcStart.insets = new Insets(10, 0, 0, 0);
buttonPanel.add(startButton, gbcStart);
this.add(buttonPanel, BorderLayout.CENTER);
}
}
public类主菜单扩展了JPanel{
私人JLabel menuTitle;
私人JPanel menuTitlePanel;
私人JPanel按钮面板;
公共主菜单(){
这个背景(新颜色(0,128,43));
//添加标题
menuTitle=新的JLabel(“Krisko Beatz测验”
”;
menuTitle.setForeground(颜色:黑色);
menuTitlePanel=newjpanel(newgridbagloayout());
menuTitlePanel.setBackground(新颜色(0,128,43));
GridBagConstraints gbcTitle=新的GridBagConstraints();
gbcTitle.weightx=0;
gbcTitle.weighty=0;
gbcTitle.gridx=0;
gbcTitle.gridy=0;
gbcTitle.gridwidth=3;
gbcTitle.insets=新的insets(70,0,0,0);
添加(menuTitle,gbcTitle);
添加(menuTitlePanel,BorderLayout.NORTH);
buttonPanel=newJPanel(newGridBagLayout());
按钮面板后退(新颜色(0,128,43));
JButton startButton=新JButton(“开始”);
GridBagConstraints gbcStart=新的GridBagConstraints();
gbcStart.gridx=1;
gbcStart.gridy=1;
gbcStart.ipadx=50;
gbcStart.ipady=10;
gbcStart.gridwidth=3;
gbcStart.insets=新的insets(10,0,0,0);
按钮面板添加(开始按钮,gbcStart);
添加(buttonPanel,BorderLayout.CENTER);
}
}
任何帮助都将不胜感激。我发现您尚未为主菜单设置布局,或许可以尝试Boxlayout,看看它是否提供了您想要的结果:
public MainMenu(){
this.setLayout(new BoxLayout(this,BoxLayout.PAGE_AXIS));
...
this.add(menuTitlePanel, Component.CENTER_ALIGNMENT);
...
this.add(buttonPanel, Component.CENTER_ALIGNMENT);
...
}
我发现您还没有为MainMenu设置布局,也许可以尝试Boxlayout,看看它是否提供了您想要的结果:
public MainMenu(){
this.setLayout(new BoxLayout(this,BoxLayout.PAGE_AXIS));
...
this.add(menuTitlePanel, Component.CENTER_ALIGNMENT);
...
this.add(buttonPanel, Component.CENTER_ALIGNMENT);
...
}
因此,您基本上有两个基本组,标题和按钮,这两个组需要单独管理,因为它们有不同的布局要求(主要是按钮被布置在中间)
导入java.awt.gridbag约束;
导入java.awt.GridBagLayout;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.SwingUtilities;
导入javax.swing.border.EmptyBorder;
公共类测试菜单{
公共静态void main(字符串[]args){
新建TestMenu();
}
公共测试菜单(){
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
JFrame=新JFrame(“测试”);
frame.add(新的MenuPane());
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
});
}
公共类MenuPane扩展了JPanel{
公共MenuPane(){
新订单(新的空订单(10,10,10,10));
setLayout(新的GridBagLayout());
GridBagConstraints gbc=新的GridBagConstraints();
gbc.gridwidth=GridBagConstraints.rements;
gbc.anchor=gridbag.NORTH;
添加(新的JLabel(“Krisko Beatz测验”),gbc);
gbc.anchor=GridBagConstraints.CENTER;
gbc.fill=GridBagConstraints.HORIZONTAL;
JPanel按钮=新的JPanel(新的GridBagLayout());
按钮。添加(新的JButton(“开始”),gbc);
按钮。添加(新的JButton(“显示分数”),gbc);
添加(新的JButton(“帮助”),gbc);
按钮。添加(新的JButton(“退出”),gbc);
gbc.weighty=1;
添加(按钮,gbc);
}
}
}
这应该有助于解决当前的问题,但您可能还想了解有关如何在不同视图之间切换的详细信息。因此,您基本上有两个基本组,标题和按钮,这两个组需要单独管理,因为它们具有不同的布局要求(按钮主要布置在中间)
导入java.awt.gridbag约束;
导入java.awt.GridBagLayout;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
导入javax.swing.SwingUtilities;
导入javax.swing.border.EmptyBorder;
公共类测试菜单{
公共静态void main(字符串[]args){
新建TestMenu();
}
公共测试菜单(){
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
JFrame=新JFrame(“测试”);
frame.add(新的MenuPane());
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
});
}
公共类MenuPane扩展了JPanel{
公共MenuPane(){
新订单(新的空订单(10,10,10,10));
setLayout(新的GridBagLayout());
GridBagConstraints gbc=新的GridBagConstraints();
gbc.gridwidth=GridBagConstraints.rements;
gbc.anchor=gridbag.NORTH;
添加(新的JLabel(“Krisko Beatz测验”),gbc);
gbc.anchor=GridBagConstraints.CENTER;
gbc.fill=GridBagConstraints.HORIZONTAL;
JPanel按钮=新的JPanel(新的GridBagLayout());
按钮。添加(新的JButton(“开始”),gbc);
按钮。添加(新的JButton(“显示分数”),gbc);
按钮。添加