我正在扩展ComboBox并尝试自定义按钮图形,以便根据是否已选择列表中的项目显示已选中/未选中状态。默认情况下没有选择任何值,所以它只显示提示文本,我想它显示“未选中”图形,但我似乎无法获得任何类型的图形直到用户选择了一个值,这样会破坏图形的目的...
public class ComponentComboBox extends ComboBox<String> {
String promptText;
boolean promptAsPrefix = true; // keeps the prompt as a prefix to the selected item
final ImageView checked = new ImageView( new Image( Main.actions.getClass().getResourceAsStream( "res/checked.png" ) ) );
final ImageView unchecked = new ImageView( new Image( Main.actions.getClass().getResourceAsStream( "res/unchecked.png" ) ) );
public ComponentComboBox( String promptText, boolean promptAsPrefix, int maxWidth ) {
init( promptText, promptAsPrefix, maxWidth );
}
private void init( final String promptText, final boolean promptAsPrefix, int maxWidth ) {
this.promptText = promptText;
this.promptAsPrefix = promptAsPrefix;
setPromptText( promptText );
setMaxWidth( maxWidth );
setPrefWidth( maxWidth );
Callback<ListView<String>,ListCell<String>> cb = new Callback<ListView<String>,ListCell<String>>() {
@Override public ListCell<String> call( ListView<String> p ) {
ListCell<String> ret = new ListCell<String>() {
@Override protected void updateItem( String item, boolean empty ) {
super.updateItem( item, empty );
if ( item == null || empty ) {
setGraphic( unchecked );
}
else {
setGraphic( checked );
if ( promptAsPrefix ) {
setText( promptText + " " + item );
}
}
}
};
ret.setGraphic( unchecked );
return ret;
}
};
setButtonCell( cb.call( null ) );
}
}
当没有选择任何值时,是否可以显示自定义图形?
答案 0 :(得分:1)
以下对我有用:
setButtonCell( cb.call( null ) );
Platform.runLater(new Runnable() {
@Override
public void run() {
getButtonCell().updateIndex(0);
}
});