我正在扩展 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 ) );
}
}
当没有选择任何值时,甚至可以显示自定义图形吗?