【问题标题】:How to disable hiding of combobox popup in JavaFX8?如何在 JavaFX8 中禁用隐藏组合框弹出窗口?
【发布时间】:2016-06-09 14:27:48
【问题描述】:

有没有办法不断显示组合框弹出窗口?问题是关于日期选择器,但它是组合框的后代。我想调用组合框的 show() 方法,然后不断地显示它,直到舞台关闭。 到目前为止,它得到的最好的东西是

    showingProperty().addListener({ ov, old, newValue ->
        if (!newValue) this.show()
    })

它有点工作,但它隐藏了弹出窗口然后显示它,这很不方便。

【问题讨论】:

  • 想知道为什么?次要阶段或对话可能是更好的选择?

标签: java javafx combobox datepicker javafx-8


【解决方案1】:

糟糕的解决方案

从日期选择器皮肤中取出弹出内容,并像任何其他节点一样使用它。请注意,日期选择器本身必须至少被渲染为场景的一部分,才能初始化皮肤。可能有更聪明的方法来初始化皮肤。

final DatePicker datePicker = new DatePicker();
final StackPane root = new StackPane( datePicker );
final Scene scene = new Scene( root, 250, 200 );
primaryStage.setScene( scene );
primaryStage.show();

datePicker.setVisible( false );
datePicker.setManaged( false );

final com.sun.javafx.scene.control.skin.DatePickerSkin skin = (com.sun.javafx.scene.control.skin.DatePickerSkin) datePicker.getSkin();
root.getChildren().add( skin.getPopupContent() );

完整的example code github。

好的解决方案

使用专为您的目的制作的控件,例如来自 JFXtras 的 CalendarPicker。

http://jfxtras.org/

【讨论】:

    【解决方案2】:

    如果您可以覆盖 ComboBoxBase 方法的 hide() 方法,您将能够阻止控件关闭。您必须创建一个新类,例如 alwaysOpenDatePicker,并让它扩展 javafx 场景数据选择器类。在该类中,您可以覆盖 hide() 方法,在该方法中您什么也不做。

    我不确定这是否可行,我只是在大声思考。我想这值得一试,让我知道它是否有效:)。

    还有一个指向 ComboBoxBase 页面的链接: https://docs.oracle.com/javafx/2/api/javafx/scene/control/ComboBoxBase.html

    【讨论】:

    • 不,那没有用。此方法只是设置属性显示。我试图让它保持真实,但弹出窗口仍然隐藏
    猜你喜欢
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-31
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    相关资源
    最近更新 更多