2017-04-23 93 views
-2

我正在开发一个游戏项目。我创建了一个GUI类,我想为每个游戏玩家创建一个实例。所以每个玩家都会有一个游戏画面。多个JFrame实例上的相同组件

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

为什么会发生这种情况?

+0

.........................你好? –

回答

1

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

较长的答案:你不想。你希望以这样一种方式来构建程序,即程序的模型及其逻辑基础与GUI本身很好地分离。所以你想要做的是让每个GUI元素共享相同的模型,并使用这些信息来创建自己独特的视图。这也具有优势,因为如果玩家想要以不同的角度或角度展示元素,他们可以做到这一点,而不会影响其他玩家看到的东西。


边注:请注意,一个的ImageIcon 可以共享,并在你的GUI的多个不同地点观看,因为它不是一个Swing组件,但JLabel的不能在多个位置进行查看。

备注2:请务必阅读:The Use of Multiple JFrames: Good or Bad Practice?,因为这包含与您的程序结构相关的信息。

附注3,关于:

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

我会避免使用静态字段,如果在所有可能的。虽然在小型简单玩具程序中这样做很好,但由于您使用的静态字段越多,增加耦合代码的风险就越大,从而增加其复杂性,从而增加其复杂性难以治愈虫子的风险。通过隐藏您的信息,提高班级凝聚力并减少代码耦合,遵循良好的面向对象操作规范,您将成为一个快乐的编码人员,使用更简洁,更易于调试和增强程序。