Je travaille avec Area Chart of JavaFX. Je souhaite ajouter des séries dynamiquement après que l'utilisateur saisisse des valeurs dans les champs de texte et appuie sur le bouton Ajouter. Je souhaite également ajouter des fonctionnalités de suppression et d'annulation. Supprimer la fonctionnalité fonctionnerait comme si, par exemple, il y avait plusieurs lignes sur la carte de zone, chaque ligne représente une série, l'utilisateur peut supprimer n'importe quelle ligne qu'il souhaite en cliquant sur cette ligne et après avoir cliqué sur le bouton Supprimer. Je veux également ajouter des fonctionnalités d'annulation afin que l'utilisateur puisse annuler ses actions.JavaFX: Comment ajouter une série serveral dynimically sur Area Chart et supprimer une ligne (série) d'un graphique?
L'interface est comme ceci:
Par exemple l'utilisateur peut tracer une ligne comme celui-ci en remplissant les champs de texte:
Maintenant, nous allons dire la l'utilisateur veut supprimer la série qui est en couleur rouge ce que je veux est l'utilisateur cliquez dessus et après cliquez sur le bouton supprimer, il effaçons la série rouge comme ceci:
Jusqu'à présent, j'ai essayé ceci:
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.scene.Node;
import javafx.scene.chart.AreaChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.control.TextField;
import javafx.scene.input.MouseEvent;
public class SampleController {
@FXML
private NumberAxis xAxis;
@FXML
private NumberAxis yAxis;
@FXML
private AreaChart<Number, Number> areaChart;
@FXML
private TextField txtSt;
@FXML
private TextField txtEt;
@FXML
private TextField txtNb;
public void initialize() {
areaChart.setTitle("Chronos");
xAxis.setLabel("Heures");
yAxis.setLabel("Employés");
}
//Button add functionality
@FXML
private void generateGraph() {
//double start = Double.parseDouble(txtSt.getText());
double end = Double.parseDouble(txtEt.getText());
int numberEmployees = Integer.parseInt(txtNb.getText());
XYChart.Series<Number, Number> series= new XYChart.Series<>();
for (double start = Double.parseDouble(txtSt.getText()); start<=end; start++) {
series.getData().add(new XYChart.Data<Number, Number>(start, numberEmployees));
}
// Add Series to AreaChart.
areaChart.getData().add(series);
//Mouse click even for series
setOnMouseEventsOnSeries(series.getNode(),
areaChart, "Series is clicked");
}
private void setOnMouseEventsOnSeries(Node node,
final AreaChart chart, final String label) {
node.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent t) {
chart.setTitle(label);
}
});
}
}
fichier FXML:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.chart.AreaChart?>
<?import javafx.scene.chart.NumberAxis?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.VBox?>
<VBox alignment="CENTER" prefHeight="800.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.SampleController">
<children>
<AreaChart fx:id="areaChart" prefHeight="799.0" prefWidth="800.0" VBox.vgrow="ALWAYS">
<xAxis>
<NumberAxis autoRanging="false" minorTickCount="1" minorTickLength="1.0" side="BOTTOM" tickLabelGap="1.0" tickLength="1.0" tickUnit="1.0" upperBound="24.0" fx:id="xAxis" />
</xAxis>
<yAxis>
<NumberAxis fx:id="yAxis" autoRanging="false" minorTickLength="1.0" side="LEFT" tickLabelGap="1.0" tickUnit="1.0" upperBound="10.0" />
</yAxis>
</AreaChart>
<HBox alignment="CENTER" prefHeight="193.0" prefWidth="800.0">
<children>
<TextField fx:id="txtSt" promptText="Start Value" />
<TextField fx:id="txtEt" promptText="End Value" />
<TextField fx:id="txtNb" promptText="Number of Employees" />
</children>
</HBox>
<HBox alignment="CENTER" prefHeight="71.0" prefWidth="800.0">
<children>
<Button mnemonicParsing="false" onAction="#generateGraph" prefHeight="31.0" prefWidth="137.0" text="Add" />
<Button layoutX="342.0" layoutY="12.0" mnemonicParsing="false" prefHeight="31.0" prefWidth="137.0" text="Delete" />
<Button layoutX="410.0" layoutY="12.0" mnemonicParsing="false" prefHeight="31.0" prefWidth="137.0" text="Undo" />
</children>
</HBox>
</children>
</VBox>
Quelqu'un peut-il me guider comment puis-je atteindre ces fonctionnalités.
Ajoutez votre fichier FXML. – Sedrick
@SedrickJefferson La question est mise à jour – Junaid
Bonjour @Junaid Désolé je ne suis pas actif dans SO ces jours-ci parce que j'ai commencé à travailler et à peine eu un temps. Cependant, il semble que vous ayez reçu une bonne réponse de Sedrick. :) – Yahya