使用 GridBagLayout 使 JButtons 大小相等
Making JButtons equal size using GridBagLayout
我想知道是否可以在 GridBagLayout
中设置 JButton
组件的大小,我想要每个按钮中的按钮 "Start" 和 "Quit"其他的,我想把它们做大,大小无关,我想知道大概的步骤。
我尝试了在 Internet 上找到的不同内容(使用其他布局),但最终以更多错误告终。
public class Display implements Runnable
{
public Display()
{
}
@Override
public void run() {
JFrame frame = new JFrame();
frame.setTitle("Title");
frame.setPreferredSize(new Dimension(500,700));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
createComponents(frame.getContentPane());
frame.pack();
frame.setVisible(true);
}
private void createComponents(Container cont)
{
GridBagLayout pane = new GridBagLayout();
JButton button1 = new JButton("Start");
JButton button2 = new JButton("Quit");
button1.setSize(new Dimension(200,200));
button1.setAlignmentX(Component.CENTER_ALIGNMENT);
button2.setAlignmentX(Component.CENTER_ALIGNMENT);
cont.setLayout(pane);
cont.add(button1);
cont.add(button2);
}
public static void main(String[] args)
{
Display d = new Display();
SwingUtilities.invokeLater(d);
}
}
How it should look:
正如 Hovercraft Full Of Eels 所述,这非常适合单列 GridLayout
。网格布局使所有组件大小相同。提供一些布局组件间距并向包含按钮的面板添加一个较大的空边框,工作就完成了。
..and I want to make them (buttons) bigger
有多种方法可以使按钮变大。例如
- 设置更大的字体。
- 调用
setMargin(Insets)
以在文本周围添加更多 space。
- 使用大图标。
- 使文本更长(以增加宽度)。
第三种和第四种方式比较随意。
此示例使用前两个以及按钮周围的空边框以进一步提供 white-space。
查看代码中的注释了解详情。
import java.awt.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
public class ButtonColumnLayout {
private JComponent ui = null;
String[] labels = {"Start", "Stop", "Quit"};
// adjust numbers to change spacing between button text and button edge
Insets insets = new Insets(10,40,10,40);
ButtonColumnLayout() {
initUI();
}
public void initUI() {
if (ui!=null) return;
// adjust last two numbers to change spacing between buttons
ui = new JPanel(new GridLayout(0, 1, 10, 10));
// adjust numbers to change border around buttons
ui.setBorder(new EmptyBorder(40,100,40,100));
for (String s : labels) {
ui.add(getBigButton(s));
}
}
private final JButton getBigButton(String text) {
JButton b = new JButton(text);
// adjust float value to change font size
b.setFont(b.getFont().deriveFont(25f));
b.setMargin(insets);
return b;
}
public JComponent getUI() {
return ui;
}
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception useDefault) {
}
ButtonColumnLayout o = new ButtonColumnLayout();
JFrame f = new JFrame(o.getClass().getSimpleName());
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setLocationByPlatform(true);
f.setContentPane(o.getUI());
f.pack();
f.setMinimumSize(f.getSize());
f.setVisible(true);
}
};
SwingUtilities.invokeLater(r);
}
}
我想知道是否可以在 GridBagLayout
中设置 JButton
组件的大小,我想要每个按钮中的按钮 "Start" 和 "Quit"其他的,我想把它们做大,大小无关,我想知道大概的步骤。
我尝试了在 Internet 上找到的不同内容(使用其他布局),但最终以更多错误告终。
public class Display implements Runnable
{
public Display()
{
}
@Override
public void run() {
JFrame frame = new JFrame();
frame.setTitle("Title");
frame.setPreferredSize(new Dimension(500,700));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
createComponents(frame.getContentPane());
frame.pack();
frame.setVisible(true);
}
private void createComponents(Container cont)
{
GridBagLayout pane = new GridBagLayout();
JButton button1 = new JButton("Start");
JButton button2 = new JButton("Quit");
button1.setSize(new Dimension(200,200));
button1.setAlignmentX(Component.CENTER_ALIGNMENT);
button2.setAlignmentX(Component.CENTER_ALIGNMENT);
cont.setLayout(pane);
cont.add(button1);
cont.add(button2);
}
public static void main(String[] args)
{
Display d = new Display();
SwingUtilities.invokeLater(d);
}
}
How it should look:
正如 Hovercraft Full Of Eels 所述,这非常适合单列 GridLayout
。网格布局使所有组件大小相同。提供一些布局组件间距并向包含按钮的面板添加一个较大的空边框,工作就完成了。
..and I want to make them (buttons) bigger
有多种方法可以使按钮变大。例如
- 设置更大的字体。
- 调用
setMargin(Insets)
以在文本周围添加更多 space。 - 使用大图标。
- 使文本更长(以增加宽度)。
第三种和第四种方式比较随意。
此示例使用前两个以及按钮周围的空边框以进一步提供 white-space。
查看代码中的注释了解详情。
import java.awt.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
public class ButtonColumnLayout {
private JComponent ui = null;
String[] labels = {"Start", "Stop", "Quit"};
// adjust numbers to change spacing between button text and button edge
Insets insets = new Insets(10,40,10,40);
ButtonColumnLayout() {
initUI();
}
public void initUI() {
if (ui!=null) return;
// adjust last two numbers to change spacing between buttons
ui = new JPanel(new GridLayout(0, 1, 10, 10));
// adjust numbers to change border around buttons
ui.setBorder(new EmptyBorder(40,100,40,100));
for (String s : labels) {
ui.add(getBigButton(s));
}
}
private final JButton getBigButton(String text) {
JButton b = new JButton(text);
// adjust float value to change font size
b.setFont(b.getFont().deriveFont(25f));
b.setMargin(insets);
return b;
}
public JComponent getUI() {
return ui;
}
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception useDefault) {
}
ButtonColumnLayout o = new ButtonColumnLayout();
JFrame f = new JFrame(o.getClass().getSimpleName());
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setLocationByPlatform(true);
f.setContentPane(o.getUI());
f.pack();
f.setMinimumSize(f.getSize());
f.setVisible(true);
}
};
SwingUtilities.invokeLater(r);
}
}