我正在尝试制作一款可以有 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/