Partage
  • Partager sur Facebook
  • Partager sur Twitter

toujours affichage des valeurs sur table view

    1 septembre 2020 à 13:21:58

    Bonjour , je vous explique mon algorithme afin que vous puissiez m'aider

    J'ai 4 boutons, l'un insert, l'autre modifie/supprimer, l'autre encore affiche la liste toute entière et dernier affiche la liste à partir d'une recherche. ce qui me trouble c'est l'affichage seulement. Pour celui de l'affichage de la liste toute entière j'ai l'associé avec la méthode RefreshList() et pour celui de la recherche c rechercher(). Au lancement tout fonctionne. Par exemple une fois que j'ai fait une recherche ça m'affiche les tuples en question et si j'actualise ça m'affiche toute liste. ça je suis totalement satisfait. Mais au moment que j'ai affiché la liste toute entière en premier lieu, pour celui de la recherche ça fonctionne pas. il garde toujours la liste toute entière alors que il doit efface la liste de l'ancien événement de l'affichage de toute la liste pour garder la liste de la recherche

    Et merci pour votre soutient

    EDIT Benzouye : Code posté dessous suite à bug Markdown ;)

    -
    Edité par Benzouye 1 septembre 2020 à 15:07:18

    • Partager sur Facebook
    • Partager sur Twitter
      1 septembre 2020 à 15:05:47

      Salut,

      tu as un soucis avec l'utilisation de la balise code. Peux-tu éditer ton message ?

      Sinon, je viens de regarder rapidement ton code. Tu ne fais que des add sur ta collection (data). Pour vider la liste entre 2 traitements, il faut appeler clear / remove 

      -
      Edité par rybla 1 septembre 2020 à 15:07:21

      • Partager sur Facebook
      • Partager sur Twitter
        1 septembre 2020 à 15:07:42

        package Controller;
        
        import java.io.IOException;
        import java.net.URL;
        import java.sql.Connection;
        import java.sql.PreparedStatement;
        import java.sql.ResultSet;
        import java.util.ArrayList;
        import java.util.ResourceBundle;
        
        import connecte.dbConnection;
        import connecte.dcConnectioninfo;
        import javafx.beans.property.ReadOnlyStringWrapper;
        import javafx.collections.FXCollections;
        import javafx.collections.ObservableList;
        import javafx.event.ActionEvent;
        import javafx.fxml.FXML;
        import javafx.fxml.FXMLLoader;
        import javafx.fxml.Initializable;
        import javafx.scene.Parent;
        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.input.KeyCode;
        import javafx.scene.input.KeyEvent;
        import javafx.stage.Stage;
        import model.Student;
        
        public class GestEleve implements Initializable {
        	@FXML
        	private Button btnShow;
        	@FXML TableView<student> table;
        	
        	@FXML TableColumn<student string=""> nom;
        	@FXML TableColumn<student string=""> prenom;
        	@FXML TableColumn<student string=""> date;
        	@FXML TableColumn<student string=""> niveau;
        	@FXML
            private Button btnRecherche;
        	 @FXML
        	 private TextField textRecherche;
        	public ObservableList<student> data = FXCollections.observableArrayList();
        	private ArrayList<integer> entier = new ArrayList<>();
        	@FXML
        	
        	
        	// methode pour l'actualisation de la liste
        	public void RefreshList(ActionEvent event) {
        		methodeAfichage();
        	}
        	
        	// methode pour l'appel du formulaire d'insertion
        	@FXML
        	public void insertEleve() throws IOException {
        		Stage stage = new Stage();
        		Parent root = FXMLLoader.load(getClass().getResource("/vue/insertStudent.fxml"));
        		Scene scene = new Scene(root);
        		stage.setScene(scene);
        		stage.setTitle("Ajout d'un élève");
        		stage.show();
        	}
        	
        	// methode pour la recherche d'un tuple par tri
        	@FXML
            void rechercher(ActionEvent event) {
        		Connection con =dcConnectioninfo.connect();
        		
        		PreparedStatement stat = null;
        		ResultSet rs = null;
        		String sql = "SELECT * FROM eleve WHERE name LIKE ? ";
        		try {
        			stat = con.prepareStatement(sql);
        			stat.setString(1, "%"+textRecherche.getText().toString()+"%");
        			rs = stat.executeQuery();
        			
        				while(rs.next()) {
        					
        				
        					if(!entier.contains(rs.getInt(1))) {
        						data.add(new Student(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5)));
        						}
        					
        						entier.add(rs.getInt(1));
        					
        			}
        			
        		} catch (Exception e) {
        			// TODO: handle exception
        		}
        		table.setItems(data);
            }
        	
            @FXML
            void rechercherK(KeyEvent event) {
            	
            }
        	
        	@FXML
        	void refresh(KeyEvent event) {
        		if(event.getCode() == KeyCode.ENTER){
        			methodeAfichage();
        		}
        	}
        	
        	// methode pour l'appel du formulaire de supression
        	@FXML
        	void updateDeleteEleve(ActionEvent event) throws IOException {
        		Stage stage = new Stage();
        		Parent root = FXMLLoader.load(getClass().getResource("/vue/updateStudent.fxml"));
        		Scene scene = new Scene(root);
        		stage.setScene(scene);
        		stage.setTitle("Change or Delete a student");
        		stage.show();
        	}
        	  
        	@Override
        	public void initialize(URL arg0, ResourceBundle arg1) {
        		
        		nom.setCellValueFactory(data->{
        			return new ReadOnlyStringWrapper(data.getValue().getNom());
        		});
        		prenom.setCellValueFactory(data->{
        			return new ReadOnlyStringWrapper(data.getValue().getPrenom());
        		});
        		date.setCellValueFactory(data->{
        			return new ReadOnlyStringWrapper(data.getValue().getDate());
        		});
        		niveau.setCellValueFactory(data->{
        			return new ReadOnlyStringWrapper(data.getValue().getNiveau());
        		});
        	}
        	
        	// methode pour la selection de tous les tuples sans exception
        	private void methodeAfichage() {
        		
        		try {
        			Connection con = dbConnection.connect();
        			String sql = "SELECT * FROM eleve";
        			
        			PreparedStatement stat = con.prepareStatement(sql);
        			ResultSet rs = stat.executeQuery();
        			
        			while(rs.next()) {
        				if(!entier.contains(rs.getInt(1))) {
        				data.add(new Student(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5)));
        				}
        				entier.add(rs.getInt(1));
        			}
        			con.close();
        		} catch (Exception e) {
        			e.printStackTrace();
        		}
        			
        		table.setItems(data);
        	}
        }

        -
        Edité par Benzouye 1 septembre 2020 à 15:13:16

        • Partager sur Facebook
        • Partager sur Twitter
        Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
          3 septembre 2020 à 18:21:51

          Je pense qu'il faut vider ta liste data (et peut-être entier aussi) avant tes boucles où tu y ajoutes les éléments  avec data.clear()
          • Partager sur Facebook
          • Partager sur Twitter

          toujours affichage des valeurs sur table view

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown