我正在尝试为 LARP 游戏设置角色管理器。在游戏中,一个角色可以拥有多个角色(1 个或 2 个)。我想使用两个组合框来生成角色,这两个组合框都来自同一个enum
名为Role
. 这本身很容易:
JComboBox roleFirstComboBox = new JComboBox(IPlayerCharacter.Role.values());
JComboBox roleSeondComboBox = new JComboBox(IPlayerCharacter.Role.values());
除非说我们的角色是:Coder, Programmer, SysAdmin, Nerdfighter
您可以成为Coder/Coder
. 所以第二个框需要排除在第一个框中选择的任何内容。
One thought I had was making a function to pass the enums to a List of some sort and then when one JComboBox is picked, it uses one of the standard container methods to find the asynchronous union(?) everything in Box2 that isn't in框 1。这看起来很可怕。我知道该解决方案使用JComboBoxModel,但我不知道如何使其适应我的枚举。
获得这种功能的最佳方法是什么?
编辑:
这是我目前正在使用的代码,它只存在于我的窗格中,所以我认为它不再需要上下文。让我知道,如果需要的话。
创建组合框
JComboBox roleFirstComboBox = null;
JComboBox roleSecondComboBox = null;
...
roleFirstComboBox = new JComboBox(IPlayerCharacter.Role.values());
roleSecondComboBox = new JComboBox(IPlayerCharacter.Role.values());
添加一个动作监听器:
roleFirstComboBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
roleSecondComboBox.removeAll();
roleSecondComboBox.addItem(null);
for (Role role : IPlayerCharacter.Role.values()) {
if (role != roleFirstComboBox.getSelectedItem()) {
roleSecondComboBox.addItem(role);
}
}
}
});
roleFirstComboBox.setSelectedIndex(0);
将其添加到 groupLayout:
.addComponent(roleFirstComboBox)
.addComponent(roleSecondComboBox))
最后的外观和错误:
这有帮助吗?