如何在JavaFX8中禁用组合框弹出窗口的隐藏?

时间:2016-02-26 11:32:36

标签: java javafx combobox datepicker javafx-8

有没有办法不断显示组合框弹出窗口?问题是关于datepicker,但它是组合框的后代。我想调用组合框的show()方法然后不断显示它直到阶段关闭。 到目前为止最好的事情是

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.testing.MainActivity" >

<LinearLayout 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:background="#0000ff"
        android:orientation="vertical"
        android:layout_weight="1" />

    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:background="#00ffff"
        android:orientation="vertical"
        android:layout_weight="1" />

</LinearLayout>

<LinearLayout 
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:orientation="vertical"
    android:background="#00ff00"
    android:layout_gravity="center" />

</FrameLayout>

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

2 个答案:

答案 0 :(得分:2)

糟糕的解决方案

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

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() );

在github上完整example code

好的解决方案

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

enter image description here

http://jfxtras.org/

答案 1 :(得分:0)

如果可以覆盖ComboBoxBase方法的hide()方法,则可以阻止控件关闭。您必须创建一个新类,如alwaysOpenDatePicker,并让它扩展javafx场景数据贴图类。在该类中,您可以覆盖hide()方法,在该方法中您将不执行任何操作。

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

以及指向ComboBoxBase页面的链接: https://docs.oracle.com/javafx/2/api/javafx/scene/control/ComboBoxBase.html