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 :

[JTreeTable] comment supprimer une ligne


Sujet :

Composants Java

  1. #1
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut [JTreeTable] comment supprimer une ligne
    Bonjour,

    J'aimerai savoir si quelqu'un sait comment supprimer une ligne d'un JTreeTable?
    J'ai essayé de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.remove(treeTable.getSelectedRow());
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    treeTable.remove(treeTable.getSelectedRow());
    dans ma classe qui utilise le JTreeTable treeTable, mais ça ne marche pas...

    Un petit coup de pouce serait le bienvenu...

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 304
    Points : 348
    Points
    348
    Par défaut
    Un exemple d'utilisation de JTreeTable :
    http://www.koders.com/java/fid4CA67FC178E2991AB2C926A3B55165DCF54B5370.aspx?s=jtreetable

    et la doc de l'API:
    http://www.e-beans.com/package/ebeans/external/doc/JTreeTable-1.0/javadoc/index.html

    En espérant que ça t'éclairera un peu

  3. #3
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Ben à vrai dire, pas trop...

    J'ai récupéré à peu près la même chose sur le site de Sun, et j'ai essayé de l'adapter à mon problème, mais je ne vois pas comment gérer la suppression d'une ligne dans le JTreeTable.

    Ca doit être un truc tout bête quasiment tout fait avec les listeners, mais je n'arrive pas à voir comment faire...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 304
    Points : 348
    Points
    348
    Par défaut
    Ton code compile pas? tu as quoi comme erreur?

  5. #5
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Si si, ça compile, mais comme je ne sais pas trop comment m'y prendre, j'essaie 36.000 solutions (qui ne font rien du tout, ou qui crashent), mais je suis sûr qu'il doit y en avoir une toute faite. Simplement, je ne sais pas laquelle...

    Et comme dans le code récupéré sur le site de Sun, la suppression de ligne n'est pas possible, ben je suis un peu beaucoup embêté.

    J'imagine que poster un peu de code serait mieux, mais je ne sais pas non plus quelle partie pourrait être intéressante...
    Je suis perduuuuuu!!! Heeeeelp!

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 304
    Points : 348
    Points
    348
    Par défaut
    Et un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    treeTable.removeRow(treeTable.getSelectedRow());

  7. #7
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Citation Envoyé par Miss Gaelle
    Et un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    treeTable.removeRow(treeTable.getSelectedRow());
    Cette méthode n'existe pas pour la classe JTreeTable, mais j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    treeTable.removeRowSelectionInterval(treeTable.getSelectedRow(), treeTable.getSelectedRow());
    Et ça ne marche pas.

    Alors soit je l'utilise pas au bon endroit, soit j'oublie de faire quelque chose...

    Je vais essayer de poster un bout de code...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    304
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 304
    Points : 348
    Points
    348
    Par défaut
    JTreeTable hérite de JTable, non? Fais une recherche avancée sur le forum, tu trouveras peut etre des choses qui t'inspireront plus. Tape "JTable ligne", y'a pas mal de résultats.

  9. #9
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Bon alors, j'ai fait la recherche et j'ai vu qu'il fallait faire du fireTableDataChanged()...

    Or moi j'ai ça :
    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
     
    public class TreeTableModelAdapter extends AbstractTableModel {
    	TreeTableModel treeTableModel;
    	[...]
    	treeTableModel.addTreeModelListener(new TreeModelListener() {
    			public void treeNodesChanged(TreeModelEvent e) {
    				delayedFireTableDataChanged();
    			}
     
    			public void treeNodesInserted(TreeModelEvent e) {
    				delayedFireTableDataChanged();
    			}
     
    			public void treeNodesRemoved(TreeModelEvent e) {
    				delayedFireTableDataChanged();
    			}
     
    			public void treeStructureChanged(TreeModelEvent e) {
    				delayedFireTableDataChanged();
    			}
    		});
    	[...]
    	protected void delayedFireTableDataChanged() {
    		SwingUtilities.invokeLater(new Runnable() {
    			public void run() {
    				fireTableDataChanged();
    			}
    		});
    	}
    Cette classe TreeTableModelAdapter est utilisée dans ma classe JTreeTable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class JTreeTable extends JTable {
    	protected TreeTableCellRenderer tree;
     
    	public JTreeTable(TreeTableModel treeTableModel) {
    		super();
     
    		// Create the tree. It will be used as a renderer and editor.
    		tree = new TreeTableCellRenderer(treeTableModel);
     
    		// Install a tableModel representing the visible rows in the tree.
    		super.setModel(new TreeTableModelAdapter(treeTableModel, tree));
    	[...]
    Or la classe dans laquelle j'utilise un JTreeTable est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class DefectTable extends JPanel {
    	/** Model for the JTreeTable. */
    	protected DefectTableModel model;
    	/** Used to represent the model. */
    	protected JTreeTable treeTable;
    	[...]
    J'ajoute un menu déroulant à ce JTreeTable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    treeTable.addMouseListener(new MouseAdapter(){
    	        public void mousePressed(MouseEvent me) {
    	        	if (me.isPopupTrigger()) {
    		            menu.show(me.getComponent(), me.getX(), me.getY());
    		        }
    	        }
    	        public void mouseReleased(MouseEvent me) {
    	        	if (me.isPopupTrigger()) {
    		            menu.show(me.getComponent(), me.getX(), me.getY());
    		        }
    	        }
    		});
    Et quand je clique sur "Supprimer une ligne", je fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    		deleteMenu.addMouseListener(new MouseAdapter() {
    			public void mouseReleased(MouseEvent me) {
    				deleteMenu_mouseReleased(me);
    			}
    		});
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    	public void deleteMenu_mouseReleased(MouseEvent evt) {
    		if (treeTable.getIgnoreRepaint()) System.out.println("ignoreRepaint");
    		System.out.println("rowCount : "+treeTable.getRowCount());
    		System.out.println("selectedRow : "+treeTable.getSelectedRow());
    		treeTable.getComponents();
    		treeTable.remove(treeTable.getSelectedRow());
    		treeTable.updateUI();
    		this.repaint();
    		fireMouseDeleteMenuEvent(evt);
    	}
    C'est là je pense qu'il faut que je fasse quelque chose de plus, mais je ne sais pas quoi...

    Et la méthode fireMouseDeleteMenuEvent() fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	public void fireMouseDeleteMenuEvent(MouseEvent evt) {
    		for (int i = 0; i < vListener.size(); i++) {
    			((DefectTableListener) vListener.elementAt(i)).defectTableModifying(evt);
    		}
    	}
    Sachant que la classe principale de mon appli est enregistrée dans vListener et que donc sa méthode defectTableModifying() est appelée, mais pour l'instant, je n'ai rien mis dedans (enfin, j'ai viré ce que j'avais mis parce que ça marchait pas).

    Est-ce que ça éclaire quelqu'un?


    [EDIT]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    	public void deleteMenu_mouseReleased(MouseEvent evt) {
    		if (treeTable.getIgnoreRepaint()) System.out.println("ignoreRepaint");
    		System.out.println("rowCount : "+treeTable.getRowCount());
    		System.out.println("selectedRow : "+treeTable.getSelectedRow());
    		treeTable.getComponents();
    		treeTable.remove(treeTable.getSelectedRow());
    		treeTable.updateUI();
    		this.repaint();
    		fireMouseDeleteMenuEvent(evt);
    	}
    J'ai modifié cette méthode, et je me suis rendu compte de plusieurs choses :
    - treeTable.getIgnoreRepaint() renvoie false, ce qui est une bonne nouvelle.
    - treeTable.getRowCount() renvoie 5 dans mon exemple où j'ai 5 lignes dans mon JTreeTable.
    - treeTable.getSelectedRow() renvoie 2 lorsque j'ai sélectionné la 3ème ligne, ce qui est normal, vu que les indices commencent à 0.
    - treeTable.getComponents() renvoie UN SEUL composant de type CellRendererPane, ce qui est embêtant...

    Pourquoi quand je fais un RowCount, il me renvoie 5 et quand je regarde ses composants, il n'en a qu'un?

    Et quand je fais treeTable.remove(treeTable.getSelectedRow()), il me fait un bon vieux crash en me disant :
    java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 2

    Comment accéder auxlignes de ma JTreeTable? (pour pouvoir les supprimer)

  10. #10
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Doublon : lors de l'envoi de ma modif, j'ai eu une erreur, mais finalment l'édition de mon post précédent à marcher... Ce post est donc la même chose que la fin du précédent... Désolé

    Petite modif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    	public void deleteMenu_mouseReleased(MouseEvent evt) {
    		if (treeTable.getIgnoreRepaint()) System.out.println("ignoreRepaint");
    		System.out.println("rowCount : "+treeTable.getRowCount());
    		System.out.println("selectedRow : "+treeTable.getSelectedRow());
    		treeTable.getComponents();
    		treeTable.remove(treeTable.getSelectedRow());
    		treeTable.updateUI();
    		this.repaint();
    		fireMouseDeleteMenuEvent(evt);
    	}
    J'ai modifié cette méthode, et je me suis rendu compte de plusieurs choses :

    - treeTable.getIgnoreRepaint() renvoie false, ce qui est une bonne nouvelle.

    - treeTable.getRowCount() renvoie 5 dans mon exemple où j'ai 5 lignes dans mon JTreeTable.

    - treeTable.getSelectedRow() renvoie 2 lorsque j'ai sélectionné la 3ème ligne, ce qui est normal, vu que les indices commencent à 0.

    - treeTable.getComponents() renvoie UN SEUL composant de type CellRendererPane, ce qui est embêtant...

    Pourquoi quand je fais un RowCount, il me renvoie 5 et quand je regarde ses composants, il n'en a qu'un?

    Et quand je fais treeTable.remove(treeTable.getSelectedRow()), il me fait un bon vieux crash en me disant :
    java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 2

    Comment accéder auxlignes de ma JTreeTable? (pour pouvoir les supprimer)

  11. #11
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Points : 722
    Points
    722
    Par défaut
    Personne ne voit ce qu'il manque?
    Je suis sûr que j'ai oublié d'appeler une méthode toute bête quelque part, ou quelque chose du genre, mais j'arrive pas à mettre le doigt dessus...

Discussions similaires

  1. [VBA] Comment supprimer une ligne entiere dans excel
    Par babouoles dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 06/07/2017, 09h34
  2. Comment supprimer une ligne de la listbox avec le bouton 'suppr'
    Par florent64 dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 11/06/2007, 18h25
  3. Réponses: 1
    Dernier message: 24/04/2007, 18h20
  4. TListView, comment supprimer une ligne
    Par James_ dans le forum C++Builder
    Réponses: 6
    Dernier message: 23/06/2006, 16h01
  5. [C#] Comment supprimer une ligne dans DataGrid ?
    Par BAUDIER dans le forum ASP.NET
    Réponses: 2
    Dernier message: 20/07/2004, 17h03

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