将JButton正确放置在GridBagLayout | Java 8中

将JButton正确放置在GridBagLayout | Java 8中,java,user-interface,gridbaglayout,Java,User Interface,Gridbaglayout,我想将JButton“Start”放在图形用户界面的中下部。 遗憾的是,我设置的gridbagstraints似乎没有任何效果。 我正在使用jdk1.8.0_191和eclipseide 编辑:我将我的代码片段切换到“最小可复制示例”。 下面是我的代码片段: package gui.main; import java.awt.Color; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt

我想将
JButton
“Start”放在图形用户界面的中下部。 遗憾的是,我设置的
gridbagstraints
似乎没有任何效果。 我正在使用
jdk1.8.0_191
eclipseide

编辑:我将我的代码片段切换到“最小可复制示例”。 下面是我的代码片段:

package gui.main;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Test{
    
    public static void main(String[] args) {
        
        JFrame frame = new JFrame(); 
        frame.setSize(646, 509);
        frame.setResizable(false);
        frame.setTitle("Adventure Time");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
            JPanel panel = new JPanel();
            panel.setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            
            gbc.gridx = 1;
            gbc.gridy = 5;
            
                JButton button = new JButton("Start");  
                button.setBackground(Color.black);      
                button.setForeground(Color.white);  
                button.setPreferredSize(new Dimension(110, 60));
                button.setMinimumSize(new Dimension(110, 60));
                button.setVisible(true);
                
            panel.add(button, gbc);
            panel.setVisible(true);
        
        frame.add(panel);
        frame.setVisible(true);
        
    }
}
这是一张图片,我大概想要“开始”按钮


我创建了一个简单、可运行的GUI示例,在
JPanel
的下四分之一处有一个开始按钮。下面是示例GUI

使用Swing组件。不要扩展Swing组件或任何其他Java类,除非您打算重写类中的一个方法

我对
JPanel
使用了
BorderLayout
。我用一个计算过的空边框将开始按钮从中心向下移动

在本例中,我设置了
JPanel
的大小。我假设您将根据图像的大小设置游戏面板的大小

这是密码

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class StartButtonExample implements Runnable {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new StartButtonExample());
    }

    @Override
    public void run() {
        JFrame frame = new JFrame("Game");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(createMainPanel(), BorderLayout.CENTER);

        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    private JPanel createMainPanel() {
        JPanel panel = new JPanel(new BorderLayout());
        Dimension panelSize = new Dimension(400, 400);
        panel.setPreferredSize(panelSize);

        JButton button = new JButton("Start");
        Dimension buttonSize = button.getPreferredSize();

        int height = panelSize.height - buttonSize.height;
        int width = panelSize.width - buttonSize.width;
        int top = height * 3 / 4;
        int left = (width - buttonSize.width) / 2;
        int bottom = height / 4;
        int right = left;
        panel.setBorder(BorderFactory.createEmptyBorder(
                top, left, bottom, right));

        panel.add(button, BorderLayout.CENTER);

        return panel;
    }

}

在我业余的观点中:

最后,我为我的小应用程序使用了不同的
插图。
在我看来,它看起来更干净

   //margin 400 top, rest 3
   gbc.insets = new Insets(400,3,3,3);
   gbc.gridy = 0;
   getWrapperPanel().add(getBtnStart02(), gbc);
    
   //margin 3 at all sides for all following gui objects
   gbc.insets = new Insets(3,3,3,3);
   gbc.gridy = 1;
   getWrapperPanel().add(getBtnLoad(), gbc);

就像一个符咒。

也许更合适?可惜你没有提供。我本可以将代码复制到我的EclipseIDE中,并尝试不同的想法;我将转换我的问题,@Abra我将阅读一些关于BoxLayout的文档谢谢你也谢谢你的回答。但使用GridBagConstraints也可行吗?@Georodin:您可以创建6或7个“new JLabel(“”)”;并使用gridy参数将每个标签放置在自己的行上,然后放置JButton。谢谢,gridbaglayout会忽略空行吗?我现在使用了` for(int I=0;I