前几天这段代码正常运作。我改变了一些东西并重新运行它,现在它没有按预期工作。显然我改变的行为改变了行为,但我已经回去并恢复了所有这些改变,但它仍然无效。忽略那一点信息(开始),为什么这段代码不会在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应该在元素到达其包含元素的末尾时将其包装起来。这是在今天之前发生的,我真的不知道为什么这种行为会停止?
答案 0 :(得分:5)
使用GridLayout。
会好得多GridLayout gridLayout = new GridLayout(15, 15);
由于使用了新的外观,不同的字体或某些Java VM升级,流布局可能已更改。建议不要为此用途定义流布局,因为您依赖于可能因虚拟机或外观而异的基础大小。
答案 1 :(得分:3)
为了教男人如何钓鱼:
修订控制系统很棒。甚至你的系统也会频繁地备份你的资源。
一种有用的调试技术是将事物带走,直到它发挥作用。设置边框会导致代码中断。另一方面,你能编写一个简单的程序来证明这个问题。
答案 2 :(得分:0)
我发现使用TableLayout取得了巨大的成功和控制,我会向任何人推荐它。您可以使用特定的像素数定义列和行,也可以对每列和/或行使用TableLayout.PREFERRED
。非常漂亮和灵活的布局。我们到处使用它。
答案 3 :(得分:-1)
我明白了。显然我必须在代码本身中设置preferredSize。仅在Netbeans属性窗口中设置它是不够的。奇怪。