我正在创建一个游戏,其中每个玩家填充一个 3x3 网格,并且他们都有不同的网格状态(玩家对象有一个实例变量作为网格,网格由许多 JPanel
s).
我在左侧和右侧显示了玩家的 JList
。当我点击列表中的玩家名称时,有没有办法动态更改网格?
(我尝试做一个 for
循环来在每次选择玩家时更新网格但是如果玩家在他被选中后更新网格,更新网格会变得很麻烦,即你有使列表获得焦点等。所以我正在寻找一种干净的方法)
编辑:此外,我考虑过动态更改对象的引用并更新 UI,但是我有一些操作事件强制我将变量设置为 FINAL。所以我也无法这样做。
最佳答案
您不应在选择更改时更改网格。您应该更改网格显示的数据(即网格的数据模型)。例如,假设网格是一个包含 9 个标签的面板,每个标签显示 String[][]
的一个元素。您的 Grid
对象应该有一个 setModel(String[][] data)
来更改网格中每个标签的值。
每次玩家选择发生变化时,您应该向所选玩家询问其数据,并在网格上调用setData()
。如果玩家的数据在被删除时可以改变,你也应该在每次改变时调用 setData() 。这可以通过 Player
在其数据更改时触发 PropertyChangeEvent
来完成,如果触发事件的播放器是选定的球员。
关于java - 动态替换特定的 GUI 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8634870/