首页 > 解决方案 > 设置JButton的大小为标签的长宽

问题描述

我正在向按钮面板添加按钮以更熟悉java.swing 类。有没有办法将 JButton 的大小设置为按钮标签的长度和宽度?

类似于将 xml 文件中的高度和宽度视图设置为wrap_contentmatch_parent。根据其内容或父级的尺寸设置视图或布局大小,而不是显式指定尺寸。

android:layout_width="wrap_content"
android:layout_height="match_parent"

有没有办法在不明确指定尺寸的情况下使用button.setPreferredSize()将 JButton 的大小设置为按钮标签的长度和宽度?

button = new JButton[buttonName.length];
    RadioButtonAction radioButtonEventO=new RadioButtonAction(); //O for operation
    buttonPanelS=new JPanel();
    buttonPanelS.setLayout(new GridLayout(4,1));
    for(int i=0; i<buttonName.length;i++){
        button[i]=new JButton(buttonName[i]);
        button[i].setMargin(new Insets(0,0,0,0));
        button[i].addActionListener(radioButtonEventO);
        //button[i].setPreferredSize();
        buttonPanelS.add(button[i]);
    }
    operationPanel.add(buttonPanelS);

标签: javaswinguser-interface

解决方案


我不是 100% 了解,但GridLayout会根据设计调整所有组件的大小以均匀地占用容器的可用空间。

这听起来更像是你所追求的是GridBagLayout......

就像是

import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Test {

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

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

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

    public class TestPane extends JPanel {

        public TestPane() {
            setLayout(new GridBagLayout());
            JButton[] button = new JButton[5];
            JPanel buttonPanelS = new JPanel();
            buttonPanelS.setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridwidth = GridBagConstraints.REMAINDER;
            for (int i = 0; i < 5; i++) {
                button[i] = new JButton(random());
                button[i].setMargin(new Insets(0, 0, 0, 0));
                buttonPanelS.add(button[i], gbc);
            }
            add(buttonPanelS);
        }

        private Random rnd = new Random();

        public String random() {
            int length = rnd.nextInt(20) + 1;
            StringBuilder sb = new StringBuilder(length);
            for (int index = 0; index < length; index++) {
                sb.append(('a' + rnd.nextInt(52)));
            }
            return sb.toString();
        }

    }

}

如果这不是您所追求的,请考虑提供图纸,以更好地说明您的问题


推荐阅读