使用GridBagLayout使JButton的大小相等

时间:2017-01-24 23:46:16

标签: java swing layout-manager

我想知道是否可以在JButton中设置GridBagLayout组件的大小,我想要按钮"开始"和"退出"彼此之间,我想让它们更大,尺寸无关紧要,我想知道一般程序。

我尝试了在互联网上找到的不同的东西(使用其他布局),但结果却出现了更多的错误。

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:

1 个答案:

答案 0 :(得分:2)

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

  

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

有许多方法可以使按钮更大。例如

  1. 设置较大的字体。
  2. 致电setMargin(Insets)以在文字周围添加更多空间。
  3. 使用大图标。
  4. 使文字更长(更宽)。
  5. 第3和第4种方式非常武断。

    此示例使用前两个,以及按钮周围的空边框,以提供更多的空白区域。

    enter image description here

    检查代码中的注释以获取详细信息。

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