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



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

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

最初,我计划为5名玩家制作多个框架、面板和JButton组件及其动作监听器,然后限制用户只能使用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的内容,我建议您看看模型-视图-控制器模式。该模式对于组织模型(在您的情况下是播放器(与视图(在您情况下是JFrame(的交互非常有用。

最新更新