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