2014-11-04 97 views
0

我有一个扩展了AreaChart的Java-Class。在那里,我想实现,使得或多或少像这样的方法:颜色在面积图上的变化

public void addNewColorToData(xCoordinate, yCoordinate, redColor, greenColor, blueColor); 

- >中的作用应该得到数据的参数为x坐标,y坐标,然后为representes线的RGB值。

是否可以使用内联样式为此创建新的颜色?

enter image description here

在这里你可以看到一个样本。面积图有很多颜色填充! 是否有可能添加一些新的颜色?

我需要在CSS中添加内嵌样式像这样的东西:

.default-color0.chart-series-area-fill { -fx-fill: #007Fc350; } 

谢谢您的帮助

+0

你想创建基于三个参数(r,g,b)的颜色?这与数据参数有什么关系?应用颜色(填充,背景,文字,...)在哪里? – 2014-11-04 09:52:47

+0

@JoséPereda颜色需要用颜色填充线条。我在问题中添加了一个Sample-Picture! – 2014-11-04 10:18:00

+0

好的,你说的是数据(每个x,y点),而不是系列...... – 2014-11-04 10:22:15

回答

1

在此基础上answer,基于R,G,B创建一个内联样式参数(假设这些都是整数,从0到255),你只需要重写CHART_COLOR_1(最多CHART_COLOR_8)值来修改线条颜色和CHART_COLOR_1_TRANS_20(最多CHART_COLOR_8_TRANS_20)修改区域的颜色:

private AreaChart<String, Number> areaChart; 

private void changeColor(int redColor, int greenColor, int blueColor, double opacity){ 
    /* int redColor=0, greenColor=127, blueColor=195; 
     double opacity=0.4; 
    */ 
    areaChart.setStyle("CHART_COLOR_1: rgb("+redColor+","+greenColor+","+blueColor+");" + 
      "CHART_COLOR_1_TRANS_20: rgba("+redColor+","+greenColor+","+blueColor+");"); 
} 

编辑

我加入这个短MVCE为清楚起见:

@Override 
public void start(Stage primaryStage) { 
    AreaChart<String, Number> areaChart=new AreaChart<>(new CategoryAxis(),new NumberAxis()); 

    ObservableList<XYChart.Data<String,Integer>> xyList 
      = FXCollections.observableArrayList(
        new XYChart.Data<>("P1", 30), 
        new XYChart.Data<>("P2", 40), 
        new XYChart.Data<>("P3", 30)); 
    XYChart.Series series = new XYChart.Series(xyList); 
    areaChart.getData().addAll(series); 

    Button button = new Button("Change style"); 
    button.setOnAction(e->{ 
     int redColor=0, greenColor=127, blueColor=195; 
     double opacity=0.3; 
     areaChart.setStyle("CHART_COLOR_1: rgb("+redColor+","+greenColor+","+blueColor+"); " 
       + "CHART_COLOR_1_TRANS_20: rgba("+redColor+","+greenColor+","+blueColor+","+opacity+");"); 
    }); 

    VBox root = new VBox(5, button, areaChart); 
    Scene scene = new Scene(root, 400, 300);   
    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

这将是结果:

Styled chart

+0

这个例子不起作用......我试了一下,但它什么也没做 – 2014-11-04 10:56:33

+0

再次检查我编辑过的答案。 – 2014-11-04 11:05:49

+0

我也尝试这个解决方案,但它也不适合我。你尝试过吗? changeColor方法中的参数opacity从不使用... – 2014-11-04 11:50:41