java - 混合网格布局和边框布局

标签 java swing layout-manager grid-layout border-layout

我很累,但在退出之前,我只是停留在下面代码片段的最后 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/

相关文章:

java - 搜索功能不起作用

java - Swing JDialog 的内容 Pane 在执行幻灯片时未更新

java - GridBagLayout 不应用网格更改

java - 在 GroupLayout 中创建页脚

java - 具有可调整大小和固定大小标签的 Swing 布局

java - 选择 ListView 项目后应用程序自动关闭

java - scala:从 java 创建元组?

Java IO 文件前缀字符串太短 - 但事实并非如此

java - 在 java 面板上绘图 - 没有出现任何内容

java - Tomcat 更新事件