Bonjour,
Je développe une petite application de gestion pour m’entraîner mais j'ai un petit soucis (indiqué dans le titre). Donc j'ai mon fichier fxml crée via Scene Builder qui est normalement correct :
J'ai donc une tableview avec mes 5 colonnes et un label en dessous qui va indiqué le nombres de données enregistrées dans la BDD (nombre de lignes).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 <?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.control.Label?> <?import javafx.scene.control.TableColumn?> <?import javafx.scene.control.TableView?> <?import javafx.scene.layout.AnchorPane?> <AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="539.0" prefWidth="741.0" xmlns="http://javafx.com/javafx/10.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ControllerListeView"> <children> <TableView fx:id="tableprod" layoutX="19.0" layoutY="16.0" prefHeight="464.0" prefWidth="702.0"> <columns> <TableColumn prefWidth="113.60003662109375" text="Titre" /> <TableColumn prefWidth="150.39996337890625" text="Interprète / Réalisateur" /> <TableColumn prefWidth="150.39996337890625" text="Type" /> <TableColumn prefWidth="150.39996337890625" text="Année de production" /> <TableColumn prefWidth="150.39996337890625" text="Note ( /5)" /> </columns> </TableView> <Label fx:id="compteprod" layoutX="19.0" layoutY="488.0" prefHeight="41.0" prefWidth="702.0" /> </children> </AnchorPane>
Et voici mon Controller :
A l'exécution, les données ne sont pas dans la table, ma tableview reste vide. Mais par contre, les données sont bien présentes comme le label peut l'indiquer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118 import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.scene.control.Label; import javafx.scene.control.TableView; /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ /** * * @author Thibault Dereumaux */ public class ControllerListeView { @FXML private TableView tableprod; @FXML private Label compteprod; private ObservableList<ObservableList> data; Statement stmtListe; Connexion maConnexion = new Connexion(); public interface Production { // INTERFACE public int nombre(); } public class Musique implements Production {// IMPLEMENTATION DE L'INTERFACE @Override public int nombre() { int nbMusique = 0; try { String requeteRecherche = "select * from productions where type = 'Musique'"; stmtListe = (Statement) maConnexion.ObtenirConnection().createStatement(); ResultSet rs = stmtListe.executeQuery(requeteRecherche); rs.last(); nbMusique = rs.getRow(); rs.beforeFirst(); } catch(SQLException ex) { System.err.println(ex); } return nbMusique; } } public class Film implements Production {// IMPLEMENTATION DE L'INTERFACE @Override public int nombre() { int nbFilm = 0; try { String requeteRecherche = "select * from productions where type = 'Film'"; stmtListe = (Statement) maConnexion.ObtenirConnection().createStatement(); ResultSet rs = stmtListe.executeQuery(requeteRecherche); rs.last(); nbFilm = rs.getRow(); rs.beforeFirst(); } catch(SQLException ex) { System.err.println(ex); } return nbFilm; } } @FXML public void initialize() { data = FXCollections.observableArrayList(); try{ String requeteListeMusiques = "select *from productions"; stmtListe = (Statement) maConnexion.ObtenirConnection().createStatement(); ResultSet rs = stmtListe.executeQuery(requeteListeMusiques); while(rs.next()){ ObservableList<String> row = FXCollections.observableArrayList(); for(int i=1 ; i<=rs.getMetaData().getColumnCount(); i++){ row.add(rs.getString(i)); } data.add(row); } tableprod.setItems(data); } catch(SQLException e){ System.out.println(e); } Production musique = new Musique(); Production film = new Film(); int nbMusique = musique.nombre(); int nbFilm = film.nombre(); int nbProduction = nbMusique + nbFilm; String texte = ""+nbProduction+" "; if(nbProduction == 0 || nbProduction == 1) texte += "production enregistrée "; else texte += "productions enregistrées "; if (nbMusique > 0) texte += "dont "; if(nbMusique == 1) texte += ""+nbMusique+" musique "; if(nbMusique > 1) texte += ""+nbMusique+" musiques "; if(nbMusique > 0 && nbFilm > 0) texte += "et "; if (nbMusique == 0 && nbProduction > 0) texte += "dont "; if(nbFilm == 1) texte += ""+nbFilm+" film "; if(nbFilm > 1) texte += ""+nbFilm+" films "; compteprod.setText(texte); } }
Comment puis-je faire en sorte que mes données s'affichent dans ma tableview ? :/
Je tiens à préciser que je ne connais pas très bien javaFX, l'application était à la base en swing, que je dois convertir en javaFX.
Ma BDD est correcte, c'est sur et certain, c'est un soucis de code ...
Merci de votre aide
Partager