【问题标题】:JavaFx 2.x: XYChart propertiesJavaFx 2.x:XYChart 属性
【发布时间】:2012-12-17 17:18:29
【问题描述】:

有一个简单的 XY LineChart,我想在不使用 css 的情况下将网格和线条描边(宽度)、样式(点、虚线等)和颜色设置为 rgb 以及背景颜色。

这可能吗?如果是这样,怎么做?我找不到任何合适的方法。

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class XyChart extends Application {

@Override
public void start(Stage stage) {
   stage.setTitle("Line plot");

   final CategoryAxis xAxis = new CategoryAxis();
   final NumberAxis yAxis = new NumberAxis(1, 21,0.1);

   yAxis.setTickUnit(1);
   yAxis.setPrefWidth(35);
   yAxis.setMinorTickCount(10);

   yAxis.setTickLabelFormatter(new NumberAxis.DefaultFormatter(yAxis){
        @Override
    public String toString(Number object){
            String label;
            label = String.format("%7.2f", object.floatValue());
            return label;
    }
});
final LineChart<String, Number>lineChart = new LineChart<String, Number>(xAxis, yAxis);

   lineChart.setCreateSymbols(false);
   lineChart.setAlternativeRowFillVisible(false);
   lineChart.setLegendVisible(false);

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

    series1.getData().add(new XYChart.Data("Jan", 1));
    series1.getData().add(new XYChart.Data("Feb", 4));
    series1.getData().add(new XYChart.Data("Mar", 2.5));
    series1.getData().add(new XYChart.Data("Apr", 5));
    series1.getData().add(new XYChart.Data("May", 6));
    series1.getData().add(new XYChart.Data("Jun", 8));
    series1.getData().add(new XYChart.Data("Jul", 12));
    series1.getData().add(new XYChart.Data("Aug", 8));
    series1.getData().add(new XYChart.Data("Sep", 11));
    series1.getData().add(new XYChart.Data("Oct", 13));
    series1.getData().add(new XYChart.Data("Nov", 10));
    series1.getData().add(new XYChart.Data("Dec", 20));


    BorderPane pane = new BorderPane();
    pane.setCenter(lineChart);          
    Scene scene = new Scene(pane, 800, 600);
    lineChart.setAnimated(false);
    lineChart.getData().addAll(series1);       

    stage.setScene(scene);
    stage.show();
}

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

【问题讨论】:

标签: javafx-2 linechart


【解决方案1】:

是的,您的案例在逻辑上比How to dynamically change line style in JavaFX 2.0 line chart? 更简单,并且您还要求提供更多功能。标记为重复只是指向类似问题和答案的一种简单方法。

我认为答案是一样的(使用 css 查找)——JavaFX 2.2 中没有 lineChart.setStroke 这样的 api。

最终,一些只能通过 css 查找访问的东西可能会通过 Java API 提供。例如,一些区域背景的东西是 JavaFX 8 中的 API,因此,一旦您获得对它的引用,您就可以通过 api 对其进行修改——尽管如此,我仍然认为没有办法获得对它的引用类似于没有 CSS 查找的图表背景或一些难以想象的丑陋 getChildren().get(idx) 调用序列或入侵图表源代码。在这些选项中,我认为 css 查找方法在大多数情况下是最可取的。

请注意,您并没有真正避免使用 css 文件,因为 JavaFX 2.2 附带了一个用于设置图表样式的 default css 文件。另请注意,链接到动态线条样式问题的 sample solution 不提供用户样式表 - 所有用户样式都在代码中完成。

【讨论】:

  • 非常感谢您的帮助。
猜你喜欢
  • 2013-04-28
  • 2016-09-20
  • 2014-07-15
  • 2012-05-17
  • 2015-12-07
  • 2017-01-16
  • 2018-10-17
  • 1970-01-01
相关资源
最近更新 更多