Javafx 2 在JavaFX2.2中,是否有可能使父母处于禁用状态,而让他的孩子保持不处于禁用状态?

Javafx 2 在JavaFX2.2中,是否有可能使父母处于禁用状态,而让他的孩子保持不处于禁用状态?,javafx-2,javafx,parent-child,disabled-control,Javafx 2,Javafx,Parent Child,Disabled Control,这个问题已经困扰了我好几次了。例如,我希望启用中的图形节点,但禁用其父按钮。这样,我就可以实现一个看起来很酷的“加载”按钮,它可以运行一些长时间运行的任务,变灰并禁用,但他的内部ProgressBar仍然清晰可见,并附带了所有明亮的颜色。但是当我禁用按钮时,珍贵的子进度条也会被禁用并变灰 今天我又碰到了同样的问题。我有两个按顺序叠在一起。顶部的手风琴有两个功能,用户可以随意展开或收缩。但是,下面的手风琴只有一个标题窗格,始终处于展开状态。此标题窗格具有用户始终可见的内容和控件。我将所有这些固定内

这个问题已经困扰了我好几次了。例如,我希望启用中的图形节点,但禁用其父按钮。这样,我就可以实现一个看起来很酷的“加载”按钮,它可以运行一些长时间运行的任务,变灰并禁用,但他的内部ProgressBar仍然清晰可见,并附带了所有明亮的颜色。但是当我禁用按钮时,珍贵的子进度条也会被禁用并变灰

今天我又碰到了同样的问题。我有两个按顺序叠在一起。顶部的手风琴有两个功能,用户可以随意展开或收缩。但是,下面的手风琴只有一个标题窗格,始终处于展开状态。此标题窗格具有用户始终可见的内容和控件。我将所有这些固定内容包装在一个单独的手风琴和一个单独的标题窗格中,这样他就可以像他的表兄弟一样融入其中。只是放一个普通的或者什么的,然后试图模仿堂兄弟的风格是一个真正的麻烦。请查看当前所有内容的外观:

但是当固定内容的标题栏获得焦点时,它看起来非常丑陋。标题“发送”就像晴朗的蓝天。因此,我试图完全禁用该标题栏,但可以想象,按钮也会自动禁用:

但是,与我的第一个按钮示例和ProgressBar一样,我只是简单地说,它希望禁用父按钮,但不禁用子按钮!可能吗


或者,我可以隐藏标题窗格的标题。但我也没有想出如何做到这一点并提出了这个问题。

直到我找到了真正的解决方案(禁用家长而不是孩子),我才找到了解决办法。只需将标题窗格的焦点转到按钮即可

假设标题为“Send”的下标题窗格的fx:id为“titledPaneSend”,按钮的fx:id为“Button”,并且控制器类实现了该功能,请将以下代码添加到initialize方法:

titledPaneSend.focusedProperty().addListener(new ChangeListener<Boolean>()
        {
            @Override
            public void changed(ObservableValue<? extends Boolean> ov, Boolean from, Boolean to)
            {
                if (to == true)
                    /*
                     * Just calling button.requestFocus() will make
                     * BOTH the TitledPane and the Button become
                     * focused. And apparently, this is a bug:
                     * 
                     *     http://stackoverflow.com/a/14843531/1268003
                     * 
                     * So the fix is to wrap all in a new runnable:
                     */
                    Platform.runLater(new Runnable()
                        {
                        @Override
                        public void run() {
                            button.requestFocus(); }
                        });
            }
        });
titledPaneSend.focusedProperty().addListener(新的ChangeListener())
{
@凌驾

public void已更改(ObservalEvalue直到我有了一个真正的解决方案(禁用父项而不是子项),我已经找到了解决方法。只需将标题窗格的焦点转到按钮即可

假设标题为“Send”的下标题窗格的fx:id为“titledPaneSend”,按钮的fx:id为“Button”,并且控制器类实现了该功能,请将以下代码添加到initialize方法:

titledPaneSend.focusedProperty().addListener(new ChangeListener<Boolean>()
        {
            @Override
            public void changed(ObservableValue<? extends Boolean> ov, Boolean from, Boolean to)
            {
                if (to == true)
                    /*
                     * Just calling button.requestFocus() will make
                     * BOTH the TitledPane and the Button become
                     * focused. And apparently, this is a bug:
                     * 
                     *     http://stackoverflow.com/a/14843531/1268003
                     * 
                     * So the fix is to wrap all in a new runnable:
                     */
                    Platform.runLater(new Runnable()
                        {
                        @Override
                        public void run() {
                            button.requestFocus(); }
                        });
            }
        });
titledPaneSend.focusedProperty().addListener(新的ChangeListener())
{
@凌驾
公共无效已更改(可观察值)