1 pièce(s) jointe(s)
Données MySQL à une table view
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:
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:
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 :
Pièce jointe 397541
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