Java:Combobox不显示所选图像

时间:2015-04-05 23:28:04

标签: java image combobox javafx

我正在尝试展示一个2维ComboBox-Array(10 x 10) 并让它代表一个董事会。 在每个组合框中,我都会选择一个图像。 这有效但唯一的问题是它不显示所选图像。 仅在10个组合框中有5个显示选择图像。 这困扰了我好几天,我找不到解决方案。 这就是代码的样子。 附加信息:(它在Gridpane中,底部的图片显示它的外观)

for(int i = 0;i<(comboboxarray.length)*8;i=i+8)
    {
        for(int j = 0;j<comboboxarray[i/8].length;j++)
        {
            ComboBox box = new ComboBox(objectenlist);
            box.setItems(objectenlist);
            box.setPrefSize(50, 50);
            box.getSelectionModel().select(1);
            box.setCellFactory(
        new Callback<ListView<ImageView>, ListCell<ImageView>>() 
        {
            @Override public ListCell<ImageView> call(ListView<ImageView> param) 
            {
                final ListCell<ImageView> cell = new ListCell<ImageView>() 
                {
                    {
                        super.setPrefWidth(USE_PREF_SIZE);
                    }    
                            @Override public void updateItem(ImageView item, 
                                boolean empty) 
                                    {
                                            super.updateItem(item, empty);
                                                        if (item != null) 
                                                        {

                                                            switch (item.getId()) {
                                                                case "MUUR":
                                                                    setGraphic(new ImageView(new Image(getClass().getResourceAsStream("/gui/images/Muur.png"))));
                                                                    break;
                                                                case "EMPTY":
                                                                    setGraphic(new ImageView(new Image(getClass().getResourceAsStream("/gui/images/empty.png"))));
                                                                    break;
                                                                case "DOEL":
                                                                    setGraphic(new ImageView(new Image(getClass().getResourceAsStream("/gui/images/VELDDOEL.png"))));
                                                                    break;
                                                                case "VELD":
                                                                    setGraphic(new ImageView(new Image(getClass().getResourceAsStream("/gui/images/VELD.png"))));
                                                                    break;
                                                                case "KIST":
                                                                    setGraphic(new ImageView(new Image(getClass().getResourceAsStream("/gui/images/KIST.png"))));
                                                                    break;
                                                                case "START":
                                                                    setGraphic(new ImageView(new Image(getClass().getResourceAsStream("/gui/images/START.png"))));
                                                                    break;
                                                            }

                                                        }else{
                                                            setGraphic(new ImageView(new Image(getClass().getResourceAsStream("/gui/images/empty.png"))));

                                                        }
                                    }
                            };
                            return cell;
                        }
                    });
            comboboxarray[i/8][j] = box;

           add(comboboxarray[i/8][j],i , j, 8, 1);

        }
    }

![示例] [1]

2 个答案:

答案 0 :(得分:0)

请阅读ComboBox

的Java文档
  

请务必注意,如果在ComboBox上设置了单元工厂,   单元格将仅用于显示ComboBox时的ListView   点击。如果你还想自定义渲染   &#39;按钮&#39;在ComboBox的区域中,您可以设置自定义ListCell实例   在按钮单元属性中。

简而言之,您还需要设置combobox.setButtonCell()。但是,更好的选择是在您的情况下使用ChoiceBox

答案 1 :(得分:0)

感谢您的黄金建议。 添加此代码为我解决了这个问题!

box.setButtonCell(new ListCell<ImageView>() 
            {
                    @Override protected void updateItem(ImageView item, boolean empty) 
                    {
                      super.updateItem(item, empty);
                      if (item == null || empty) {
                        setGraphic(null);
                      } else {
                        setGraphic(new ImageView(item.getImage()));
                      }
                    }
              });