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

Composants Java Discussion :

Suppression ligne JTable


Sujet :

Composants Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut Suppression ligne JTable
    Bonjour,

    Je me suis mis aux JTable , et j ' essaie de supprimer une ligne que j ' aurai selectionne dans mon tableau( rempli avec des noms de fichiers)

    Le probleme , c ' est que ca ne fait aucune action et me renvoi aucune erreur(je pense pourtant que la logique de ma fonction est bonne)

    Un peu d ' aide svp

    creation de ma JTable
    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
    public JPanel creerPanelCentre()
    	{
     
    		JPanel panneauCentre = new JPanel();
     
    		panneauCentre.setPreferredSize(new Dimension(300,300));
    		panneauCentre.setLayout(new BorderLayout());
    		listeMessage= new JTable(new TableauPersonnalise());
     
    		listeMessage.setBackground(Color.BLACK);
    		listeMessage.setForeground(Color.WHITE);
    		listeMessage.setPreferredSize(new Dimension(this.getWidth(),this.getHeight()));
    		listeMessage.setRowHeight(30);
    		listeMessage.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    		listeMessage.addMouseListener(new Evenement(1,this));
    		JScrollPane defilant = new JScrollPane(listeMessage);
    		defilant.setPreferredSize(new Dimension(this.getWidth(),this.getHeight()));
    		defilant.setWheelScrollingEnabled(true);
     
    		//panneauCentre.setBackground(Color.LIGHT_GRAY);
    		panneauCentre.add(defilant);
    		panneauCentre.setVisible(true);
     
    		return panneauCentre;
    	}
    son modele:

    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
    public class TableauPersonnalise extends DefaultTableModel{
    private RecupererMusique musiques=new RecupererMusique(null);
    //private final String[] entetes = {"Prénom", "Nom", "Couleur favorite", "Homme", "Sport"};
     
     
     
    private List <String> songs= new ArrayList<String>();
     
    public TableauPersonnalise() {
        super();
        songs=musiques.updateSongList();
        //System.out.println("liste de musiques"+ musiques.updateSongList());
        //System.out.println("taille"+ musiques.updateSongList().size());
     
    }
     
     
     
     
    	@Override
    	 public int getRowCount() {
     
    		return 9;
     
        }
     
        public int getColumnCount() {
            return 1;
        }
     
        public String getColumnName(int columnIndex) {
            return null;
        }
     
        public Object getValueAt(int rowIndex, int columnIndex) {
            return songs.get(rowIndex);
     
        }
    mon evenement:
    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
     public void removeRows() {
    		   TableauPersonnalise tableau= (TableauPersonnalise) fenetre.getListeMessage().getModel();
     
    		    int[] selectedRows = fenetre.getListeMessage().getSelectedRows();
    		    if (selectedRows.length != 0) {
    		       for (int i = 0; i < selectedRows.length; ++i)
    		    	   tableau.removeRow(i);
    		    }
    		    tableau.fireTableStructureChanged();
    		    return;
    		}
     
    	public void actionPerformed(ActionEvent e){
     
    		switch(code){
     
    		case 2 :
    			removeRows();
    			 break;
    		}
    	}
    merci de votre aide

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Dans ton cas, c'est plutôt tableau.fireTableDataChanged()
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut
    salut,

    Merci de ton aide
    Même apres cette modification de la méthode , il n y a pas de changement.
    C ' est assez bizarre , car mon action deselectionne la ligne que je veux supprimer

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut
    up svp

  5. #5
    Membre expérimenté Avatar de MaitreKaio
    Profil pro
    Freelance Java / Web / Mobile
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance Java / Web / Mobile
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Par défaut
    Tu n'as visiblement pas donné tout le code. Quand on essaie de suivre ce qui se passe, il manque visiblement des morceaux...

    As-tu essayé de tracer ce qui se passe ? De ce que j'en vois, ton code peut ne rien faire pour plusieurs raisons:
    • actionPerformed n'est pas appelé
    • le code (dont on ne voit pas l'origine) n'est pas égal à 2
    • selectedRows est vide (d'ailleurs, que fait la méthode listeMessage.getSelectedRows(), que tu ne donnes pas non plus ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut
    Salut

    Merci de ta reponse.

    Mon action performed est bien appelé dans ma classe graphique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    boutonSupprimer.addActionListener(new Evenement(2,this));
    Correspond a l' indice code=2 que j ' ai spécifié dans le constructeur de ma classe chargé d ' écouter les évènements

    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
    public class Evenement  implements ActionListener, MouseListener{
    private int code;
    private GUI fenetre;
    private int currentPosition = 0; 
    private AudioClip ding;
    final String MEDIA_PATH=new String("C:/Documents and Settings/EddayanH/Desktop/test SD/");
    private RecupererMusique songs=new RecupererMusique(fenetre);
    private TableauPersonnalise tableau=new TableauPersonnalise();
    private boolean bruitFond=true;
     
     //
     
     
    	public Evenement(int i, GUI fenetre) {
    		super();
    		this.code=i;
    		this.fenetre=fenetre;
    		// TODO Auto-generated constructor stub
    	}
     
    	 public void removeRows() {
    		   TableauPersonnalise tableau= (TableauPersonnalise) fenetre.getListeMessage().getModel();
     
    		    int[] selectedRows = fenetre.getListeMessage().getSelectedRows();
    		    if (selectedRows.length != 0) {
    		       for (int i = 0; i < selectedRows.length; ++i)
    		    	   tableau.removeRow(i);
    		    }
    		    tableau.fireTableDataChanged();
    		    return;
    		}
     
    	public void actionPerformed(ActionEvent e){
     
    		switch(code){
     
    		case 2 :
    			removeRows();
    			 break;
    		}
    	}

    listeMessage correspond a mon JTable et getselectedRows() est une méthode deja implémentée dans la classe JTable et qui permet de récupérer les lignes sélectionnées.

    Ce qui est étrange , c est que mon listener semble fonctionner , mais quant je sélectionne une ligne de mon tableau et clique sur le bouton supprimer , ca me deselectionne la ligne( je ne vois pas pourquoi ca fait ca d ailleurs)au lieu de la supprimer

    Voila, merci de ton aide

  7. #7
    Membre expérimenté Avatar de MaitreKaio
    Profil pro
    Freelance Java / Web / Mobile
    Inscrit en
    Juin 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance Java / Web / Mobile
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 140
    Par défaut
    Je crois que les fireXXX, qui impliquent un rechargement de la table, entrainent une réinitialisation de la sélection.
    As-tu débuggé la méthode removeRows() pour voir ce qui s'y passe exactement ?

    Tiens d'ailleurs je m'aperçois en le lisant que tu veux probablement faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for (int i = 0; i < selectedRows.length; ++i)
    		    	   tableau.removeRow(selectedRows[i]);
    et non pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for (int i = 0; i < selectedRows.length; ++i)
    		    	   tableau.removeRow(i);
    En effet, si ta table a 5 lignes, et que les ligne d'indices 3 et 4 sont sélectionnées, avec ton code tu vas effacer les lignes 0 et 1 (enfin quand ca marchera )

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut
    Merci de ton aide, je commence a y voir plus clair
    car en effet , imaginons que j ai une liste de 6 , si je selectionne les elements 4,5,6 , j ai un ArrayIndexOutOfBoundsException(3>=3 puis 4 >=3 etc)

    D ' ou peut venir le probleme?
    Si je selectionne uniquement les 1,2,3 , j ai pas d exception levees

    Merci encore

    edit: apres debug, rien d anormal a signaler , mes variables sont bien remplies

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut
    Bon , j ' ai reussi et c ' etait plus bete que ce que je croyais ...
    J ' ai insiste sur la methode removerows du defautTableModel alors que je n ' avais qu ' a utiliser la methode remove de la collection ArrayList.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void deleteRow(int rowIndex) {
            songs.remove(rowIndex);
            fireTableRowsDeleted(rowIndex,rowIndex); /
        }
    En gros , au lieu de supprimer une ligne , je supprime un element de ma liste , ce qui revient au meme( car je suppose que DefautTableModel ne travaille pas avec les listes d ou le probleme).
    Merci a tous de votre aide

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

Discussions similaires

  1. Suppression lignes JTable
    Par Liiinz dans le forum Composants
    Réponses: 2
    Dernier message: 14/10/2011, 14h34
  2. suppression ligne JTable
    Par butterflie dans le forum Composants
    Réponses: 1
    Dernier message: 13/04/2011, 16h20
  3. ajout / suppression des ligne à JTable
    Par sky88 dans le forum Débuter
    Réponses: 3
    Dernier message: 28/08/2008, 23h21
  4. suppression ligne JTable
    Par matzeus dans le forum Composants
    Réponses: 3
    Dernier message: 20/06/2006, 12h17
  5. [JTable] probleme suppression ligne
    Par lilou77 dans le forum Composants
    Réponses: 1
    Dernier message: 01/11/2005, 11h34

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