You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:01:09