JavaFX: ссылки на свернутые и расширенные состояния аккордеона в CSS - PullRequest
0 голосов
/ 14 марта 2019

Я надеюсь, что у всех у меня все хорошо.

Я пытаюсь управлять вращением стрелки на основе ее свойства collapsed или expanded psuedo-class в моих объектах TiteldPane с помощью css.Я использую javafx8.Если вы посмотрите на документацию здесь , то увидите, что существуют expanded и collapsed псевдо-классы.

Ниже приведен минимальный пример того, что, я думаю, должно работать.Общий 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
}

Может кто-нибудь объяснить мне, почему это не работает, и показать, как это должно быть сделано правильно?В проекте, к которому я пытаюсь применить это, я не оживляю ротацию, но мне было бы интересно узнать, влияет ли это на вещи.

Большое спасибо, что нашли время помочь мне.

РЕДАКТИРОВАТЬ: Добавление деталей к тому, что я хочу достичь конкретно.Я хочу, чтобы стрелка указывала вниз в свернутом состоянии, и я хочу, чтобы она указывала вверх в развернутом состоянии.

1 Ответ

1 голос
/ 14 марта 2019

Поработав еще с этим, я нашел хак, который позволяет вам указывать стрелку вниз при свертывании и вверх при раскрытии.Тем не менее, он не будет работать должным образом, когда TitledPane анимирован (или, по крайней мере, выглядит плохо).

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

Так же, как с мой ответ на ваш предыдущий вопрос ,вышеупомянутое требует, чтобы TitledPane отображался в Window перед использованием;то есть, если вы не используете собственный скин.

Я пытался просто позвонить arrow.rotateProperty().unbind(), затем установить вращение в CSS, но по какой-то причине я не смог заставить его выглядеть правильно.


Обычное предупреждение. Это «взлом», основанный на внутренней реализации TitledPane и его оболочке, которая может измениться в будущем выпуске.Будьте осторожны при изменении версий JavaFX.Я только что попробовал выше с JavaFX 11.0.2.

...