【发布时间】:2016-08-24 14:38:16
【问题描述】:
我在 SceneBuilder 中创建了一个 LineChart,并正在尝试研究如何将数据写入其中,以便实时绘制。
在我的Controller 课程中,我有:
public class Controller {
...
@FXML private LineChart<Number, Number> chart;
@FXML private NumberAxis xAxis, yAxis;
private XYChart.Series<Number, Number> series;
private boolean run = true;
...
public init() {
xAxis.setAutoRanging(false);
xAxis.setTickLabelsVisible(false);
xAxis.setTickMarkVisible(false);
xAxis.setMinorTickVisible(false);
series = new XYChart.Series<Number, Number>();
series.setName("Data plot");
chart.setAnimated(false);
chart.getData().addAll(series);
}
...
//When a button is clicked, a signal is sent to my server that starts a
//tracking application. Then it enters the while loop. This code
//then makes requests to the server for data (getData()).
//This is the data that I would like to display.
@FXML
private track() {
connection.startTracking();
Platform.runLater(new Runnable() {
@Override
public void run() {
while(run) {
int[] data = connection.getData() //from somewhere else
dataManager.dataToSeries(data, series);
if(!series.getData.isEmpty()) {
chart.getData().retainAll();
chart.getData.addAll(series);
}
}
}
}
}
这是来自dataController的dataToSeries()方法
...
private void dataToSeries(int[] data, XYChart.Series<Number, Number> series) {
int yValue = 0;
int len = data.length;
for (int i = 0; i < len; i++) {
series.getData().add(new XYChart.Data<Number, Number>(data[i], yValue);
yValue++;
}
}
如果我打印出Controller 中的系列,我会得到我期望的数据,但是它的格式是:
Series: [Data[11,1,null], Data[16,2,null], Data[21,3,null]
谁能解释为什么我的LineChart 上没有显示这些数据?
【问题讨论】:
-
IDK 如何调用
addToChart,但由于它包含一个无限循环,这很容易阻塞 UI 线程,从而阻止用户界面的任何更新。另一方面,如果它在不同的线程上运行,您正在从非应用程序线程更新 UI,这也很糟糕...... -
抱歉,我会更新我的代码以使其更清晰。我试图省略不相关的代码
-
我已经包含了对
addToChart()方法的描述,现在我将其更改为track()(这是我程序中的实际名称)
标签: java javafx charts scenebuilder