java - 设置JButton的大小为标签的长宽
问题描述
我正在向按钮面板添加按钮以更熟悉java.swing 类。有没有办法将 JButton 的大小设置为按钮标签的长度和宽度?
类似于将 xml 文件中的高度和宽度视图设置为wrap_content或match_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);
解决方案
我不是 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();
}
}
}
如果这不是您所追求的,请考虑提供图纸,以更好地说明您的问题
推荐阅读
- android - android:button="@null" 不适用于较低的 API <= 19 设备
- qt - 如何从 qtquick 控件 2.3 自定义 ScrollView
- javascript - 我想在javascript中画一个圆圈
- python - 无法在 Windows 上安装正确版本的 mysql(8.0.13)
- laravel - 实时服务器上的 Laravel 队列中断在本地运行良好
- r - 如何根据前一行过滤行并使用 dplyr 保留前一行?
- r - 从 shell 执行多行 R 表达式(带缩进)
- python-sphinx - 仅侧边栏中的 Sphinx 目录树
- php - 如何制作包含活动的每周日历
- opencv - 什么以及如何在 OpenCV 下运行测试