这是代码:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class TestGrid {
public static void main(String[] args) {
JFrame frame = new JFrame("Colored Trails");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(4, 9));
panel.setMaximumSize(new Dimension(9*30-20,4*30));
JButton btn;
for (int i=1; i<=4; i++) {
for (int j=1; j<=4; j++) {
btn = new JButton();
btn.setPreferredSize(new Dimension(30, 30));
panel.add(btn);
}
btn = new JButton();
btn.setPreferredSize(new Dimension(30, 10));
panel.add(btn);
for (int j=1; j<=4; j++) {
btn = new JButton();
btn.setPreferredSize(new Dimension(30, 30));
panel.add(btn);
}
}
mainPanel.add(panel);
frame.add(mainPanel);
frame.setSize(450,950);
frame.setVisible(true);
}
}
我想有一个4行9列的按钮表。中间列应该比其他列窄。我试过Dimension(30, 10)
和Dimension(30, 10)
都对中间列的宽度没有影响。为什么?
布局管理员可以自由地忽略首选大小。具体来说,GridLayout
将始终使网格中的每个单元格大小完全相同(由于这个原因,它是一个非常无用的布局管理器)。
您将不得不使用不同的布局管理器,例如嵌套的BoxLayout
或GroupLayout
。
GridLayout非常不灵活,因为每个单元格大小相同,通常表示添加到网格中的任何对象的最大高度和宽度设置。
如果行和/或列需要具有不同的大小,则应使用GridBagLayout。
在使用Dimension设置尺寸之前,setPreferredSize
不会更改按钮的大小。
例:-
Dimension dim = new Dimension(20,20), then use setPerferredSize(dim).
我找到了这个方法版本,非常适合您的解决方案:
.addComponent(<<a jButton instance>>, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, <<put here an integer to set you max width button size>>)