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 :

MouseListener dans une JTable


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 42
    Par défaut MouseListener dans une JTable
    Bonjour,
    j'ai un problème pour créer un Listener dans ma JTable.
    Ma JTable contient seulement deux colonnes name-value(type fichier properties).
    La première est non éditable la seconde l'est.
    Ainsi quand je clic sur une des cellules de la colonne de droite elle se transforme en JTextField dans lequel je peux modifier la valeur.
    C’est ici que je voudrais ajouter un listener de souris ( Je veux créer un menu contractuel sur un clic droit pour simplifier la manipulation de la valeur dans la cellule).
    Or j’ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    theTable.addMouseListener(new UserTypeMousListener());
    mais ce déclanchement se fait sur un clic sur la JTable et non pas à l’intérieur de la cellule.

    Quelque’un peut-il me dire comment ajouter un listener à l’intérieur d’une cellule en cours d’éditage.

    D'avance merci
    Damien

  2. #2
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Il faut que tu ajoutes ton MouseListener sur l'éditeur de cellule (ici le JTextField si je comprends bien).

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 42
    Par défaut
    Effectivement c'est ce que j'avais compris. Mais je ne sais pas comment ajouter un Listener sur chacun des JTextField de ma JTable.
    Quand je créé une colonne je n'ai pas accès aux Cellules.
    Dois-je le faire :
    • Depuis La JTable elle même ?
    • Depuis le Model ?
    • Depuis le Render (puisque ici en revanche la methode getTableCellRendererComponent manipule chaque cellule)


    Et surtout comment?
    Je ne trouve pas d'exemple sur Internet.

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 42
    Par défaut
    Au temps pour moi, j’avais pas compris la réponse, tout simplement parce que je ne connaissais pas les CellEditor

    Voilà ce que j’ai fait donc

    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
    public class UserTypeCellEditor extends DefaultCellEditor  {
    	/**
             * 
             */
    	private static final long	serialVersionUID	= -2763104161003324602L;
    	private TabUserTypeGUI		thePanel;
    	private Template			theTemplate;
     
    	/**
             * 
             */
    	public UserTypeCellEditor(JTextField textField,TabUserTypeGUI panel) {
    		super(textField);
    		thePanel = panel;
    		theTemplate = thePanel.getTemplate();
    		textField.addMouseListener(new UserTypeMousListener(thePanel));
    	}
    }
    Et dans la construction de ma table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    theTable.getColumn(1).setCellEditor(new UserTypeCellEditor(new JTextField(),this));
    Merci bien pour le coup de main
    Damien

  5. #5
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Citation Envoyé par Pallando Voir le message
    Mais je ne sais pas comment ajouter un Listener sur chacun des JTextField de ma JTable.
    Il ne s'agit pas d'ajouter un listener sur chacun des JTextField. D'ailleurs la JTable ne contient pas de JTextField ! Le JTextField est ajouté à la JTable lorsque tu édites la cellule.
    Tu disposes de la classe DefaultCellEditor dont l'un des constructeurs prend un JTextField, tu fais qq chose comme ç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
    TableColumn col = jTable.getColumnModel().getColumn(1);
    col.setCellEditor(new DefaultCellEditor(new MyTextField(jTable)));
     
    class MyTextField extends JTextField {
     
      private JTable jTable;
      public MyTextField(JTable jTable) {
         this.jTable = jTable;
         this.addMouseListener(new MouseHandler());
      }
     
      private class MouseHandler extends MouseAdapter {
     
        public void mouseClicked(MouseEvent e) {
          int row = jTable.getEditingRow();
          int column = jTable.getEditingColumn();
          Object value = jTable.getValueAt(row, column);
          showMenuContractuel(e, value, row, column);
        }
     
        private void showMenuContractuel(MouseEvent e, Object value, int row, int column) {
           ...
        }
      }
    }

  6. #6
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 42
    Par défaut
    j'en suis arrivé à la mêmconclusion...

    Comme je disais j'avais mal compris le fonctionnement de Cell renders.
    Mais ma solution est effectivement celle que tu présentes (cf poste précedent)

    Merci

    un bon site :
    site d'IBM

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

Discussions similaires

  1. Epaissir une ligne dans dans une JTable
    Par daninho dans le forum Composants
    Réponses: 9
    Dernier message: 26/01/2006, 14h43
  2. Insérer un vector dans une jTable...
    Par Empty_body dans le forum Composants
    Réponses: 3
    Dernier message: 14/12/2005, 17h35
  3. [Jtable] problème de suppression dans une Jtable
    Par gianni17 dans le forum Composants
    Réponses: 1
    Dernier message: 02/12/2005, 18h36
  4. Insertion des boutons et des images dans une JTable
    Par anouar dans le forum Composants
    Réponses: 2
    Dernier message: 17/11/2005, 20h23
  5. [JTable] couleur de sélection dans une JTable
    Par spoutyoyo dans le forum Composants
    Réponses: 7
    Dernier message: 06/12/2004, 11h43

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