隐藏comboBox java swing中的选项

时间:2015-05-29 07:49:07

标签: java swing duplicates jcombobox

我想为游戏中的用户创建一个选项,从我自己创作的作品列表中选择自己的作品。要做到这一点,我有两个comboBox包含相同的项目,但我不希望用户能够选择相同的一块。

如果在comboBox2中选中(并稍后再添加),我已经考虑过从comboBox 1中删除该项目,但是当我将图像分配给'播放器时,我正在使用所选项目的索引。类,所以这会变得混乱,每个列表的索引也会有所不同,因为它们不包含对方选择的项目(希望有意义)。

如果在comboBox 1中选中了隐藏或不可选择的项目,如何在comboBox 2中选项?

非常感谢

1 个答案:

答案 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可能需要显示PieceJComboBox的名称,例如......

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