2015-04-05 72 views
0

我試圖展示2維組合框陣列(10 x 10) 並讓它代表一塊板子。 在每個組合框中,我都會選擇一個圖像。 這有效,但唯一的問題是它不顯示選定的圖像。 僅10個組合框中可能有5個組合框顯示選擇圖像。 這一直困擾着我幾天,我無法找到解決方案。 這就是代碼的樣子。 附加信息:(這是一個Gridpane內,在底部的圖片顯示它的外觀)Java:Combobox不顯示所選圖像

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]

回答

0

請閱讀ComboBox Java文檔:

需要注意的是,如果單元工廠設置在組合框上, 單元格將僅用於ListView中,該單元格顯示何時單擊組合框 。如果您還想自定義組合框 「按鈕」區域的渲染,則可以在按鈕單元格屬性中設置自定義ListCell實例 。

總之,您還需要設置combobox.setButtonCell()。但更好的選擇是在你的情況下使用ChoiceBox

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