Я пытаюсь создать простое приложение JavaFX, используя LineChart
. Я хочу добавить сохранить все серии, которые я добавил на графике, щелкнуть после щелчка.
Я видел другие ответы об этой проблеме, но даже если я очистил все списки моего класса обслуживания, есть дублированные серии
Вот мой код:
Приложение
public class App extends Application {
@Override
public void start(Stage stage) throws Exception {
final NumberAxis xAxis = new NumberAxis();
final NumberAxis yAxis = new NumberAxis();
BorderPane b = new BorderPane();
MyService ser =new MyService();
LineChart<Number, Number> chart = new LineChart<>(xAxis, yAxis);
Button button = new Button("start");
Button button1 = new Button("start2");
button.setOnAction(((event)->{
ser.addEventHandler(WorkerStateEvent.WORKER_STATE_SUCCEEDED, //
new EventHandler<WorkerStateEvent>() {
@Override
public void handle(WorkerStateEvent t) {
chart.getData().add(ser.getValue());
}
});
ser.restart();
}));
button1.setOnAction(((event) ->{
XYChart.Series<Number, Number> series = new XYChart.Series<Number, Number>();
series.getData().add(new XYChart.Data<Number, Number>(Math.random(), Math.random()));
series.getData().add(new XYChart.Data<Number, Number>(Math.random(), Math.random()));
series.getData().add(new XYChart.Data<Number, Number>(Math.random(), Math.random()));
chart.getData().add(series);
}));
b.setBottom(button);
b.setCenter(chart);
b.setLeft(button1);
Scene sc = new Scene(b);
stage.setScene(sc);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Мой класс обслуживания
public class MyService extends Service<XYChart.Series<Number, Number>> {
@Override
protected Task<XYChart.Series<Number, Number>> createTask() {
return new Task<XYChart.Series<Number, Number>>() {
@Override
protected XYChart.Series<Number, Number> call() throws Exception {
XYChart.Series<Number, Number> series = new XYChart.Series<Number, Number>();
series.getData().add(new XYChart.Data<Number, Number>(Math.random(), Math.random()));
series.getData().add(new XYChart.Data<Number, Number>(Math.random(), Math.random()));
series.getData().add(new XYChart.Data<Number, Number>(Math.random(), Math.random()));
return series;
}
};
}
}
Мы можем видеть дублированные серии с метками
, возможно, мне придется go через временную переменную, а затем добавить серию вне дескриптора. В этом случае это хорошо, за исключением того, что у меня есть нулевое значение seriesTotal ..
public class App extends Application {
final NumberAxis xAxis = new NumberAxis();
final NumberAxis yAxis = new NumberAxis();
private XYChart.Series<Number, Number> seriesTotal = new XYChart.Series<Number, Number>();
private LineChart<Number, Number> chart = new LineChart<>(xAxis, yAxis);
@Override
public void start(Stage stage) throws Exception {
BorderPane b = new BorderPane();
MyService ser = new MyService();
// Job j = new Job();
Button button = new Button("start");
Button button1 = new Button("start2");
List<Object> test = new ArrayList<>();
button.setOnAction(((event) -> {
test.clear();
ser.addEventHandler(WorkerStateEvent.WORKER_STATE_SUCCEEDED, //
new EventHandler<WorkerStateEvent>() {
@Override
public void handle(WorkerStateEvent t) {
seriesTotal = ser.getValue();
//test.add(ser.getValue());
//chart.getData().add(ser.getValue());
}
});
ser.restart();
System.out.println(seriesTotal);
chart.getData().add(seriesTotal);
seriesTotal.getData().clear();
}));
button1.setOnAction(((event) -> {
XYChart.Series<Number, Number> series1 = new XYChart.Series<Number, Number>();
series1.getData().add(new XYChart.Data<Number, Number>(Math.random(), Math.random()));
series1.getData().add(new XYChart.Data<Number, Number>(Math.random(), Math.random()));
series1.getData().add(new XYChart.Data<Number, Number>(Math.random(), Math.random()));
chart.getData().add(series1);
// chart.getData().setAll(arg0);
}));
b.setBottom(button);
b.setCenter(chart);
b.setLeft(button1);
Scene sc = new Scene(b);
stage.setScene(sc);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
enter code here