多个JFrame实例上的相同组件

时间:2017-04-23 15:33:49

标签: java swing user-interface

我正在开发一个游戏项目。我创建了一个GUI类,我想为每个游戏玩家创建一个它的实例。因此每个玩家将拥有一个游戏画面。

某些信息将显示在特定的播放器屏幕上,有些信息会很常见。为了显示常见信息,我创建了一个静态JLabel,我在其中放置了一个图标。但我有一个问题,图标只出现在其中一个屏幕上。

为什么会这样?

1 个答案:

答案 0 :(得分:1)

简短回答:你不能。 Swing库的一个基本规则是组件只会显示在一个且只有一个容器中,通常是组件添加到的最后一个容器。

答案越长:你不想。您希望以这样一种方式构建程序,使程序的模型(其逻辑基础)与其视图(GUI本身)完全分离。因此,您要做的是让每个GUI元素共享相同的模型,并使用此信息创建自己的唯一视图。这也有优势,因为如果玩家想要以不同的视角或观点展示元素,他们可以做到这一点,而不会影响其他玩家看到的内容。

附注:请注意,可以在GUI的多个不同位置共享和查看单个ImageIcon ,因为它不是Swing组件,但JLabel无法在多个位置查看位置。

附注2:请务必阅读:The Use of Multiple JFrames: Good or Bad Practice?,因为其中包含与您的计划结构相关的信息。

附注3,关于:

  

为了显示常见信息,我创建了一个静态JLabel ...

如果可能的话,我会避免使用静态字段。虽然这在小型简单的玩具程序中可以做得很好,但由于你使用的静态字段越多,增加代码耦合的风险越大,从而增加其(圈复)复杂度,从而增加其难以治愈虫子的风险。通过隐藏您的信息,提高您的班级凝聚力和减少代码耦合来遵循良好的OOP实践,您将成为一个更干净,更容易调试和增强程序的快乐编码器。