JavaFX的ComboBox上的自定义视图

时间:2015-05-27 18:22:22

标签: java combobox javafx controls custom-component

我目前正在尝试从JavaFX更改默认的ComboBox类,以在ListView的顶部显示TextField和Button。

TextField将用于过滤ListView的内容,该按钮将用于清除ComboBox内容(基本上该按钮将调用getSelectionModel().clearSelection();)。

但是,我无法在任何地方找到使用自定义视图的示例来显示我上面发布的方案。

我试图将ComboBox类子类化,但是我无法显示该视图。我正在使用VBox来包含控件。我还没有到处添加Button。这是代码:

public class ComboBoxFilter<T> extends ComboBox<T> {
    protected TextField filterField;

    @Override protected Skin<?> createDefaultSkin() {
        initFilter();

        return(new ComboBoxFilterViewSkin<T>(this));
    }

    protected void initFilter() {       
        filterField = new TextField();
    }

    class ComboBoxFilterViewSkin<T> extends ComboBoxListViewSkin<T> {
        protected VBox filterPane;

        public ComboBoxFilterViewSkin(ComboBox<T> comboBox) {
            super(comboBox);
        }

        @Override public Node getPopupContent() {
            filterPane = new VBox();
            filterPane.setPadding(new Insets(10));
            filterPane.setSpacing(8);

            filterPane.getChildren().addAll(filterField, getListView());
            filterPane.setMinWidth(getListView().getWidth());
            filterPane.setMinHeight(getListView().getHeight() + filterField.getHeight());

            return(filterPane);
        }       
    }   
}

我知道有一个解决方案可以将ComboBox设置为可编辑并过滤ListView,但该解决方案不能满足我的需求。

任何人都可以提供有关如何继续实施我需要的方案的见解吗?它不必在上面提到的类之上。我愿意采用另一种方法。

谢谢!

0 个答案:

没有答案