【发布时间】:2018-02-26 18:06:16
【问题描述】:
我的窗口有以下控制器:
package window;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import java.util.Map;
import java.util.SortedMap;
public class StatisticsController {
@FXML
private BarChart<String, Number> barChartHistogram;
private SortedMap<String, Integer> _points;
final CategoryAxis xAxis = new CategoryAxis();
final NumberAxis yAxis = new NumberAxis();
public void onLoad(SortedMap<String, Integer> points) {
barChartHistogram = new BarChart<String, Number>(xAxis,yAxis);
barChartHistogram.setCategoryGap(0);
barChartHistogram.setBarGap(0);
xAxis.setLabel("Numer indeksu");
yAxis.setLabel("Ilość punktów");
XYChart.Series series = new XYChart.Series();
series.setName("Histogram");
for (Map.Entry<String, Integer> p: points.entrySet()) {
series.getData().add(new XYChart.Data(p.getKey(), p.getValue()));
}
barChartHistogram.getData().addAll(series);
_points = points;
}
@FXML
private void buttonShowPressed(ActionEvent event) {
xAxis.setLabel("Numer indeksu");
yAxis.setLabel("Ilość punktów");
barChartHistogram = new BarChart<String, Number>(xAxis,yAxis);
barChartHistogram.setCategoryGap(0);
barChartHistogram.setBarGap(0);
barChartHistogram.setTitle("XDDDDDDDDDDDDDDD");
barChartHistogram.setMaxHeight(1000);
XYChart.Series series = new XYChart.Series();
series.setName("Histogram");
for (Map.Entry<String, Integer> p: _points.entrySet()) {
series.getData().add(new XYChart.Data(p.getKey(), p.getValue()));
}
barChartHistogram.getData().addAll(series);
}
}
此窗口的.fxml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.chart.BarChart?>
<?import javafx.scene.chart.CategoryAxis?>
<?import javafx.scene.chart.NumberAxis?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/9.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="window.StatisticsController">
<children>
<BarChart fx:id="barChartHistogram" layoutX="40.0" layoutY="14.0" prefHeight="372.0" prefWidth="500.0">
<xAxis>
<CategoryAxis side="BOTTOM" />
</xAxis>
<yAxis>
<NumberAxis side="LEFT" />
</yAxis>
</BarChart>
<Button fx:id="buttonShow" layoutY="337.0" mnemonicParsing="false" onAction="#buttonShowPressed" text="Button" />
</children>
</AnchorPane>
现在的问题是当我按下按钮时,没有任何变化(onLoad() 方法用于测试 onLoad 类似 C# 的行为)。条形图在没有数据、标签或标题的情况下保持不变(我在调试器中检查了数据,barCharHistogram 对象在其data 属性下有我的数据)。我在做一些愚蠢的错误吗?我怎样才能让它像重绘条形图一样?
【问题讨论】:
-
您创建了一个新的条形图。您不打算更新现有的条形图吗?无论如何,如果你真的打算创建一个新的,你需要将它添加到场景中的某个地方。
-
啊,你说得对。但是,如何将
xAxis和yAxis添加到图表中? -
与图表一样,您已经在 FXML 中定义了轴。只需像处理图表一样将它们注入控制器,不要创建新轴。