JavaFX是否可以防止combobox在失去焦点时关闭?

JavaFX是否可以防止combobox在失去焦点时关闭?,java,javafx,combobox,Java,Javafx,Combobox,我正在尝试为combobox创建额外的元素,以控制其中的项目。我的问题是失去焦点时自动关闭。有没有办法防止combobox自动隐藏/关闭 正如评论员所要求的,我试图将自定义皮肤设置到我的组合框(顺便说一句,它只是字符串组合框),但当我打开它时,我得到了错误 Exception in thread "JavaFX Application Thread" java.lang.NullPointerException at com.sun.javafx.scene.control.sk

我正在尝试为combobox创建额外的元素,以控制其中的项目。我的问题是失去焦点时自动关闭。有没有办法防止combobox自动隐藏/关闭

正如评论员所要求的,我试图将自定义皮肤设置到我的组合框(顺便说一句,它只是字符串组合框),但当我打开它时,我得到了错误

    Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
    at com.sun.javafx.scene.control.skin.ComboBoxListViewSkin.getEditor(ComboBoxListViewSkin.java:189)
    at com.sun.javafx.scene.control.skin.ComboBoxPopupControl.lambda$new$0(ComboBoxPopupControl.java:76)
    at com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:361)
    at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
    at javafx.beans.property.ReadOnlyBooleanPropertyBase.fireValueChangedEvent(ReadOnlyBooleanPropertyBase.java:72)
    at javafx.scene.Node$FocusedProperty.notifyListeners(Node.java:7718)
    at javafx.scene.Node.setFocused(Node.java:7771)
    at javafx.scene.Scene$KeyHandler.setWindowFocused(Scene.java:3932)
    at javafx.scene.Scene$KeyHandler.lambda$new$0(Scene.java:3954)
    at com.sun.javafx.binding.ExpressionHelper$SingleInvalidation.fireValueChangedEvent(ExpressionHelper.java:137)
    at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
    at javafx.beans.property.ReadOnlyBooleanPropertyBase.fireValueChangedEvent(ReadOnlyBooleanPropertyBase.java:72)
    at javafx.beans.property.ReadOnlyBooleanWrapper.fireValueChangedEvent(ReadOnlyBooleanWrapper.java:103)
    at javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:110)
    at javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:144)
    at javafx.stage.Window.setFocused(Window.java:452)
    at com.sun.javafx.stage.WindowPeerListener.changedFocused(WindowPeerListener.java:59)
    at com.sun.javafx.tk.quantum.GlassWindowEventHandler.run(GlassWindowEventHandler.java:98)
    at com.sun.javafx.tk.quantum.GlassWindowEventHandler.run(GlassWindowEventHandler.java:40)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.tk.quantum.GlassWindowEventHandler.lambda$handleWindowEvent$3(GlassWindowEventHandler.java:151)
    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:410)
    at com.sun.javafx.tk.quantum.GlassWindowEventHandler.handleWindowEvent(GlassWindowEventHandler.java:149)
    at com.sun.glass.ui.Window.handleWindowEvent(Window.java:1273)
    at com.sun.glass.ui.Window.notifyFocus(Window.java:1252)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$4(WinApplication.java:186)
    at java.lang.Thread.run(Thread.java:748)
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
    at com.sun.javafx.scene.control.skin.ComboBoxBaseSkin.focusLost(ComboBoxBaseSkin.java:99)
    at com.sun.javafx.scene.control.skin.ComboBoxBaseSkin.lambda$new$4(ComboBoxBaseSkin.java:87)
    at com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:361)
    at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
    at javafx.beans.property.ReadOnlyBooleanPropertyBase.fireValueChangedEvent(ReadOnlyBooleanPropertyBase.java:72)
    at javafx.scene.Node$FocusedProperty.notifyListeners(Node.java:7718)
    at javafx.scene.Node.setFocused(Node.java:7771)
    at javafx.scene.Scene$KeyHandler.setWindowFocused(Scene.java:3932)
    at javafx.scene.Scene$KeyHandler.lambda$new$0(Scene.java:3954)
    at com.sun.javafx.binding.ExpressionHelper$SingleInvalidation.fireValueChangedEvent(ExpressionHelper.java:137)
    at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
    at javafx.beans.property.ReadOnlyBooleanPropertyBase.fireValueChangedEvent(ReadOnlyBooleanPropertyBase.java:72)
    at javafx.beans.property.ReadOnlyBooleanWrapper.fireValueChangedEvent(ReadOnlyBooleanWrapper.java:103)
    at javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:110)
    at javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:144)
    at javafx.stage.Window.setFocused(Window.java:452)
    at com.sun.javafx.stage.WindowPeerListener.changedFocused(WindowPeerListener.java:59)
    at com.sun.javafx.tk.quantum.GlassWindowEventHandler.run(GlassWindowEventHandler.java:101)
    at com.sun.javafx.tk.quantum.GlassWindowEventHandler.run(GlassWindowEventHandler.java:40)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.tk.quantum.GlassWindowEventHandler.lambda$handleWindowEvent$3(GlassWindowEventHandler.java:151)
    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:410)
    at com.sun.javafx.tk.quantum.GlassWindowEventHandler.handleWindowEvent(GlassWindowEventHandler.java:149)
    at com.sun.glass.ui.Window.handleWindowEvent(Window.java:1273)
    at com.sun.glass.ui.Window.notifyFocus(Window.java:1252)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$4(WinApplication.java:186)
    at java.lang.Thread.run(Thread.java:748)
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
    at com.sun.javafx.scene.control.skin.ComboBoxListViewSkin.getEditor(ComboBoxListViewSkin.java:189)
    at com.sun.javafx.scene.control.skin.ComboBoxPopupControl.lambda$new$0(ComboBoxPopupControl.java:76)
    at com.sun.javafx.binding.ExpressionHelper$Generic.fireValueChangedEvent(ExpressionHelper.java:361)
    at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
    at javafx.beans.property.ReadOnlyBooleanPropertyBase.fireValueChangedEvent(ReadOnlyBooleanPropertyBase.java:72)
    at javafx.scene.Node$FocusedProperty.notifyListeners(Node.java:7718)
    at javafx.scene.Node.setFocused(Node.java:7771)
    at javafx.scene.Scene$KeyHandler.setWindowFocused(Scene.java:3932)
    at javafx.scene.Scene$KeyHandler.lambda$new$0(Scene.java:3954)
    at com.sun.javafx.binding.ExpressionHelper$SingleInvalidation.fireValueChangedEvent(ExpressionHelper.java:137)
    at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
    at javafx.beans.property.ReadOnlyBooleanPropertyBase.fireValueChangedEvent(ReadOnlyBooleanPropertyBase.java:72)
    at javafx.beans.property.ReadOnlyBooleanWrapper.fireValueChangedEvent(ReadOnlyBooleanWrapper.java:103)
    at javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:110)
    at javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:144)
    at javafx.stage.Window.setFocused(Window.java:452)
    at com.sun.javafx.stage.WindowPeerListener.changedFocused(WindowPeerListener.java:59)
    at com.sun.javafx.tk.quantum.GlassWindowEventHandler.run(GlassWindowEventHandler.java:101)
    at com.sun.javafx.tk.quantum.GlassWindowEventHandler.run(GlassWindowEventHandler.java:40)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.tk.quantum.GlassWindowEventHandler.lambda$handleWindowEvent$3(GlassWindowEventHandler.java:151)
    at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:410)
    at com.sun.javafx.tk.quantum.GlassWindowEventHandler.handleWindowEvent(GlassWindowEventHandler.java:149)
    at com.sun.glass.ui.Window.handleWindowEvent(Window.java:1273)
    at com.sun.glass.ui.Window.notifyFocus(Window.java:1252)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$4(WinApplication.java:186)
    at java.lang.Thread.run(Thread.java:748)
因此,它让我们想到:

@Override protected TextField getEditor() {
    // Return null if editable is false, even if the ComboBox has an editor set.
    // Use getSkinnable() here because this method is called from the super
    // constructor before comboBox is initialized.
    return getSkinnable().isEditable() ? ((ComboBox)getSkinnable()).getEditor() : null;
}
我正在使用这个代码:

        ComboBox gvl = (ComboBox) getScene().lookup("#customCombobox");
    gvl.setSkin( new ComboBoxListViewSkin<String>(gvl)
    {
        @Override
        protected boolean isHideOnClickEnabled()
        {
            return false;
        }
    } );
}
ComboBox gvl=(ComboBox)getScene().lookup(“#customCombobox”);
gvl.setSkin(新ComboBoxListViewSkin(gvl)
{
@凌驾
受保护的布尔值isHideOnClickEnabled()
{
返回false;
}
} );
}

你能看看这个吗:是的,我捕捉到了NullPointerException错误,这与我的函数调用@user1798736无关。如果这个错误与问题相关,请将它作为格式化文本粘贴到你的问题中。我认为这不是一个好主意。我建议使用ListView或使用Combobox创建自己的组件,并使用按钮进行控制。很难说,因为我不知道你为什么需要它。@Patres我正试图在组合框中插入类似“项目过滤器”的内容请看:是的,我捕获了NullPointerException错误,这与我的函数调用无关@user1798736请将此错误作为格式化文本粘贴到你的问题中,如果这与问题有关,我认为这不是个好主意。我建议使用ListView或使用Combobox创建自己的组件,并使用按钮进行控制。这很难说,因为我不知道你为什么需要它。@Patres我正试图在组合框中插入类似项目过滤器的东西