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

时间:2009-05-02 16:55:18

标签: java alignment jpanel jlabel 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);
    }
}

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

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

4 个答案:

答案 0 :(得分:5)

使用GridLayout

会好得多
GridLayout gridLayout = new GridLayout(15, 15);

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

答案 1 :(得分:3)

为了教男人如何钓鱼:

修订控制系统很棒。甚至你的系统也会频繁地备份你的资源。

一种有用的调试技术是将事物带走,直到它发挥作用。设置边框会导致代码中断。另一方面,你能编写一个简单的程序来证明这个问题。

答案 2 :(得分:0)

我发现使用TableLayout取得了巨大的成功和控制,我会向任何人推荐它。您可以使用特定的像素数定义列和行,也可以对每列和/或行使用TableLayout.PREFERRED。非常漂亮和灵活的布局。我们到处使用它。

答案 3 :(得分:-1)

我明白了。显然我必须在代码本身中设置preferredSize。仅在Netbeans属性窗口中设置它是不够的。奇怪。