如何构建2个相同宽度的JButton实例

时间:2013-07-05 09:28:39

标签: java jbutton

我有2个按钮,一个名为btnShort,另一个名为btnLong。我希望它们具有相同的宽度,那么最佳选择是什么?

enter image description here

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 TestCode2 {

public static void main(String[] args) {

    JFrame window = new JFrame("Test2");
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.setSize(400, 200);

    // ---------------------------------------------------------------------

    GridBagLayout layout = new GridBagLayout();
    GridBagConstraints constraints = new GridBagConstraints();

    JPanel container = new JPanel(layout);
    window.add(container);

    constraints.gridy = 0;

    JButton btnShort = new JButton("Short");
    layout.setConstraints(btnShort, constraints);
    container.add(btnShort);

    constraints.gridy = 1;

    JButton btnLong = new JButton("That's a long button");
    layout.setConstraints(btnLong, constraints);
    container.add(btnLong);

    //This one won't work because button dimension is not known yet...
    //btnShort.setPreferredSize(new Dimension(btnLong.getWidth(), btnLong.getHeight()));

    // ---------------------------------------------------------------------

    window.setVisible(true);
}

}

2 个答案:

答案 0 :(得分:3)

GridBagConstraints填充属性设置为GridBagConstraints.HORIZONTAL,以便两个JButton组件在容器中占据相同的宽度

constraints.fill = GridBagConstraints.HORIZONTAL;

答案 1 :(得分:1)

使用适当的布局管理器,例如GridBagLayout及其约束......

enter image description here

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Buttons {

    public static void main(String[] args) {
        new Buttons();
    }

    public Buttons() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException ex) {
                } catch (InstantiationException ex) {
                } catch (IllegalAccessException ex) {
                } catch (UnsupportedLookAndFeelException ex) {
                }

                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }

        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridwidth = GridBagConstraints.REMAINDER;
            gbc.fill = GridBagConstraints.HORIZONTAL;

            add(new JButton("I'm a very long button"), gbc);
            add(new JButton("I'm not"), gbc);

        }

        @Override
        public Dimension getPreferredSize() {
            return new Dimension(200, 200);
        }
    }    
}