我想在折线图区域内显示图例。默认情况下,图表区域外的图例显示基于Side.RIGHT,Side.LEFT等参数已传递给chart.setLegendSide(Side),如下例所示: -
import javafx.application.Application;
import javafx.geometry.Side;
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.stage.Stage;
public class LineChartSample extends Application {
@Override public void start(Stage stage) {
stage.setTitle("Line Chart Sample");
final CategoryAxis xAxis = new CategoryAxis();
final NumberAxis yAxis = new NumberAxis();
xAxis.setLabel("Month");
final LineChart<String,Number> lineChart =
new LineChart<String,Number>(xAxis,yAxis);
lineChart.setTitle("Graph Example");
lineChart.setLegendSide(Side.RIGHT);
XYChart.Series series1 = new XYChart.Series();
series1.setName("Legend 1");
series1.getData().add(new XYChart.Data("Jan", 23));
series1.getData().add(new XYChart.Data("Feb", 14));
series1.getData().add(new XYChart.Data("Mar", 15));
series1.getData().add(new XYChart.Data("Apr", 24));
series1.getData().add(new XYChart.Data("May", 34));
series1.getData().add(new XYChart.Data("Jun", 36));
XYChart.Series series2 = new XYChart.Series();
series2.setName("Legend 2");
series2.getData().add(new XYChart.Data("Jul", 55));
series2.getData().add(new XYChart.Data("Aug", 54));
series2.getData().add(new XYChart.Data("Sep", 48));
series2.getData().add(new XYChart.Data("Oct", 27));
series2.getData().add(new XYChart.Data("Nov", 37));
series2.getData().add(new XYChart.Data("Dec", 29));
Scene scene = new Scene(lineChart,800,600);
lineChart.getData().addAll(series1, series2);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
我找不到在图表区域内显示图例的方法。最多我会有2-3个传说并使用java 8。
谢谢
答案 0 :(得分:2)
我认为没有任何干净的方法可以做到这一点。我拿出了setLegendSide
并在stage.show()
for (Node n : lineChart.lookupAll(".chart-legend")) {
n.setTranslateY(-200);
}
在场景显示后,您可以查找&#39;场景中的节点。我找到了传说(按照它的css名称)并将其移动了200。
您还可以在css文件中翻译图例
.chart-legend{
-fx-translate-y: -200;
}
只需将css文件添加到您的场景中(如果它在同一个包中,就像这样)。
scene.getStylesheets().add(this.getClass().getResource("css.css").toExternalForm());
这仍然会在图表下留下空间,因此它并不完美。我注意到你可以添加这个css来给chart-content
更多的空间
.chart .chart-content{
-fx-padding: 5 5 -25 5;
}