为什么我的javafx组合框按钮单元格渲染器在选择之前不会被应用?

时间:2012-09-28 20:42:56

标签: combobox cell javafx renderer

我正在扩展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 ) );
    }
}

当没有选择任何值时,是否可以显示自定义图形?

1 个答案:

答案 0 :(得分:1)

以下对我有用:

setButtonCell( cb.call( null ) );
Platform.runLater(new Runnable() {
        @Override
        public void run() {
            getButtonCell().updateIndex(0);
        }
    });