Java 将JButton的大小设置为标签的长度和宽度

Java 将JButton的大小设置为标签的长度和宽度,java,swing,user-interface,Java,Swing,User Interface,我正在将按钮添加到按钮面板中,以便更熟悉java.swing类。有没有办法将JButton的大小设置为按钮标签的长度和宽度 类似于将xml文件中的“高度”和“宽度”视图设置为“包裹内容”或“匹配父对象”。根据其内容或父对象的维度设置视图或布局大小,而不是显式指定维度 android:layout_width="wrap_content" android:layout_height="match_parent" 是否有一种方法可以使用button.setPreferredSize()将JButt

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

类似于将xml文件中的“高度”和“宽度”视图设置为“包裹内容”
或“匹配父对象”。根据其内容或父对象的维度设置视图或布局大小,而不是显式指定维度

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);
button=newjbutton[buttonName.length];
RadioButtonAction radioButtonEventO=新RadioButtonAction()//O用于操作
buttonPanelS=新的JPanel();
设置布局(新的网格布局(4,1));

对于(int i=0;i我不是100%了解,但是
GridLayout
将根据设计,调整所有组件的大小,以均匀地占用容器的可用空间

这听起来更像是你想要的
GridBagLayout

导入java.awt.EventQueue;
导入java.awt.GridBagConstraints;
导入java.awt.GridBagLayout;
导入java.awt.Insets;
导入java.util.Random;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.UIManager;
导入javax.swing.UnsupportedLookAndFeelException;
公开课考试{
公共静态void main(字符串[]args){
新测试();
}
公开考试(){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(ClassNotFoundException |实例化Exception | IllegalacessException |不支持ookandfeelException ex){
例如printStackTrace();
}
JFrame=新JFrame(“测试”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(newtestpane());
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
});
}
公共类TestPane扩展了JPanel{
公共测试窗格(){
setLayout(新的GridBagLayout());
JButton[]按钮=新JButton[5];
JPanel buttonPanelS=新的JPanel();
setLayout(新的GridBagLayout());
GridBagConstraints gbc=新的GridBagConstraints();
gbc.gridwidth=GridBagConstraints.rements;
对于(int i=0;i<5;i++){
按钮[i]=新的JButton(random());
按钮[i].setMargin(新的插图(0,0,0,0));
按钮面板添加(按钮[i],gbc);
}
添加(按钮面板);
}
私有随机rnd=新随机();
公共字符串random(){
int length=rnd.nextInt(20)+1;
StringBuilder sb=新StringBuilder(长度);
for(int index=0;index

如果这不是你所追求的,那么请考虑提供一张图,以更好地说明你的问题

< P> >我不是100%,我理解,但是<代码> GridLayout <代码>将按设计使所有组件的大小均匀地占据容器的可用空间。

这听起来更像是你想要的
GridBagLayout

导入java.awt.EventQueue;
导入java.awt.GridBagConstraints;
导入java.awt.GridBagLayout;
导入java.awt.Insets;
导入java.util.Random;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.UIManager;
导入javax.swing.UnsupportedLookAndFeelException;
公开课考试{
公共静态void main(字符串[]args){
新测试();
}
公开考试(){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}catch(ClassNotFoundException |实例化Exception | IllegalacessException |不支持ookandfeelException ex){
例如printStackTrace();
}
JFrame=新JFrame(“测试”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(newtestpane());
frame.pack();
frame.setLocationRelativeTo(空);
frame.setVisible(true);
}
});
}
公共类TestPane扩展了JPanel{
公共测试窗格(){
setLayout(新的GridBagLayout());
JButton[]按钮=新JButton[5];
JPanel buttonPanelS=新的JPanel();
setLayout(新的GridBagLayout());
GridBagConstraints gbc=新的GridBagConstraints();
gbc.gridwidth=GridBagConstraints.rements;
对于(int i=0;i<5;i++){
按钮[i]=新的JButton(random());
按钮[i].setMargin(新的插图(0,0,0,0));
按钮面板添加(按钮[i],gbc);
}
添加(按钮面板);
}
私有随机rnd=新随机();
公共字符串random(){
int length=rnd.nextInt(20)+1;
StringBuilder sb=新StringBuilder(长度);
for(int index=0;index
如果这不是你所追求的,那么请考虑提供一张图纸,以更好地说明你的情况。
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();
        }

    }

}