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 :

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>
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).

Et voici mon Controller :

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);    
    }
}
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 :

Nom : 15318423859649_Capture.PNG
Affichages : 1965
Taille : 16,4 Ko

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