我正在尝试展示一个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]
答案 0 :(得分:0)
请阅读ComboBox
:
请务必注意,如果在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()));
}
}
});