java - 我需要帮助概念化我的 GUI 实现

标签 java swing user-interface

我正在尝试制作一款可以有 n 名玩家的游戏。

问题是如果我不知道号码,如何为每个玩家制作一个JFrame

最初我计划为 5 个玩家制作多个框架、面板和 JButton 组件及其 Action 监听器,然后限制用户只能与 5 个玩家一起玩。但是,这仍然意味着为 5 个玩家制作 5 个选项按钮,因此 25 个按钮和 5 个框架,这看起来真的很荒谬。

我想知道是否有办法让这变得简单?我对 java 尤其是 GUI 部分真的很陌生。我想使用 Swing,而不是 JavaFX。

这就是我想要实现我的播放器的方式:

ArrayList<Players> players = new ArrayList();
gamePanel(players);

通常我会这样做

JFrame f = new JFrame(playerName);

但是如何用多个玩家对象制作多个帧呢?或者也许只是一帧根据玩家按下的按钮在玩家对象之间来回切换?基于某些获胜条件,我还想删除与玩家关联的帧,然后通过单击按钮获取更多用户输入,直到 ArrayList 中只有一个用户。我不知道如何进行这一切,我们将不胜感激!

最佳答案

最简单的方法是将您的 JFrame 对象存储在 HashMap 中。这样您就可以添加与播放器关联的新 JFrame:

HashMap<Player, JFrame> frames = new HashMap<>();
for (Player player : players) {
    JFrame frame = new JFrame(player.getName());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    // additional setup, creating buttons for the frame, ...
    frames.put(player, frame);
}

之后您可以通过调用frames.get(player);轻松访问每个帧,例如frames.get(players.get(0)).dispose(); 关闭与第一个玩家关联的框架,然后 frames.remove(players.get(0)) 删除映射。

例如,您还可以轻松地迭代所有帧

for (JFrame frame : frames.values()) {
    frame.setVisible(true);
}

要进一步阅读有关构建 GUI 的内容,我建议查看模型- View - Controller 模式。该模式对于组织模型(在您的情况下为玩家)与 View (在您的情况下为 JFrame)交互方式非常有用。

关于java - 我需要帮助概念化我的 GUI 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58912318/

相关文章:

java - SwingWorker 方法 process() 显示错误

java - 火烈鸟项目还活着吗?

在 Win32 上停止进程的最干净方法?

java - ews java api - 如何设置电子邮件的权限/分类(公共(public)/受限/内部)

java - SelectorImpl 被阻塞

java - 使用类中生成的 Hashmap ArrayList 数据在 MainActivity 的 ListView 中使用?

qt - 如何使 Qt 图标(在菜单栏和工具栏中)变大?

java - 我必须在哪个目录中放置 testng.xml?

java - 过滤 - 如何让 JTable 显示 x 数量的字段

java - 为什么 JFrame 仍然不透明?