将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