【问题标题】:Making JButtons equal size using GridBagLayout使用 GridBagLayout 使 JButton 大小相等
【发布时间】:2017-06-10 00:11:17
【问题描述】:

我想知道是否可以在GridBagLayout 中设置JButton 组件的大小,我希望我的按钮“开始”和“退出”相互之间,我想让它们更大,大小无关紧要,我想知道一般程序。

我尝试了在 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:

【问题讨论】:

  • 如果您希望所有组件都具有相同的大小,请使用 GridLayout。请记住,您可以嵌套 JPanel,每个 JPanel 都使用自己的布局管理器。
  • GridBagConstraints#fill?
  • 这是一个只有两个按钮的大框架。需要更多的组件吗?以最小尺寸提供(整个)GUI 的预期布局的 ASCII 艺术或简单绘图,如果可调整大小,则具有更大的宽度和高度。 button1.setSize(new Dimension(200,200)); 布局管理器更可能尊重首选尺寸而不是尺寸,但也不要设置它,因为首选尺寸不会比猜测更好。
  • 你可能还想看看How to use GridBagLayout,第一个例子看起来就像它在做你想做的事

标签: java swing layout-manager


【解决方案1】:

正如 Hovercraft Full Of Eels 所述,这非常适合单个列 GridLayout。网格布局使所有组件大小相同。提供一些布局组件间距,并为包含按钮的面板添加一个较大的空边框,这样就完成了。

..我想让它们(按钮)更大

有多种方法可以使按钮变大。例如

  1. 设置更大的字体。
  2. 致电setMargin(Insets) 以在文本周围添加更多空间。
  3. 使用大图标。
  4. 使文本更长(以获得更大的宽度)。

第 3 和第 4 种方式是相当随意的。


本示例使用前两个以及按钮周围的空白边框来提供更多空白。

查看代码中的cmets了解详情。

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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-15
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    • 2014-09-17
    相关资源
    最近更新 更多