Colors javafx 2.2饼图颜色未重置
当在现有图表上设置新数据时,我注意到颜色不一样。 (它们在css颜色列表中循环,就像某些内部计数器没有被重置一样) 如何在颜色0处重新开始颜色,而不每次重新创建图表 例如:Colors javafx 2.2饼图颜色未重置,colors,javafx-2,pie-chart,Colors,Javafx 2,Pie Chart,当在现有图表上设置新数据时,我注意到颜色不一样。 (它们在css颜色列表中循环,就像某些内部计数器没有被重置一样) 如何在颜色0处重新开始颜色,而不每次重新创建图表 例如: import javafx.application.Application; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.scene.Group; import javafx.
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);
}
}
导入javafx.application.application;
导入javafx.collections.FXCollections;
导入javafx.collections.ObservableList;
导入javafx.scene.Group;
导入javafx.scene.scene;
导入javafx.scene.chart.PieChart;
导入javafx.stage.stage;
公共类ChartAdvancedPie扩展了应用程序{
PieChart pc=新PieChart();
私有void init(阶段primaryStage){
组根=新组();
primaryStage.setScene(新场景(根));
root.getChildren().add(pc);
pc.setAnimated(假);
SetupData();
SetupData();//注释掉此项仅查看第一种颜色
}
受保护的void SetupData(){
ObservableList data=FXCollections.observableArrayList();
添加(新的PieChart.data(“切片”,1));
添加(新的PieChart.data(“切片”,2));
添加(新的PieChart.data(“切片”,3));
pc.getData().clear();
pc.setData(数据);
}
@覆盖公共无效开始(阶段primaryStage)引发异常{
初始阶段;
primaryStage.show();
}
公共静态void main(字符串[]args){
发射(args);
}
}
保留颜色顺序的一种方法是在清除之前再添加8号mod 8项目,但我相信有一种更简单的方法(或者我添加了错误的数据)
int rem=8-(pieChartData.size()%8);
对于(inti=0;i
目前无法重置颜色。用于颜色索引的字段在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 );
}
protectedvoid SetupData(){
ObservableList data=FXCollections.observableArrayList();
添加(新的PieChart.data(“切片”,1));
添加(新的PieChart.data(“切片”,2));
添加(新的PieChart.data(“切片”,3));
//pc.getData().clear();
试一试{
Class cls=PieChart.Class;
字段f=cls.getDeclaredField(“defaultColorIndex”);
f、 setAccessible(true);
f、 setInt(pc,0);
}捕获(NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e){
e、 printStackTrace();
}
pc.setData(数据);
}
不要用它
如果必须:
f.setAccessible(true)
允许设置私有字段。这可能会失败,在配置合理的设置中也会失败。如果您的应用程序是一个小型桌面工具,它可能会工作。此外,在执行此操作之前,您可能希望检查java版本,并仅为您知道其适用的版本启用代码。(一些“临时”工具将在未来10至20年内用于生产。)Nice hack!我有问题。我认为JavaFX还不够成熟,无法处理所有这些小错误。
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 );
}