1

嘿,我做了 3 个 for 循环来创建 3 个不同的 JButtons 数组。然后我将其放入Gridlayout。左侧和右侧都很好,但中心只会填满面板。

这是我右侧的代码:

        rightPanel = new JPanel();
    rightPanel.setLayout(new GridLayout(12, 4, 5, 5));
    rightPanel.setBorder(new EmptyBorder(10 ,10 ,10 ,10));


    for (int a = 0; a < 12; a++) {
        for (int b = 0; b < 4; b++) {
            battons[b][a] = new feedbackKnop.RechterKnop();
            battons[b][a].setPreferredSize(new Dimension(50, 50));
            rightPanel.add(battons[b][a]);
            battons[b][a].setEnabled(false);
        }
    }

这是我的中心代码:

        btnPanel = new JPanel();
    btnPanel.setLayout(new GridLayout(12, 4, 5, 5));
    btnPanel.setBorder(new EmptyBorder(10 ,10 ,10 ,10));

    for (int i = 0; i < 12; i++) {
        for (int j = 0; j < 4; j++) {
            buttons[j][i] = new KleurenButton("");
            buttons[j][i].setPreferredSize(new Dimension (50, 50));
            btnPanel.add(buttons[j][i]);
            buttons[j][i].setEnabled(false);

        }

    }

我希望它的大小像右侧的圆圈

结果:

结果

4

2 回答 2

1

GridLayout 使所有网格大小相同,BorderLayout 扩展中心以填充窗口。要解决此问题,您需要强制固定窗口大小(或以特定纵横比),或者选择不会自动扩展其组件的不同布局。 GroupLayout非常流行。

于 2013-03-12T21:48:49.623 回答
1

正如评论者所建议的,这是 BorderLayout 的问题。BorderLayout 有一个“贪婪”的 CENTER 面板,这意味着默认情况下它会将其中的任何 JComponent 拉伸到整个大小。这与将使用preferredSize 的边界(NORTH、SOUTH 等)不同。这就是为什么您的左右面板没有拉伸的原因。

一个简单的解决方案(不对布局进行重大更改)可能是将 JPanel 添加到中心,给它一个 FlowLayout,然后将您的中心网格面板添加到其中。这并不理想,但可能是一种快速制作视图原型的方法。

于 2013-03-12T21:59:30.750 回答