JavaFX组合框上的自定义视图

JavaFX组合框上的自定义视图,java,combobox,javafx,controls,custom-component,Java,Combobox,Javafx,Controls,Custom Component,我目前正在尝试将默认ComboBox类从JavaFX更改为在ListView顶部显示一个TextField和一个按钮 TextField将用于过滤ListView的内容,而button将用于清除组合框的内容。基本上,该按钮将调用getSelectionModel.clearSelection 但是,我在任何地方都找不到使用自定义视图来显示我上面发布的场景的示例 我试图对ComboBox类进行子类化,但无法显示视图。我正在使用VBox包含控件。我还没有时间添加按钮。代码如下: public cla

我目前正在尝试将默认ComboBox类从JavaFX更改为在ListView顶部显示一个TextField和一个按钮

TextField将用于过滤ListView的内容,而button将用于清除组合框的内容。基本上,该按钮将调用getSelectionModel.clearSelection

但是,我在任何地方都找不到使用自定义视图来显示我上面发布的场景的示例

我试图对ComboBox类进行子类化,但无法显示视图。我正在使用VBox包含控件。我还没有时间添加按钮。代码如下:

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,但该解决方案不能满足我的需要

有人能提供我应该如何继续实施我需要的场景的见解吗?它不必位于上面介绍的类的顶部。我愿意采用另一种方法


谢谢

这似乎有些过分;我认为你根本不需要定制皮肤。只需在组合框上设置一个自定义按钮cell以显示文本字段和按钮。谢谢,James_D,但我如何才能做到这一点,因为我只希望在列表视图可见时显示它们?啊,好吧,我误解了列表视图顶部的意思。。。也许这是你想要的更好的方法。有什么解决办法吗?我也有同样的困境。当打开组合框时,我希望它显示一个文本字段,用于过滤列表。当组合框关闭,但有一个选定值时,我想在向下箭头按钮旁边添加一个Xclose按钮。