JPanel翻出来,FlowLayout没有按预期工作

Log*_*man -1 java jlabel alignment jpanel flowlayout

前几天这段代码正在运行.我改变了一些东西并重新运行它,现在它没有按预期工作.显然我改变的行为改变了行为,但我已经回去并恢复了所有这些改变,但它仍然无效.忽略那一点信息(开始),为什么这段代码不会在JPanel中放置一个15x15的JLabel网格?

gameBoard.setLayout(new FlowLayout());

for (int i = 0; i < 15; i++)
{
    for (int j = 0; j < 15; j++)
    {
        JLabel tile = new JLabel("");                       
     tile.setHorizontalAlignment(SwingConstants.CENTER);
        tile.setPreferredSize(new Dimension(27, 27));
        tile.setBorder(new EtchedBorder());
        tile.setEnabled(false);

        gameBoard.add(tile);
    }
}
Run Code Online (Sandbox Code Playgroud)

gameBoard是通过NetBeans的GUI Builder定义的JPanel.它具有优选的尺寸,最大尺寸(与优选相同).水平/垂直可调整大小的选项被禁用,但是当此代码运行时,每个按钮水平延伸一行而不会断开.

如果我理解正确,FlowLayout应该在元素到达其包含元素的末尾时将其包装起来.这发生在今天之前,我真的不知道为什么这种行为停止了?

Poo*_*ool 5

使用GridLayout会好得多.

GridLayout gridLayout = new GridLayout(15, 15);
Run Code Online (Sandbox Code Playgroud)

由于使用了新的外观,不同的字体或某些Java VM升级,流布局可能已更改.建议不要为此用途定义流布局,因为您依赖于可能因虚拟机或外观而异的基础大小.