我很累,但在退出之前,我只是停留在下面代码片段的最后 3 行,在我的 tictactoe 面板上创建一个“刷新”按钮,希望摆脱它,但预计会出现错误,因为它混合了布局管理器在单个容器上。
但它确实有效。
ButtonPanel.setLayout(new GridLayout(3, 3));
guiFrame.add(ButtonPanel);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
button[i][j] = addButton(ButtonPanel, i, j);
}
}
JButton refreshbutton = new JButton("Refresh");
guiFrame.add(refreshbutton, BorderLayout.SOUTH); // ... border layout worked. Hm.
refreshbutton.addActionListener(this);
guiFrame.setVisible(true); }
我应该感到惊讶吗? (请记住我是新手。)
(男孩,我在编写这个愚蠢的游戏程序时是否学到/偶然发现了一些东西!!! - 例如,使用 setActionCommand
来“标记”每个按钮内部 [如 11,12,13,21,...33],因此 ONE actionPerformed
方法可以使用 getActionCommand
正确标记 [用 X 或 O] 任何按钮被轮到的人插入。)
最佳答案
guiFrame.add(refreshbutton, BorderLayout.SOUTH); // ... border layout worked. Hm.
仅仅因为您使用了 BorderLayout.SOUTH 并不会使面板成为 BorderLayout。您的代码之所以有效,是因为 JFrame (JDialog) 内容 Pane 的默认布局管理器是 BorderLayout。所以您只是利用默认布局。
since it mixes layout managers on a single container.
是的,这是一种常见的做法。事实上,如果不在添加到 GUI 的不同面板上使用不同的布局管理器,则几乎不可能创建相当复杂的 GUI。
关于java - 混合网格布局和边框布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19016809/