我想为游戏中的用户创建一个选项,从我自己创作的作品列表中选择自己的作品。要做到这一点,我有两个comboBox包含相同的项目,但我不希望用户能够选择相同的一块。
如果在comboBox2中选中(并稍后再添加),我已经考虑过从comboBox 1中删除该项目,但是当我将图像分配给'播放器时,我正在使用所选项目的索引。类,所以这会变得混乱,每个列表的索引也会有所不同,因为它们不包含对方选择的项目(希望有意义)。
如果在comboBox 1中选中了隐藏或不可选择的项目,如何在comboBox 2中选项?
非常感谢
答案 0 :(得分:1)
创建POJO,代表Piece
...
public class Piece {
private Image image;
private String name;
public Piece(String name, Image image) {
this.image = image;
this.name = name;
}
public Image getImage() {
return image;
}
public String getName() {
return name;
}
}
将这些内容添加到您的JComboBox
Piece[] pieces = new Piece[]{
// Create what ever pieces you need...
}
DefaultComboBoxModel modelPlayer1 = new DefaultComboBoxModel(pieces);
DefaultComboBoxModel modelPlayer2 = new DefaultComboBoxModel(pieces);
JComboBox cbPlayer1 = new JComboBox(modelPlayer1);
JComboBox cbPlayer2 = new JComboBox(modelPlayer2);
您会发现某些ListCellRenderer
可能需要显示Piece
中JComboBox
的名称,例如......
public class PieceListCellRenderer extends DefaultListCellRenderer {
@Override
public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
if (value instanceof Piece) {
value = ((Piece)value).getName();
}
return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
}
}
然后将渲染器应用于组合框
cbPlayer1.setRenderer(new PieceListCellRenderer());
cbPlayer2.setRenderer(new PieceListCellRenderer());
现在,您不需要关心这些内容,并且因为您已经从同一个Pieces
数组中构建了这两个模型,所以您只需通过引用删除它们即可。 ..
Piece p = (Piece)cbPlayer1.getSelectedItem();
((DefaultComboBoxModel)cbPlayer2.getModel()).removeElement(p);
有关详细信息,请参阅How to Use Combo Boxes