使用自定义Popup创建JavaFX ComboBox

时间:2016-05-12 14:05:35

标签: javafx combobox popup

我想在其Popup中编写一个带有自定义Node对象的ComboBox(而不是常见的ListView)。 ColorPicker和DatePicker是很好的例子,它们是ComboBoxBase的另外两个实现。我以为我也可以轻松扩展ComboBoxBase,但由于没有popupProperty或popupFactory,我不知道如何设置内容。它还有什么意义呢?或者ColorPicker和DatePicker如何做到这一点?

2 个答案:

答案 0 :(得分:1)

扩展ComboBoxPopupControl

ComboBoxBaseSkin包含getPopupContent()。这就是你要找的方法。在你自己的皮肤实现中,它扩展了一个ComboBoxSkins,你可以返回你喜欢的弹出内容(虽然不建议使用私有API)

public class CustomComboBox<T> extends ComboBox<T> {

        @Override
        protected Skin<?> createDefaultSkin() {
            return new CustomComboBoxSkin<>(this);
        }
}

public  class CustomComboBoxSkin<T> extends ComboBoxPopupControl<T> {

        public CustomComboBoxSkin(ComboBox<T> comboBox) {
            super(comboBox, new CustomComboBoxBehaviour<>(comboBox));
        }

        @Override
        public Node getPopupContent() {
            return new Rectangle(150, 200);
        }

        // inherited methods ...

}

答案 1 :(得分:-1)

我使用ComtextMenu替换commbox的弹出窗口,如下所示:

ContextMenu menu = new ContextMenu();
MenuItem item = new MenuItem();
item.setGraphic(new Lable("test"));
menu.getItems.add(item);
commbox.setContextMenu(null);
commbox.setContextMenu(menu ); 
commbox.getContextMenu().show(comboBox, Side.BOTTOM, 0, 0);

工作正常。