IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaFX Discussion :

Créer une ou plusieurs colonnes dans un tableView avec un bouton


Sujet :

JavaFX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Mai 2012
    Messages : 29
    Par défaut Créer une ou plusieurs colonnes dans un tableView avec un bouton
    Bonsoir

    J'aimerais réaliser un tableau qui serait capable de récupérer les colonnes d'une table SQL et comme vous le savez une table SQL n'est jamais la même quand nous lui changeons son nom.

    Je voudrais réaliser un tableau qui sache faire la différence quand nous changeons son nom.

    Ma question est :
    Comment je peux créer une ou plusieurs TableColumn dans un tableview,
    en utilisant un bouton comme exécution qui chargera une ArrayList ou une ObservableList pour exemple.


    Nom : TableauTest.PNG
Affichages : 1631
Taille : 4,3 Ko

    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
    import java.util.ArrayList;
    import javafx.application.Application;
    import javafx.geometry.Insets;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.control.TableView;
    import javafx.scene.layout.HBox;
    import javafx.scene.layout.Priority;
    import javafx.scene.layout.VBox;
    import javafx.stage.Stage;
     
    public class Main extends Application{
     
    	static TableView tableView;
     
    	@Override
    	public void start(Stage primaryStage) throws Exception {
    		//HBOX: bouton
    		HBox hbox1 = new HBox();
    		Button btn = new Button("Add Columns");
    		btn.setOnAction(e -> addColumn());
    		hbox1.getChildren().addAll(btn);
    		hbox1.setPadding(new Insets(5));
     
    		//HBOX: TableView
    		HBox hbox2 = new HBox();
    		tableView = new TableView();
     
     
    		hbox2.setPadding(new Insets(5));
    		HBox.setHgrow(tableView, Priority.ALWAYS);
    		hbox2.getChildren().add(tableView);
     
    		//VBOX: hbox1, hbox2
    		VBox vBox = new VBox();
    		vBox.getChildren().addAll(hbox1, hbox2);
     
    		Scene scene = new Scene(vBox, 400, 200);
    		primaryStage.setScene(scene);
    		primaryStage.show();
    	}
     
     
    	public ArrayList<String> addColumn() {
     
    		ArrayList<String> listeColumn = new ArrayList<String>();
     
    		listeColumn.add("a");
    		listeColumn.add("b");
    		listeColumn.add("c");
     
     
    		return listeColumn;
    	}
     
     
    	public static void main(String[] args) {
    		launch(args);
    	}
    }
    j'espère que mes explications ont été claires, par avance merci de votre aide.

  2. #2
    Membre averti
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Mai 2012
    Messages : 29
    Par défaut
    Bonjour à tous

    Je suis arrivé à résoudre le problème que je cherchais à faire, donc je vous le partage le code ci-dessous.

    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
    import java.util.ArrayList;
     
    import javafx.application.Application;
    import javafx.collections.FXCollections;
    import javafx.collections.ObservableList;
    import javafx.geometry.Insets;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.control.TableColumn;
    import javafx.scene.control.TableView;
    import javafx.scene.layout.HBox;
    import javafx.scene.layout.Priority;
    import javafx.scene.layout.VBox;
    import javafx.stage.Stage;
     
    public class Main extends Application{
     
    	static HBox hbox1, hbox2;
    	@SuppressWarnings("rawtypes")
    	static TableView tableView;
    	@SuppressWarnings("rawtypes")
    	static TableColumn tableColumn1;
    	@SuppressWarnings("rawtypes")
    	static ObservableList<TableColumn> c;
    	static ArrayList<String> listeCol;
     
    	@SuppressWarnings({ "rawtypes" })
    	@Override
    	public void start(Stage primaryStage) throws Exception {
     
    		//HBOX: bouton
    		HBox hbox1 = new HBox();
    		Button btn = new Button("Add Columns");
    		btn.setStyle("-fx-font: 12 arial; -fx-base: #0066FF;");
    		btn.setOnAction(e -> addColumn());
    		hbox1.getChildren().addAll(btn);
    		hbox1.setPadding(new Insets(5));
     
    		//HBOX: TableView
    		hbox2 = new HBox();
    		tableView = new TableView();
     
    		hbox2.getChildren().addAll(tableView);
    		HBox.setHgrow(tableView, Priority.ALWAYS);
     
    		//VBOX: hbox1, hbox2
    		VBox vBox = new VBox();
    		vBox.getChildren().addAll(hbox1, hbox2);
     
    		Scene scene = new Scene(vBox, 400, 200);
    		primaryStage.setScene(scene);
    		primaryStage.show();
    	}
     
    	@SuppressWarnings("unchecked")
    	private void addColumn() {
     
    		listeCol = new ArrayList<String>();
    		listeCol.add("A");
    		listeCol.add("B");
    		listeCol.add("C");
    		listeCol.add("D");
     
    		tableView.getColumns().clear();
    		c = FXCollections.observableArrayList();
     
    		for (int i = 0; i < listeCol.size(); i++) {			
    			c.add(new TableColumn<>(listeCol.get(i)));
    		}
     
    		tableView.getColumns().addAll(c);
    		tableView.getItems().add(c);
    	}
     
    	public static void main(String[] args) {
    		launch(args);
    	}
    }
    j'espère que ce poste aidera les débutants, bonne journée à tous.

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 900
    Billets dans le blog
    54
    Par défaut
    Ben, une fois que tu as les noms tu cree les colonnes et tu les mets dans ta table :

    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
    public class Main extends Application {
     
        static TableView tableView;
     
        @Override
        public void start(Stage primaryStage) throws Exception {
            tableView = new TableView();
     
            //HBOX: bouton
            HBox hbox1 = new HBox();
            Button btn = new Button("Add Columns");
            btn.setOnAction(e -> {
                List<String> columnNamesFromSQL = addColumn();
                tableView.getColumns().setAll(columnNamesFromSQL
                        .stream()
                        .map(name -> {
                            final TableColumn column = new TableColumn(name);
    //                        column.setCellValueFactory([...]);
    //                        column.setCellFactory([...]);
                            return column;
                        })
                        .collect(Collectors.toList()));
            });
            hbox1.getChildren().addAll(btn);
            hbox1.setPadding(new Insets(5));
     
            //HBOX: TableView
            HBox hbox2 = new HBox();
     
            hbox2.setPadding(new Insets(5));
            HBox.setHgrow(tableView, Priority.ALWAYS);
            hbox2.getChildren().add(tableView);
     
            //VBOX: hbox1, hbox2
            VBox vBox = new VBox();
            vBox.getChildren().addAll(hbox1, hbox2);
     
            Scene scene = new Scene(vBox, 400, 200);
            primaryStage.setScene(scene);
            primaryStage.show();
        }
     
        public ArrayList<String> addColumn() {
     
            ArrayList<String> listeColumn = new ArrayList<String>();
     
            listeColumn.add("a");
            listeColumn.add("b");
            listeColumn.add("c");
     
            return listeColumn;
        }
     
        public static void main(String[] args) {
            launch(args);
        }
    }
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  4. #4
    Membre averti
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Mai 2012
    Messages : 29
    Par défaut
    Bonsoir

    Merci Bouye pour l'exemple que vous avez laissé ci-dessus.

    Je ne sais pas si je dois faire un nouveau poste au sujet des Rows pour la tableView, car depuis quelques jours je ne trouve pas de solution à mes attentes.

    Je cherche une méthode pour remplir la ligne de ma table SQL sans passer par une class Person comme montre cet exemple : http://www.java2s.com/Code/Java/Java...oTableView.htm

    Je me demande s'il y a une autres possibilité d'Ajouter une nouvelle rangée sans passer par la class Person

    D'avance merci.

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 900
    Billets dans le blog
    54
    Par défaut
    Pas vraiment en l’état puisque dans cet exemple la table est une liste de Person (rappel : en JFX, les tables sont des listes). Par contre tu peux t'arranger pour que la table soit une liste d'une interface plus élevée qui soit dérivée a la fois en personnes SQL qui viennent de la base et de personnes lite créées dans l'UI mais pas encore postées / comitted dans la base.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  6. #6
    Membre averti
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2012
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Mai 2012
    Messages : 29
    Par défaut
    re bonjour Bouye

    Je doute bien que vous essayer de me dire quelque chose, mais pour être franc je suis un peux perdue avec les explications.

    Pour info : Je me connecte à via WampServeur en localhost et j'utilise la lib : mysql-connector-java-5.1.38.jar
    J'utilise aussi la lib javaFX pour mon fameux tableau visuel.

    voici le main :
    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
    import connexionMSQL.ConnectionMSQL;
    import javafx.application.Application;
    import javafx.collections.FXCollections;
    import javafx.collections.ObservableList;
    import javafx.geometry.Insets;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.control.TableColumn;
    import javafx.scene.control.TableView;
    import javafx.scene.control.TextField;
    import javafx.scene.layout.HBox;
    import javafx.scene.layout.Priority;
    import javafx.scene.layout.VBox;
    import javafx.stage.Stage;
     
    public class Main extends Application{
     
    	static ConnectionMSQL connectionMSQL;
     
    	@SuppressWarnings("rawtypes")
    	TableView tableView;
     
    	TextField databaseTF, tableTF;
     
    	@SuppressWarnings({ "rawtypes", "static-access" })
    	public void start(Stage window) throws Exception {
     
    		connectionMSQL = new ConnectionMSQL();
     
    		HBox hbox1 = new HBox();
     
    		databaseTF = new TextField("database");
    		databaseTF.setPromptText("DATABASE");
    		databaseTF.setFocusTraversable(false);
     
    		tableTF = new TextField("clients");
    		tableTF.setPromptText("TABLE");
    		tableTF.setFocusTraversable(false);
     
    		Button btnLoading = new Button("Loading SQL");
    		btnLoading.setOnAction(e -> addColumn());
     
    		hbox1.setPadding(new Insets(5));
    		hbox1.setSpacing(10);
    		hbox1.getChildren().addAll(databaseTF, tableTF, btnLoading);
     
    		HBox hbox2 = new HBox();
    		tableView = new TableView();
     
     
    		hbox2.getChildren().add(tableView);
    		hbox2.setHgrow(tableView, Priority.ALWAYS);
     
    		VBox vbox1 = new VBox(hbox1, hbox2);
    		vbox1.getChildren().addAll();
     
    		Scene scene = new Scene(vbox1, 415, 300);
    		window.setScene(scene);
    		window.show();
    	}
     
     
    	@SuppressWarnings({ "rawtypes", "unchecked" })
    	private void addColumn() {
     
    		ObservableList<TableColumn> c = FXCollections.observableArrayList();
    		connectionMSQL.readMSQL(databaseTF.getText(), tableTF.getText());
     
    		tableView.getColumns().clear();
    		c = FXCollections.observableArrayList();
     
    		for (int i = 0; i < connectionMSQL.getCol().size(); i++) {	
    			c.add(new TableColumn<>(connectionMSQL.getCol().get(i)));
    		}
     
    		tableView.getColumns().addAll(c);
    		tableView.getItems().add(c);
    		connectionMSQL.getCol().clear();
    	}
     
    	public static void main(String[] args) {
    		launch(args);
    	}
    }
    voici la connection SQL:
    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
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
     
    import javafx.collections.FXCollections;
    import javafx.collections.ObservableList;
     
    import com.mysql.jdbc.PreparedStatement;
     
    public class ConnectionMSQL {
     
    	private String url;
    	private String driver;
    	private String user;
    	private String pass;
     
        ObservableList<String> col = FXCollections.observableArrayList();
        ObservableList<String> row = FXCollections.observableArrayList();
     
    	public ConnectionMSQL() {
    		super();
    		url = "jdbc:mysql://localhost:3306/";
    		driver = "com.mysql.jdbc.Driver";
    		user = "root";
    		pass = "";
    	}
     
    	public void readMSQL(String database, String table){
     
    		try {
     
    			Class.forName(driver);
    			Connection connection = DriverManager.getConnection(url + database, user, pass);
    			PreparedStatement ps = (PreparedStatement) connection.prepareStatement("SELECT * FROM " + table);
    			ResultSet rs = ps.executeQuery();
    			ResultSetMetaData rsmd = rs.getMetaData();
     
    			for (int i = 1; i <= rsmd.getColumnCount(); i++) {
    				System.out.print(rsmd.getColumnName(i) + "\t\t");
    				col.add(rsmd.getColumnName(i));
    			}
     
    			System.out.println();
     
    			while(rs.next()){
     
    				for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
    					System.out.print(rs.getString(i) + "\t\t");
    					row.add(rs.getString(i));
     
    				}
     
    				System.out.println();
     
    			}
     
    			ps.close();
    			connection.close();
     
    		} catch (Exception e) {
    			System.out.println(e);
    		}
     
    	}
     
     
    	// GETTERS AND SETTERS
    	public String getUrl() {
    		return url;
    	}
     
    	public void setUrl(String url) {
    		this.url = url;
    	}
     
    	public String getDriver() {
    		return driver;
    	}
     
    	public void setDriver(String driver) {
    		this.driver = driver;
    	}
     
    	public String getUser() {
    		return user;
    	}
     
    	public void setUser(String user) {
    		this.user = user;
    	}
     
    	public String getPass() {
    		return pass;
    	}
     
    	public ObservableList<String> getCol() {
    		return col;
    	}
     
    	public void setCol(ObservableList<String> col) {
    		this.col = col;
    	}
     
    	public ObservableList<String> getRow() {
    		return row;
    	}
     
    	public void setRow(ObservableList<String> row) {
    		this.row = row;
    	}
     
    	public void setPass(String pass) {
    		this.pass = pass;
    	}
    }
    Voici le résultat que j'obtiens en images, d'une database différente pour vous montrer que mes colonnes sont indépendantes et non prédéfinies.


    Nom : coloneSQL.PNG
Affichages : 1484
Taille : 23,7 Ko
    Nom : Colone2SQL.PNG
Affichages : 1480
Taille : 46,2 Ko


    Jusqu'à ici mon problème persiste depuis quelques jours, car je n'arrive pas à créer les rangées de la database sur le tableau.
    Pour info les données sont récupérables par c'est deux ObservableList dans la class connectionMSQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ObservableList<String> col = FXCollections.observableArrayList();
    ObservableList<String> row = FXCollections.observableArrayList();
    Si un de vous, vous avez une solution à mon problème, je suis preneur par avance merci de l'aide.

  7. #7
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 900
    Billets dans le blog
    54
    Par défaut
    Du coup, qu'est-ce qu'est censé contenir ta table ?
    Ton select() te retournera un ResultSet mais que veux tu en faire après ? Essayer de l'afficher directement ou le convertir en un objet local (non-lié à la BD) ? Je ne fais pas assez de JDBC pour savoir quelle est la meilleure pratique.

    Tu peux aller voir : How to fill up a TableView with database data sur StackOverFlow (et Updated: Dynamic TableView Data From Database pour le blog qui a inspiré la réponse). Ici ils convertissent chaque ligne du ResultSet en List<String> qui sont en suite placées dans la table (même si le code ne l'indique pas on a donc une TableView<List<String>> en fait).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/04/2016, 07h31
  2. Réponses: 2
    Dernier message: 23/07/2009, 15h30
  3. Réponses: 9
    Dernier message: 08/01/2008, 13h58
  4. Afficher plusieurs colonnes dans une ListBox
    Par codial dans le forum Bases de données
    Réponses: 11
    Dernier message: 23/01/2007, 12h48
  5. Réponses: 5
    Dernier message: 27/12/2006, 16h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo