2015-04-28 139 views
-1

如何更改条形图颜色?如何更改JavaFx中的XYChart颜色?

谁能给我一个线索:

  • 如何设置一种颜色来linecharts?
  • 如何设置一个CSS类到系列?
public class hmw3 extends Application { 

@Override public void start(Stage stage) throws Exception{ 

     stage.setTitle("HİSTOGRAM"); 

     final CategoryAxis xAxis = new CategoryAxis(); 

     final NumberAxis yAxis = new NumberAxis(0,50,10); 

     final BarChart<String,Number> bc = 
      new BarChart<String,Number>(xAxis,yAxis); 

     bc.setTitle("HİSTOGRAM"); 

     final VBox verticalbox = new VBox(); 

     final HBox horizontalbox = new HBox(); 

     final Button draw = new Button("DRAW"); 

     CheckBox red = new CheckBox("RED"); 

     red.setSelected(true); 

     CheckBox blue = new CheckBox("BLUE"); 

     final TextField textfield = new TextField(); 

     horizontalbox.setAlignment(Pos.BOTTOM_RIGHT); 

     horizontalbox.setSpacing(46); 

     String filename = textfield.getText(); 


     XYChart.Series series1 = new XYChart.Series(); 

     bc.setPrefSize(800, 600); 

     horizontalbox.getChildren().addAll(draw, red, blue,textfield); 

     verticalbox.getChildren().addAll(bc, horizontalbox); 

     horizontalbox.setPadding(new Insets(10, 10, 10, 50)); 



     Scene scene = new Scene(new Group()); 

     ((Group)scene.getRoot()).getChildren().add(verticalbox); 

     stage.setScene(scene); 

     stage.show(); 

       //Setting the button on action if its clicked 
     draw.setOnAction(new EventHandler<ActionEvent>() { 
      @Override 
      public void handle(ActionEvent event) {   
       try { 
       hmw34.occur(textfield.getText(), series1); 
       bc.getData().add(series1); 
       bc.setLegendVisible(false); 
       } catch (FileNotFoundException e) { 
        System.out.println("Error : No such file"); 
       } 
      } 
     }); 


     // rengini düzenleyecek. 

    /** if (red.isSelected()) 
     bc.setStyle("-fx-bar-fill: #000080;"); // red box checked 

     else if (blue.isSelected()) 
     bc.setStyle("-fx-bar-fill: #b22222;");// The Blue check box checked*/ 

    } 

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

您是否看过使用JavaFX Charts的Oracle教程? – OttPrime

+0

是我看。他们只给出这个;图表系列行-fx-stroke-width:2px; -fx-effect:null; } .default-color0.chart-series-line {-fx-stroke:#e9967a; } .default-color1.chart-series-line {-fx-stroke:#f0e68c; } .default-color2.chart-series-line {-fx-stroke:#dda0dd; }但我不知道如何在我的代码中使用。 –

+0

您是否熟悉如此[link](https://docs.oracle.com/javafx/2/css_tutorial/jfxpub-css_tutorial.htm)中介绍的使用CSS剥皮应用程序? – OttPrime

回答

1
datad.nodeProperty().addListener(new ChangeListener<Node>() { 
      @Override 
      public void changed(ObservableValue<? extends Node> ov, Node oldNode, Node newNode) { 
       newNode.setStyle("-fx-bar-fill: red;"); 


      } 
     }); 
0

在各种不同可能性我尝试,乌拉那阿亚斯的用“的setStyle”方法的解决方案是唯一可行的。

假设“颜色”是描述所需颜色的字符串。 例如:

String color = "hsb(0,0,0)"; 
String opaqueColor = "hsb(0,0,0,0.2)"; 

对于ScatterChart,应用于LineChart,AreaChart,添加下面的听者在每个数据加入到系列:

data.nodeProperty().addListener(new ChangeListener<Node>() { 
      @Override 
      public void changed(ObservableValue<? extends Node> ov, Node oldNode, final Node node) { 
       if (node != null) {     
        node.setStyle(String.format("-fx-background-color: %s;", color)); 
       } 
      } 
} 

对于线型图:

serie.nodeProperty().addListener((ObservableValue<? extends Node> o, Node old, Node node) -> { 
       if (node != null) { 
        if (node instanceof Path) { 
         node.setStyle(String.format("-fx-stroke: %s;", chartSerie.color)); 
        } 
      }); 

对于areaChart:

serie.nodeProperty().addListener((ObservableValue<? extends Node> o, Node old, Node node) -> { 
       if (node != null) { 
        if (node instanceof Group) { 
         // AreaChart, assuming FILL is FIRST child and LINE is SECOND child 
         Group group = (Group) node; 
         Path fill = (Path) group.getChildren().get(0); 
         fill.setStyle(String.format("-fx-fill: %s;", chartSerie.opaqueColor)); 
         Path line = (Path) group.getChildren().get(1); 
         line.setStyle(String.format("-fx-stroke: %s;", chartSerie.color)); 
        } 
       } 
      });