有一个简单的 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);
}
}
最佳答案
是的,你的情况在逻辑上比 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动态线条样式问题不提供用户样式表 - 所有用户样式都是在代码中完成的。
关于javafx-2 - JavaFX 2.x : XYChart properties,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14137314/