2015-05-29 83 views
0

我想为游戏中的用户创建选项以从我制作的棋子列表中选择自己的棋子来玩。要做到这一点,我有两个组合框,其中包含相同的项目,但我不希望用户能够选择相同的一块。在组合框中隐藏选项java swing

我想过如果在comboBox2中选择了comboBox 1(以及稍后添加它),但我在稍后将选定项目的索引指定给'player'类时,因此这个会在那里变得混乱,并且每个列表的索引也会不同,因为它们不包含其他人选择的项目(希望是有道理的)。

如何使组合框2中的项目隐藏或不可选,如果它在组合框1中被选中?

非常感谢

+0

将这件作品的所有信息都汇总成某种类型的POJO,将其作为组合框内的项目,然后该索引无关紧要 – MadProgrammer

回答

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); 

你会发现,你可能需要为了在中显示Piece的名称,某种ListCellRenderer 10,如...

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()); 

现在,你不需要关心indecies,因为你已经建立了两个模型从Pieces相同的数组,你应该没有问题,简单地通过参看删除它们......

Piece p = (Piece)cbPlayer1.getSelectedItem(); 
((DefaultComboBoxModel)cbPlayer2.getModel()).removeElement(p); 

How to Use Combo Boxes更多细节

+0

重复项(仅)可以(直接)与POJO一起使用 – mKorbel