在现有的PieChart上设置新数据时,我注意到颜色不一样。 (它们围绕css颜色列表循环,就好像某个内部计数器没有被重置一样)
如何在颜色0处再次启动颜色,而不是每次都重新创建图表?
示例:
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
import javafx.stage.Stage;
public class ChartAdvancedPie extends Application {
PieChart pc = new PieChart();
private void init(Stage primaryStage) {
Group root = new Group();
primaryStage.setScene(new Scene(root));
root.getChildren().add(pc);
pc.setAnimated(false);
SetupData( );
SetupData( ); //comment this out to see first colours only
}
protected void SetupData() {
ObservableList<PieChart.Data> data = FXCollections.observableArrayList();
data.add(new PieChart.Data("Slice", 1));
data.add(new PieChart.Data("Slice", 2));
data.add(new PieChart.Data("Slice", 3));
pc.getData().clear();
pc.setData( data );
}
@Override public void start(Stage primaryStage) throws Exception {
init(primaryStage);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
保留颜色排序的黑客是在清除之前添加8个大小的mod 8个项目,但我确信有一个更简单的方法(或者我添加错误的数据)
int rem = 8-(pieChartData.size() % 8 );
for ( int i=0; i< rem; i++ ) {
controller.FeatureChart.getData().add(new PieChart.Data("dummy", 1));
}
controller.FeatureChart.getData().clear();
//... add items again
答案 0 :(得分:0)
目前无法重置颜色。用于颜色索引的字段在PieChart中被声明为私有,并且没有正式的方法来修改它。
但是,如果环境允许这样,可以用反射修复它。修改SetupData
方法,如下所示:
protected void SetupData() {
ObservableList<PieChart.Data> data = FXCollections.observableArrayList();
data.add(new PieChart.Data("Slice", 1));
data.add(new PieChart.Data("Slice", 2));
data.add(new PieChart.Data("Slice", 3));
// pc.getData().clear();
try {
Class<PieChart> cls = PieChart.class;
Field f = cls.getDeclaredField("defaultColorIndex");
f.setAccessible(true);
f.setInt(pc, 0);
} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
pc.setData( data );
}
不要使用它。
如果你必须:
f.setAccessible(true)
允许设置私有字段。这可能会失败,并且在合理配置的设置中它将失败。如果您的应用程序是一个小桌面工具,它可能会工作。此外,您可能希望在执行此操作之前检查Java版本,并仅为您知道它可以工作的版本启用代码。 (一些“临时”工具将在未来10。20年内用于生产。)