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 :

JComboBox JTable CellEditor


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de DjGonk
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut JComboBox JTable CellEditor
    Bonjour,

    J'ai une JTable au sein de laquelle j'ai une colonne composée de ComboBox. J'arrive sans problème à créer ces ComboBox, mais je n'arrive pas a naviguer dans ces ComboBox sur l'interface.

    Je tiens à signaler que chaque combo contient des données uniques, donc chaque combo est differentes.

    Je desire donc pouvoir derouler mes combo sans problème. Merci d'avance.

  2. #2
    Membre éclairé Avatar de DjGonk
    Profil pro
    Inscrit en
    Février 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 88
    Par défaut
    Bon juste poru faire suivre, j'ai trouve une solution. La voici si cela peut aider d'autres personnes.

    Il faut créer une classe qui implemente TableCellRenderer, une autre qui herite de JComboBox et qui implemente TableCellEditor, et enfin une classe avec une JTable.

    La classe pour le cellrenderer

    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
     
    import java.awt.Component;
    import java.util.Vector;
    import javax.swing.JComboBox;
    import javax.swing.JTable;
    import javax.swing.table.TableCellRenderer;
     
    public class JEquipementCellRender implements TableCellRenderer{
     
        private JComboBox c = new JComboBox();
     
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col){
             Vector<String> v = new Vector<String>();
             v = (Vector<String>) value;
             for(int i = 0 ; i < v.size() ; i++)
            	 c.addItem(v.get(i));
             return c;
        }
    }

    La classe pour le celleditor

    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
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    import java.awt.Component;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.EventObject;
    import java.util.Vector;
     
    import javax.swing.JComboBox;
    import javax.swing.JTable;
    import javax.swing.event.CellEditorListener;
    import javax.swing.event.ChangeEvent;
    import javax.swing.event.EventListenerList;
    import javax.swing.table.TableCellEditor;
     
    public class JEquipementCellEditor extends JComboBox implements TableCellEditor {
     
    	private static final long serialVersionUID = -795525984124238739L;
    	protected EventListenerList listenerList = new EventListenerList();
    	 protected ChangeEvent changeEvent = new ChangeEvent(this);
     
    	 public JEquipementCellEditor(){
    	      super();
    	      addActionListener(new ActionListener() {
    	        public void actionPerformed(ActionEvent event) {
    	          fireEditingStopped();
    	        } 
    	      });
    	  }
     
     
    	 public void addCellEditorListener(CellEditorListener listener)  {  
    		 listenerList.add(CellEditorListener.class, listener);
    	 } 
     
    	 public void removeCellEditorListener(CellEditorListener listener) {
    	      listenerList.remove(CellEditorListener.class, listener);
    	 } 
     
     
    	 protected void fireEditingStopped() 
    	 {     
    	     CellEditorListener listener;
    	     Object[] listeners = listenerList.getListenerList();
    	     for (int i = 0; i < listeners.length; i++)  {
    	        if (listeners[i] == CellEditorListener.class) {
    	        	listener = (CellEditorListener) listeners[i + 1];
    	            listener.editingStopped(changeEvent);
    	        } 
    	      } 
    	    } 
     
    	    protected void fireEditingCanceled() {
    	      CellEditorListener listener;
    	      Object[] listeners = listenerList.getListenerList();
    	      for (int i = 0; i < listeners.length; i++) {
    	        if (listeners[i] == CellEditorListener.class) {
    	          listener = (CellEditorListener) listeners[i + 1];
    	          listener.editingCanceled(changeEvent);
    	        } 
    	      } 
    	    } 
     
    	    public void cancelCellEditing()   {
    	      fireEditingCanceled();
    	    } 
     
    	    public boolean stopCellEditing()  {
    	      fireEditingStopped();
    	      return true;
    	    } 
     
    	    public boolean isCellEditable(EventObject event)  {
    	      return true;
    	    } 
     
    	    public boolean shouldSelectCell(EventObject event)   {
    	      return true;
    	    } 
     
    	    public Object getCellEditorValue()    {
    	      Vector<String> v = new Vector<String>();
    	      for(int i = 0 ; i < this.getItemCount() ; i++)
    	    	  v.add((String)this.getItemAt(i));
    	      return new Vector<String>();
    	    } 
     
    	@SuppressWarnings("unchecked")
    	public Component getTableCellEditorComponent(JTable table, Objectvalue, boolean isSelected, int row, int column) {
    			Vector<String> v = new Vector<String>();
    			v = (Vector<String>) value;
    			for(int i = 0 ; i < v.size() ; i++)
    				addItem(v.get(i));
    			return this;
    	    } 
    }
    et enfin mettre ce code apres la creation de la jtable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    jTableEquipement.getColumnModel().getColumn(2).setCellRenderer(equipementCellRender);
    jTableEquipement.getColumnModel().getColumn(2).setCellEditor(equipementCellEditor);

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

Discussions similaires

  1. Résultat d'un JComboBox + JTable
    Par stratocasters dans le forum Composants
    Réponses: 5
    Dernier message: 08/08/2013, 23h42
  2. JComboBox+JTable sous netbeans
    Par boughanirafik dans le forum NetBeans
    Réponses: 2
    Dernier message: 21/05/2010, 19h38
  3. Panel dans JTable (CellEditor)
    Par Lady dans le forum Composants
    Réponses: 7
    Dernier message: 17/07/2007, 11h50
  4. [JTABLE] : CellEditor
    Par Hug0_76 dans le forum Composants
    Réponses: 6
    Dernier message: 06/04/2007, 18h39
  5. [JTable] CellEditor
    Par Solovely dans le forum Composants
    Réponses: 3
    Dernier message: 09/07/2005, 12h07

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