如何使GridLayout实现的按钮矩阵面板不可调整大小?
解决GridLayout矩阵面板固定尺寸并居中的问题
嘿,我完全懂你的需求——就是要让用GridLayout做出来的矩阵面板固定大小,整体在窗口里居中,还不能被用户调整尺寸对吧?我来帮你搞定这个问题,其实只需要几个关键修改就能实现:
核心修改思路
- 锁定窗口尺寸:调用
JFrame的setResizable(false)方法,直接禁止用户拖动调整窗口大小,这样矩阵的尺寸自然就固定住了。 - 实现面板居中:利用JFrame默认的
BorderLayout布局,把矩阵面板放到中央位置,再配合pack()让窗口大小刚好适配矩阵内容,不会出现拉伸或多余空白。 - 简化冗余结构:你代码里的
extra面板没起到实际作用,直接删掉让结构更清爽。
修改后的完整代码
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; 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"); // 新增:关闭窗口时正常退出程序 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel p = new JPanel(); 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); } } // 把矩阵面板放到窗口中央(BorderLayout.CENTER会自动适配内容并居中) f.add(p, BorderLayout.CENTER); // 让窗口大小适配矩阵内容 f.pack(); // 关键:禁止调整窗口大小,固定矩阵尺寸 f.setResizable(false); // 新增:让窗口在屏幕中央打开 f.setLocationRelativeTo(null); f.setVisible(true); } }
额外优化说明
- 我加了
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE),避免关闭窗口后程序在后台残留; - 新增
f.setLocationRelativeTo(null),让窗口直接在屏幕中央弹出,体验更友好。
这样修改后,你的矩阵面板就会固定大小、居中显示,而且用户完全没法调整窗口尺寸啦!
内容的提问来源于stack exchange,提问作者Bagdan
相关产品推荐
相关产品推荐

