Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX:指CSS中折叠和扩展的手风琴状态_Java_Css_Javafx_Javafx 8_Accordion - Fatal编程技术网

JavaFX:指CSS中折叠和扩展的手风琴状态

JavaFX:指CSS中折叠和扩展的手风琴状态,java,css,javafx,javafx-8,accordion,Java,Css,Javafx,Javafx 8,Accordion,我希望我的每个人都做得很好 我正在尝试使用css根据我的TitelPane对象中的折叠的或扩展的psuedo类属性来控制箭头的旋转。我正在使用javafx8。如果您查看文档,您将看到有展开的和折叠的psuedo类 下面是我认为应该起作用的一个最简单的例子。 一个通用的main-> package application; import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.S

我希望我的每个人都做得很好

我正在尝试使用css根据我的TitelPane对象中的
折叠的
扩展的
psuedo类属性来控制箭头的旋转。我正在使用javafx8。如果您查看文档,您将看到有
展开的
折叠的
psuedo类

下面是我认为应该起作用的一个最简单的例子。 一个通用的main->

package application;

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Accordion;
import javafx.scene.control.Label;
import javafx.scene.control.TitledPane;


public class Main extends Application 
{
    @Override
    public void start(Stage primaryStage) 
    {
        Accordion accordion = new Accordion
        (
                new TitledPane("TitledPane #1", new Label("Content #1"))
        );
        primaryStage.setScene(new Scene(accordion, 600, 400));
        primaryStage.setTitle("Test");
        primaryStage.show();
    }
}
下面的css在主屏幕上工作,正如您所期望的->

.accordion .title > .arrow-button
{
    -fx-rotate: -45;   
}
但是如果我想根据箭头是否折叠来影响箭头的旋转,我希望能够写出如下内容->

.accordion .title:collapsed > .arrow-button
{
      -fx-rotate: 45;
}

.accordion .title:expanded > .arrow-button
{
      -fx-rotate: -45
}
有谁能向我解释一下为什么这不起作用,并说明应该如何正确地做?在我试图将其应用到的项目中,我没有设置旋转的动画,但我想知道这是否会影响事情

非常感谢你抽出时间来帮助我


编辑:为我想要实现的目标添加细节。我希望箭头在收拢状态下指向下方,在展开状态下指向上方。

在对这一点进行了更多的讨论之后,我发现了一个技巧,允许您在收拢时向下指向箭头,在展开时向上指向箭头。但是,当
标题窗格
设置动画(或至少看起来不好)时,它将无法正常工作

与之类似,上述要求在使用前在
窗口
中显示
标题窗格
;也就是说,除非您使用自定义蒙皮

我试着简单地调用
arrow.rotateProperty().unbind()
,然后在CSS中设置旋转,但无论出于什么原因,我都无法让它看起来正确



常见警告:这是一种“黑客攻击”,依赖于
标题窗格的内部实现及其外观,在未来的版本中可能会发生更改。更改JavaFX版本时要小心。我仅使用JavaFX 11.0.2尝试了上述操作。

伪类应用于
标题窗格
,而不是子结构的一部分(即
.title
)。如果您尝试
.titled pane:collapsed>.title>.arrow button{…}
,会怎么样?还有
.title pane:collapsed>.title>.arrow button>.arrow
节点上发生的“标准”旋转,但是您无法调整该节点的旋转,因为该节点的
rotate
属性已绑定。。。将旋转应用到
.arrow按钮
节点只会使整个事情看起来很奇怪,但在这种情况下,您只需要设置所需旋转和实际旋转之间的差异:
.accordion>.titled pane>.title>.arrow按钮{-fx rotate:45;}
@Slaw我发现您的代码片段允许我在箭头的折叠状态下引用它,但我无法旋转它,因为您下面的注释指出它是绑定的,但我能够影响其他事情,比如可见性。@fabian我有点难以理解你所说的实际旋转是什么意思,但我想你指的是它在各州之间旋转的量?对不起,我不能百分之百地理解你。您的css允许我旋转整个节点,但差异保持90度。为了给我正在寻找的东西添加一些细节,我希望箭头在折叠状态下指向下方,在展开状态下指向上方。它自然会在两个州之间旋转90度,但我试图在两个州之间实现180度的差异。问题已更新以反映。由于箭头的旋转属性已绑定,因此我们只能旋转箭头按钮。问题是旋转箭头按钮会增加箭头的旋转,从而导致箭头的“实际旋转”。您需要将箭头按钮的旋转量考虑在内。这件事搞了好几分钟了,但唉。。。我弄不好垫子,太谢谢你了。这个功能很好。但是
我希望箭头在折叠状态下指向下方
与代码的功能相反。它在折叠时指向上,在展开时指向下,但这很容易编辑以满足我的需要。编辑了我的答案。一定是因为某种原因在我的脑海里改变了这个想法。工作完美无瑕。感谢您的编辑和回答:)也适用于javaFX15。我将它添加到构造函数中的自定义控件皮肤类中,它也可以工作。
import javafx.beans.binding.Bindings;
import javafx.scene.control.TitledPane;
import javafx.scene.layout.Region;
import javafx.scene.transform.Rotate;

public static void pointArrowUp(TitledPane pane) {
    Region arrow = (Region) pane.lookup(".arrow");

    Rotate rotate = new Rotate();
    rotate.pivotXProperty().bind(arrow.widthProperty().divide(2.0));
    rotate.pivotYProperty().bind(arrow.heightProperty().divide(2.0));
    rotate.angleProperty().bind(
            Bindings.when(pane.expandedProperty())
                    .then(-180.0)
                    .otherwise(90.0)
    );

    arrow.getTransforms().add(rotate);
    pane.setAnimated(false);
}