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 :

tableView, impossible de delete un élément


Sujet :

JavaFX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Lycéen
    Inscrit en
    Mai 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2012
    Messages : 68
    Par défaut tableView, impossible de delete un élément
    Bonjour tous le monde,
    j'ai un problème avec le tableView de javaFX, j'ai besoin de pouvoir y ajouter des éléments, et d'en supprimer, pour ajouter je n'ai pas eu de problème, mais quand je tente de supprimer un élément sélectionné, rien ne se passe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    @FXML
    public void delbanlist(ActionEvent event) {
    ObservableList<banned> data = tableView.getItems();
    data.remove(tableView.getSelectionModel().getSelectedItems());
    System.out.println(String.valueOf(tableView.getSelectionModel().getSelectedItems()));
    tableView.refresh();
    tableView.setItems(data);
    }
    Si quelqu'un à une idée, merci

  2. #2
    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
    Deux choses :
    1. tableView.getSelectionModel().getSelectedItems() retourne une nouvelle liste observable qu'on nommera A .
    2. data.remove(A) : aucune des versions de remove() de List ou ObservableList ne prend de liste d'objets en paramètre donc là du coup tu essaies de retirer A en tant que valeur. Comme A n'est pas une des valeurs contenues dans la liste des données de la table, rien ne se passe.


    -> Donc tu dois retirer les éléments contenus dans A, pas A elle-même.

    Et enfin puisque tu manipules directement la liste de la table et que c'est une liste observable, tu n'as pas besoin de faire tableView.setItems(data);
    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

  3. #3
    Membre confirmé
    Profil pro
    Lycéen
    Inscrit en
    Mai 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2012
    Messages : 68
    Par défaut
    Citation Envoyé par bouye Voir le message
    Deux choses :
    1. tableView.getSelectionModel().getSelectedItems() retourne une nouvelle liste observable qu'on nommera A .
    2. data.remove(A) : aucune des versions de remove() de List ou ObservableList ne prend de liste d'objets en paramètre donc là du coup tu essaies de retirer A en tant que valeur. Comme A n'est pas une des valeurs contenues dans la liste des données de la table, rien ne se passe.


    -> Donc tu dois retirer les éléments contenus dans A, pas A elle-même.

    Et enfin puisque tu manipules directement la liste de la table et que c'est une liste observable, tu n'as pas besoin de faire tableView.setItems(data);
    Je vois, cependant, quand j'ajoute un élément "0.0.0.0" et que je fais un "data.remove("0.0.0.0");" il ne se passe rien non plus, j'imagine qu'il faut donc choisir l'index d'un élément j'ai donc besoin de récupérer l'ID de l'élément sélectionné et de faire un data.remove(id); ?

  4. #4
    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
    Aucun problème pour ma part :

    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
    final TableView<String> table = new TableView();
    table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
    final TableColumn<String, String> testColumn = new TableColumn("Test");
    testColumn.setCellValueFactory(feature -> new SimpleStringProperty(feature.getValue()));
    table.getColumns().setAll(testColumn);
    table.getItems().add("0.0.0.0");
    final Button button = new Button();
    button.setText("Delete");
    button.setOnAction(actionEvent -> table.getItems().remove("0.0.0.0"));
    VBox root = new VBox();
    root.getChildren().setAll(button, table);        
    Scene scene = new Scene(root, 300, 250);        
    primaryStage.setTitle("Test");
    primaryStage.setScene(scene);
    primaryStage.show();
    Tu as probablement un soucis dans ton code.
    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

  5. #5
    Membre confirmé
    Profil pro
    Lycéen
    Inscrit en
    Mai 2012
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mai 2012
    Messages : 68
    Par défaut
    Citation Envoyé par bouye Voir le message
    Aucun problème pour ma part :

    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
    final TableView<String> table = new TableView();
    table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
    final TableColumn<String, String> testColumn = new TableColumn("Test");
    testColumn.setCellValueFactory(feature -> new SimpleStringProperty(feature.getValue()));
    table.getColumns().setAll(testColumn);
    table.getItems().add("0.0.0.0");
    final Button button = new Button();
    button.setText("Delete");
    button.setOnAction(actionEvent -> table.getItems().remove("0.0.0.0"));
    VBox root = new VBox();
    root.getChildren().setAll(button, table);        
    Scene scene = new Scene(root, 300, 250);        
    primaryStage.setTitle("Test");
    primaryStage.setScene(scene);
    primaryStage.show();
    Tu as probablement un soucis dans ton code.
    Je vois, pour ajouter des éléments dans mon tableau je m'y prend ainsi:
    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
     
    	public void addbanlist(ActionEvent event) {
    		String ipaddress;
    		String reasonforban;
    		TextInputDialog dialogip = new TextInputDialog("0.0.0.0");
    		dialogip.setTitle("");
    		dialogip.setContentText("IP:");
    		Optional<String> ip = dialogip.showAndWait();
    		ipaddress = ip.get();
    		TextInputDialog dialogreason = new TextInputDialog("Flood.");
    		dialogreason.setTitle("");
    		dialogreason.setContentText("Reason:");
    		Optional<String> reason = dialogreason.showAndWait();
    		reasonforban = reason.get();
    		ObservableList<banned> data = tableView.getItems();
    		String date = getdate();
            data.add(new banned(ipaddress,reasonforban,date));
            ipAddrTable.setCellValueFactory(new PropertyValueFactory<banned, String>("ipaddress"));
            reasonTable.setCellValueFactory(new PropertyValueFactory<banned, String>("reasonforban"));
            dateTable.setCellValueFactory(new PropertyValueFactory<banned, String>("date"));
            tableView.setItems(data);
            tableView.refresh();
    	}
    je vois vraiment pas ou se trouve mon erreur

  6. #6
    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
    Qu'est ce que fait la méthode refresh() et d'où sort-elle ?

    EDIT1 - Marrant une méthode publique que je n'ai jamais utilisée et qui n'est pas dans la javadoc chez Oracle.

    EDIT2 - ok ajoutée dans la 1.8.0u60. Ceci explique pourquoi je ne l'ai jamais utilisée. Et la doc chez Oracle date de la u40 (il y a un ticket sur le bug system à propos du fait qu'elle ne soit pas à jour).

    Callingrefresh() forces the TableView control to recreate and repopulate the cells necessary to populate the visual bounds of the control. In other words, this forces the TableView to update what it is showing to the user. This is useful in cases where the underlying data source has changed in a way that is not observed by the TableView itself.
    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. menu personnalisés : impossible d'ajouter un élément
    Par alexsolex dans le forum Macros et VBA Excel
    Réponses: 33
    Dernier message: 21/04/2008, 13h43
  2. [SQL] impossible de delete
    Par noobC dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 23/03/2008, 17h26
  3. Réponses: 10
    Dernier message: 10/03/2008, 08h46
  4. Réponses: 3
    Dernier message: 15/01/2008, 16h51
  5. Réponses: 1
    Dernier message: 28/06/2007, 09h26

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