我遇到GridLayout
的问题,因为我知道我只需要解决我的问题:我需要这个矩阵面板(在GridLayout
中制作)不可调整大小。就像一个整个正方形,例如,在中间,不能调整大小。我做了大量的研究工作,但我找不到答案。
public class ButtonsMatrix extends JButton {
private int[][] fModel;
private int fX;
private int fY;
public ButtonsMatrix(int x, int y, int[][] model) {
fX = x;
fY = y;
fModel = model;
addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fModel[fX][fY] = fModel[fX][fY] == 1 ? 0 : 1;
updateNameFromModel();
}
});
updateNameFromModel();
}
private void updateNameFromModel() {
setText(String.valueOf(fModel[fX][fY]));
}
public static void main(String[] args) {
int dim=10;
int matrix[][] = new int[10][10];
JFrame f = new JFrame("Window containing a matrix");
JPanel p = new JPanel();
JPanel extra = new JPanel(new FlowLayout());
extra.add(p);
p.setLayout(new GridLayout(dim, dim));
for (int r = 0; r < dim; r++){
for (int c = 0; c < dim; c++){
ButtonsMatrix button= new ButtonsMatrix(r, c, matrix);
p.add(button);
}
}
f.add(p);
f.pack();
f.setVisible(true);
}
}
答案 0 :(得分:1)
将具有GridLayout
的面板放在另一个具有 GridBagLayout
的面板中。
如果它是唯一的组件并且没有添加GridBagConstraints
,它将居中并且其大小将保持不变,无论分配给具有网格包布局的面板的大小。
上面的代码将包含按钮网格布局的面板添加到main方法(具有extra
)中定义的FlowLayout
面板。这样也可以使按钮矩阵面板保持其首选大小。
代码的问题是它之后忽略了extra
面板并将p
面板(带按钮的网格布局)直接添加到JFrame
并带有(默认) BorderLayout
。这样做会导致p
面板添加到边框布局的CENTER
,这将拉伸一个组件以填充可用的宽度和高度。
要解决此问题,只需更改:
f.add(p);
要:
f.add(extra);