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 :

JTable : Comment inserer des boutons dans les cellules de ma colonne


Sujet :

Composants Java

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 27
    Points : 23
    Points
    23
    Par défaut JTable : Comment inserer des boutons dans les cellules de ma colonne
    Bonjour,

    je cherche a inserer des boutons dans un cellule d'une colonne de ma jtable.
    J'ai essaye de chercher dans le tuto. mais j'ai vraiment pas trouver de reponse...
    On parlait de la classe renderer.

    Comment faire ?

    Merci.

  2. #2
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    How to use Tables

    ou

    JComponentsTable mais vraiment pour cas particulier.
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 19
    Points : 22
    Points
    22
    Par défaut
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    	class JTableButtonRenderer extends DefaultTableCellRenderer {
     
    		public Component getTableCellRendererComponent(JTable table,
    				Object value, boolean isSelected, boolean hasFocus, int row,
    				int column) {
    			if (value instanceof JButton)
    				return (JButton) value;
    			return this;
    		}
     
    	}
     
    	class JTableButtonMouseListener implements MouseListener {
    		private JTable __table;
     
    		private int column;
     
    		private void __forwardEventToButton(MouseEvent e) {
    			TableColumnModel columnModel = __table.getColumnModel();
    			column = columnModel.getColumnIndexAtX(e.getX());
    			int row = e.getY() / __table.getRowHeight();
     
    			Object value;
    			JButton button;
    			MouseEvent buttonEvent;
     
    			if (row >= __table.getRowCount() || row < 0
    					|| column >= __table.getColumnCount() || column < 0)
    				return;
    			value = __table.getValueAt(row, column);
    			if (!(value instanceof JButton))
    				return;
    			button = (JButton) value;
    			buttonEvent = (MouseEvent) SwingUtilities.convertMouseEvent(
    					__table, e, button);
    			button.dispatchEvent(buttonEvent);
    			// This is necessary so that when a button is pressed and released
    			// it gets rendered properly. Otherwise, the button may still appear
    			// pressed down when it has been released.
    			__table.repaint();
    		}
    		public JTableButtonMouseListener(JTable table) {
    			__table = table;
    		}
    		public void mouseClicked(MouseEvent e) {
    			__forwardEventToButton(e);
    			// tu peux ici rajouter tes actions
    		}
     
    		public void mouseEntered(MouseEvent e) {
    			// __forwardEventToButton(e);
    		}
     
    		public void mouseExited(MouseEvent e) {
    			// __forwardEventToButton(e);
    		}
     
    		public void mousePressed(MouseEvent e) {
    			// __forwardEventToButton(e);
    		}
     
    		public void mouseReleased(MouseEvent e) {
    			// __forwardEventToButton(e);
    		}
    	}
     
    	class MyJButtonTableModel extends DefaultTableModel {
     
    		public MyJButtonTableModel(Vector<String> columnNames, int numRow) {
    			super(columnNames, numRow);
    		}
     
    		public Class getColumnClass(int c) {
    			if (c != 0) {
    				return JButton.class;
    			}
    			return String.class;
    		}
     
    		public boolean isCellEditable(int row, int col) {
    			return false;
    		}
     
    	}

    JTableButtonRenderer : redefini l'affichage d'une cellule


    JTableButtonMouseListener : c est du code repris

    MyJButtonTableModel :
    ce qui est tres important, c est le "getColumnClass()" qui doit retourner la classe JButton.class pour les colonnes que l'on veut

    NB : il manque une chose. je n arrive pas a avoir l'effet bouton, c est a dire quand je clique dessus, il ne s enfonce pas !


    j espere que ca va t aider.

  4. #4
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Bonjour,

    le TableCellRenderer est une espèce de tampon dont on se sert pour dessiner les cases, puis qu'on balance à la poubelle. Il n'est pas intégré dans l'interface comme dans un JPanel.

    Lorsqu'on clique sur une case, l'événement est envoyé au TableCellEditor, qui est alors affiché à la place du Renderer. Ce composant est actif, lui (si c'est un bouton, il réagira aux clics). Donc dans ton cas, il faut préciser que le même bouton sert à la fois de TableCellRenderer et de TableCellEditor.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

Discussions similaires

  1. [XL-2007] Comment inserer des addresses dans une cellule
    Par marcolino dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/11/2009, 17h06
  2. Inserer un bouton dans UNE cellule d'un JTable
    Par Su dans le forum Composants
    Réponses: 9
    Dernier message: 22/07/2009, 13h59
  3. JTable : comment insérer un bouton dans une cellule ?
    Par donyas dans le forum Composants
    Réponses: 2
    Dernier message: 08/08/2006, 15h54
  4. Réponses: 2
    Dernier message: 16/05/2006, 11h53
  5. JTable avec des JPanel dans les cellule
    Par pigpen dans le forum Composants
    Réponses: 11
    Dernier message: 13/04/2006, 19h58

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