Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将按钮面板放置在Java Swing的中心_Java_Swing_Layout Manager - Fatal编程技术网

将按钮面板放置在Java Swing的中心

将按钮面板放置在Java Swing的中心,java,swing,layout-manager,Java,Swing,Layout Manager,我是个新手,只是为了练习而尝试做一个简单的测试游戏。我想做的是这样的: 这是我的第一个实现,但在那里我扩展了JFrame,并在一个框架中实现了所有这些,然后我意识到我需要使用cardlayout从主菜单更改到游戏场景,所以我将其拆分为一个类主框架和其他类主菜单、游戏场景、游戏场景,等等。我的主菜单现在扩展了JPanel,当我将按钮添加到按钮面板,然后将按钮面板添加到主面板时,我得到以下结果: 它就像包含主菜单标签的面板和按钮面板是相邻的,但我需要它们,就像第一张图片一样。这是我的主菜单类: p

我是个新手,只是为了练习而尝试做一个简单的测试游戏。我想做的是这样的:

这是我的第一个实现,但在那里我扩展了JFrame,并在一个框架中实现了所有这些,然后我意识到我需要使用cardlayout从主菜单更改到游戏场景,所以我将其拆分为一个类主框架和其他类主菜单、游戏场景、游戏场景,等等。我的主菜单现在扩展了JPanel,当我将按钮添加到按钮面板,然后将按钮面板添加到主面板时,我得到以下结果:

它就像包含主菜单标签的面板和按钮面板是相邻的,但我需要它们,就像第一张图片一样。这是我的主菜单类:

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);
按钮。添加