JavaFX устанавливает разные стили для ProgressIndicator и Spinner

На данный момент я работаю с индикатором прогресса и кучей счетчиков.

Я хочу дать им разные стили в одном CSS-файле. Моя проблема в том, что индикатор прогресса всегда использует стиль, который я запланировал для счетчиков.

Я сделал небольшое приложение в качестве примера:

package application;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;


public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        try {
            Pane root = new Pane();
            Scene scene = new Scene(root,400,400);
            scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());

            ProgressIndicator value = new ProgressIndicator(-1.0);
            value.getStyleClass().forEach(clazz -> System.out.println(clazz));
            value.setPrefHeight(100);
            value.setPrefWidth(100.0);

            root.getChildren().add(value);



            primaryStage.setScene(scene);
            primaryStage.show();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}

Я хочу, чтобы мой индикатор прогресса отображался на красном фоне, и пытаюсь сделать так:

.progress-indicator > .indicator {
    -fx-background-color: red;
}

но без стилизации блесны это не будет работать. поэтому я добавляю это:

.spinner {
    -fx-background-color: red;
}

Проблема в том, что у всех моих блесен теперь красный фон. Я мог бы сделать это с помощью различных CSS-файлов. Но было бы лучше, если бы мне нужен был только один CSS-файл.

Заранее спасибо за ваше время и помощь!

2 ответа

Решение

Вы столкнулись с этой ошибкой в modena.css который зафиксирован в 8u40. Теперь вы можете смело менять цвет фона индикатора прогресса с помощью:

.progress-indicator:indeterminate > .spinner {
    /** Applying to undo styling from .spinner, reported in RT-37965 */
    -fx-background-color: red;
    /* originally was */
    /*-fx-background-color: transparent;*/
    -fx-background-insets: 0;
    -fx-background-radius: 0;
}

Я думаю, что вы можете создавать стили для каждого отдельного класса?

Разве вы не можете добавить собственный класс стилей для каждого счетчика и применить его с помощью spinner.getStyleClass(). Add("my-style")?

Это позволит вам определять майские классы на более определенном уровне, чем просто на уровне объекта.

Другие вопросы по тегам