在 GridBagLayout 中正确定位 JButton | Java 8
Position a JButton properly within a GridBagLayout | Java 8
我想在我的 GUI 的中下方放置一个 JButton
“开始”。
遗憾的是我设置的 GridBagConstraints
似乎没有效果。
我正在使用 jdk1.8.0_191
和 Eclipse IDE
.
编辑:我将代码片段切换为“最小可重现示例”。
这是我的代码片段:
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 class,除非您打算覆盖 class.
中的方法之一
我用 BorderLayout
作为 JPanel
。我使用计算出的空边框将开始按钮从中心向下移动。
我在这个例子中设置了 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;
}
}
我的外行观点:
我最终为我的小型应用程序使用了不同的 insets
。
我觉得比较干净
//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);
很有魅力。
我想在我的 GUI 的中下方放置一个 JButton
“开始”。
遗憾的是我设置的 GridBagConstraints
似乎没有效果。
我正在使用 jdk1.8.0_191
和 Eclipse IDE
.
编辑:我将代码片段切换为“最小可重现示例”。 这是我的代码片段:
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 class,除非您打算覆盖 class.
中的方法之一我用 BorderLayout
作为 JPanel
。我使用计算出的空边框将开始按钮从中心向下移动。
我在这个例子中设置了 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;
}
}
我的外行观点:
我最终为我的小型应用程序使用了不同的 insets
。
我觉得比较干净
//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);
很有魅力。