Javafx PieChart créé avec le générateur de scène n'affiche pas les données
Question
J'ai du mal à utiliser certains exemples Javafx d'Oracle car les « scènes » ne sont pas créées avec Scene Builder, le code diffère donc de ce pour quoi je souhaite l'utiliser.
J'essaie de créer une mise en page avec SceneBuilder contenant un diagramme circulaire.J'ai défini le fxid du graphique sur 'myPieChart' avec le correspondant @FXML private Chart myPieChart;
au début de mon code.
J'ai également ajouté le code suivant qui est exécuté lors de l'initialisation et qui, je pensais, aurait créé le graphique : -
ObservableList<PieChart.Data> pieChartData = FXCollections.observableArrayList(
new PieChart.Data("Grapefruit", 13),
new PieChart.Data("Oranges", 25),
new PieChart.Data("Plums", 10),
new PieChart.Data("Pears", 22),
new PieChart.Data("Apples", 30));
PieChart myPieChart = new PieChart(pieChartData);
Toutes les valeurs sont placées dans une liste observable, puis le diagramme circulaire est instancié avec la valeur ObsevableList.
Malheureusement, mon diagramme circulaire ne s'affiche pas... qu'est-ce qui me manque, les gars ?
Bravo pour toute aide.
La solution
Ne créez pas de nouveau PieChart.
Le processus de chargement FXML créera une instance de graphique pour vous et l'insérera en tant qu'enfant du volet de présentation défini par FXML.L'annotation @FXML injectera une référence au graphique dans votre contrôleur.
Tout ce que vous avez à faire dans l'initialiseur de votre contrôleur est de remplir le graphique existant avec vos données.Vous pouvez le faire en appelant setData sur monPieChart.
Autres conseils
Vous pouvez faire comme ça en définissant simplement l'identifiant dans fxml pour votre graphique
public class GraphScreenController implements Initializable {
@FXML
PieChart chart;
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
ObservableList<PieChart.Data> pieChartData =
FXCollections.observableArrayList(
new PieChart.Data("Executed", 60),
new PieChart.Data("Passed", 25),
new PieChart.Data("Fails", 15));
chart.setData(pieChartData);
}
}