java fx choicebox_JavaFX:具有图像和文本的ChoiceBox
我想用JavaFX ChoiceBox創建一個下拉菜單,其中每個條目都包含一個不同的圖標,旁邊是一個短文本. (例如,在語言選擇器中,左側有一個小標志,右側有該語言的名稱.)
做這個的最好方式是什么?
我試圖通過CSS做到這一點.以下內容幾乎可以使用,但是當然它將為所有條目設置相同的圖標:
#accChoiceBox .menu-item .label {
-fx-padding: 0 0 0 30px;
-fx-background-size: 20px 20px;
-fx-background-repeat: no-repeat;
-fx-background-image: url("../resources/images/icon.png");
}
所以我想我可以通過#accChoiceBox .menu-item:nth-??of-type(1).label或類似名稱給每個條目一個自己的圖標,但是我嘗試過的選擇器都沒有.
解決方法:
好的,只需使用ComboBox而不是ChoiceBox即可解決問題(謝謝James_D).網上有很多有關ComboBoxes中圖像的示例和解決方案.無論如何,我也會在這里留下我自己的.
它將僅在ComboBox icon_1.png中提供第一個條目,在第二個icon_2.png中提供第一個條目,依此類推.
comboBox.setCellFactory(new Callback, ListCell>() {
@Override
public ListCell call(ListView p) {
return new ListCell() {
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
setText(item);
if (item == null || empty) {
setGraphic(null);
} else {
Image icon;
try {
int iconNumber = this.getIndex() + 1;
String iconPath = "MyProject/resources/images/icon_" + iconNumber + ".png";
icon = new Image(getClass().getClassLoader().getResourceAsStream(iconPath));
} catch(NullPointerException ex) {
// in case the above image doesn't exist, use a default one
String iconPath = "MyProject/resources/images/icon_na.png";
icon = new Image(getClass().getClassLoader().getResourceAsStream(iconPath));
}
ImageView iconImageView = new ImageView(icon);
iconImageView.setFitHeight(30);
iconImageView.setPreserveRatio(true);
setGraphic(iconImageView);
}
}
};
}
});
標簽:javafx,css,java
來源: https://codeday.me/bug/20191027/1948402.html
總結
以上是生活随笔為你收集整理的java fx choicebox_JavaFX:具有图像和文本的ChoiceBox的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hive kerberos java_K
- 下一篇: 佳能60d最新报价(佳能60d单反多少钱