java - GridLayout 中的按钮,不可调整大小

标签 java swing layout-manager grid-layout

我对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);
    }
}

最佳答案

将带有 GridLayout 的面板放入另一个带有 GridBagLayout 的面板中。

如果它是唯一的组件并且在添加时没有添加 GridBagConstraints,则它将居中且其大小将保持不变,无论分配给具有网格包布局的面板的大小如何。

编辑

上面的代码将包含按钮网格布局的面板添加到 main 方法中定义的 extra 面板(该面板具有 FlowLayout)。这可以使按钮矩阵面板保持其首选尺寸。

代码的问题在于,它随后会忽略 extra 面板,并将 p 面板(带有按钮的网格布局)直接添加到 JFrame 与(默认)BorderLayout。这样做会导致 p 面板被添加到边框布局的 CENTER,这将拉伸(stretch)组件以填充可用的宽度和高度。

要解决这个问题,只需更改:

f.add(p);

致:

f.add(extra);

关于java - GridLayout 中的按钮,不可调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50543857/

相关文章:

java - IssuableSubscriptionVisitor 和 BaseTreeVisitor

Java JLabel 和 JTextField 定位

Java Swing 为什么对齐有时只起作用?

java - 我正在尝试使用 servlet 在文本文件中附加文本,这会出现错误

java - Apache Tika - MIME(内容类型)检测不正确

java - 离开 Activity 时如何停止应用程序的振动?

java - 在 MATLAB for Mac 中启用选项键快捷键

java - JFrame DO_NOTHING_ON_CLOSE 不适用于 Command + Q

java - 将 Arraylist 导入到 JTable

Java Swing GridBagLayout() 跨越对象 3 行不起作用