-1

前几天这段代码正在工作。我改变了一些东西并重新运行它,现在它不能按预期工作。显然,我更改的某些内容改变了行为,但我已经返回并恢复了所有这些更改,但它仍然不起作用。忽略那一点信息(开始),为什么这段代码没有在 JPanel 内放置一个 15x15 的 JLabels 网格?

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

4 回答 4

5

使用GridLayout会好得多。

GridLayout gridLayout = new GridLayout(15, 15);

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

于 2009-05-02T16:58:33.573 回答
3

为了教一个人如何钓鱼:

修订控制系统很棒。甚至您的系统也在频繁地备份您的源。

一种有用的调试技术是在它起作用之前删除一些东西。设置边框是否会导致代码中断。换一种方式,你能不能写一个简单的程序来演示这个问题。

于 2009-05-02T17:54:30.130 回答
0

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

于 2009-05-02T17:18:22.417 回答
-1

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

于 2009-05-02T18:00:57.183 回答