0

さまざまなシリーズを含む StackedBarChart があります。

StackedBarChart.Series<String, Number> series1= new StackedBarChart.Series<String, Number>(
                FXCollections.observableArrayList(list1));
StackedBarChart.Series<String, Number> series2= new StackedBarChart.Series<String, Number>(
                FXCollections.observableArrayList(list2));
StackedBarChart.Series<String, Number> series3= new StackedBarChart.Series<String, Number>(
                FXCollections.observableArrayList(list3));
ObservableList<StackedBarChart.Series<String, Number>> barChartData = FXCollections
                .observableArrayList(series1, series2,
                        series3);
        final StackedBarChart<String, Number> chart = new StackedBarChart<String, Number>(
                xAxis, yAxis, barChartData);

シリーズのデフォルトの色を変更したいと思います。だから私はカスタムCSSスタイルシートを追加しました

chart.getStylesheets().add("path to the CSS file");

CSSファイルでは、デフォルトの色をsthのようにオーバーライドできます

.default-color0 {
    -fx-bar-fill: limegreen;
}
.default-color1 {
    -fx-bar-fill: orange;
}
.default-color2 {
    -fx-bar-fill: tomato;
}

これは完全に機能しますが、デフォルトの色を私の色に置き換えるだけです。シリーズをチャートに追加するときにシリーズの順序を変更すると、色が切り替わります。

sth のような CSS でより正確にしたい

.series1.color {
    -fx-bar-fill: limegreen;
}
.series2.color {
    -fx-bar-fill: orange;
}
.series2.color {
    -fx-bar-fill: tomato;
}

CSS スタイルシートを使用してグラフをフィードする代わりに、これらのカスタム セレクターをシリーズに直接追加します。メソッドを使用してノードに設定できるカスタムセレクターがあることは知っていますがsetId(..)、それを行うことができませんでした。

メソッドについても知ってlookupいますが、チャートがレンダリングされた後に呼び出す必要があるため、まったくエレガントではありません(したがって、元の色と新しい色の間で色が非常に速く点滅することがわかります)

だから私の質問は次のとおりです:どのようにCSSセレクターを定義できますか

.series1.color {
    -fx-bar-fill: limegreen;
}
.series2.color {
    -fx-bar-fill: orange;
}
.series2.color {
    -fx-bar-fill: tomato;
}

必要なチャートシリーズにプログラムで適用します

series1.applySelector(".series1.color");

シリーズがチャートに別の順序で挿入された場合でも、必要な色が得られるように

4

1 に答える 1