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] (debutant) sélection dans un jcombobox dans un jtable


Sujet :

Composants Java

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 68
    Points : 50
    Points
    50
    Par défaut [JTable] (debutant) sélection dans un jcombobox dans un jtable
    Bonjour,
    J'ai placé des jcombobox dans un jtable, leurs listes s'affichent correctement, mais lorsque je clique sur un des choix, ca ne met pas à jour ma case...
    estce que je dois faire un évènement genre mouseclick sur la table? (je maitrise pas du tout les évènements).

  2. #2
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 572
    Points
    1 572
    Par défaut
    non, regarde dans le forum ce sujet reviens tres fréquement (tous les jours presques), il faut passer par le renderer de ta JTable, redéfinir la methode getTableCellRendererComponent

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 68
    Points : 50
    Points
    50
    Par défaut
    je veux bien mais je lui dis de faire quoi?
    arf désolée, je comprend rien aux renderer... tous les exemples concernent des affichages en couleur

  4. #4
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 572
    Points
    1 572
    Par défaut
    et si deja tu lui met ca ca donne quoi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    		Component res = null;
     
    		if (value != null) {
                res = (Component) value;
            }
     
            return res;
        }

  5. #5
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Mouaip c'est pas la mort non plus à faire:
    JComboBox maComboBox = new JComboBox(model);
    maJTable.getColumn('nomColonne').setCellEditor( new DefaultCellEditor(maComboBox));
    Par contre ça marchera pour l'ensemble de la colonne...

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 68
    Points : 50
    Points
    50
    Par défaut
    Bon alors voici mon code:
    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
     
    protected TableModel_choixCriteres modele = new TableModel_choixCriteres();
    protected TableSorter sorter = new TableSorter(modele);
    private JTable jTable1 = new JTable(sorter);
    private JComboBox CB_dept = getComboDepartement();
    ...
    /**methode qui remplit le tableau par defaut*/
    protected void setTableCaractéristiques(Object typeObjet){
            if (typeObjet == Temoin.TYPE){
     
                //création du modele
                TableModel_choixCriteres modelTemoinHaut = new TableModel_choixCriteres(1,5);
                //place les titres
                String[] headings1 = new String[]{
                    "Département","Commune","Nom d'enquête","Année d'enquête",
                    "Enquêteur"
                };
                modelTemoinHaut.setHeadings(headings1);
                //place les données
                //Object[][] data1 = new Object[1][5];
                Object[][] data1 = new Object[][]{
                    {"00 - indéterminé","00 - indéterminé","d","z","d"}
                };
                modelTemoinHaut.setData(data1);
                //met a jour le modele dans la table
                sorter.setTableModel(modelTemoinHaut);
                jTable1.setModel(sorter);
                //définit les types de sélection
                TableColumn colonne;
                colonne = jTable1.getColumnModel().getColumn(0);
                colonne.setCellEditor(new DefaultCellEditor(CB_dept));
                colonne.setCellRenderer(new DefaultTableCellRenderer(){
                    public Component getTableCellRendererComponent(
                    JTable table, Object value, boolean isSelected, 
                    boolean hasFocus, int row, int column) {
                        Component res = null;
                        if (value != null) {
                            res = (Component) value;
                        }
                        return res;
                    }
                });
     
     
        }
    c'est quand meme etrange, car dans le tutorial de sun, ya juste besoin de mettre: colonne.setCellEditor(new DefaultCellEditor(CB_dept));
    et tout est censé marcher...
    donc j'ai dû me tromper autre part.

  7. #7
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 68
    Points : 50
    Points
    50
    Par défaut
    hyouhou j'ai reussi, ralez pas, j'ai compris qu'il fallait creer des classe d'editeur et de renderer...
    ci-joint pour ceux qui ont besoin:
    classe editeur
    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
     
    public class ComboboxEditor extends AbstractCellEditor implements TableCellEditor {
            private Object valeur;
    	private JComboBox maCombo;
    	private int m_iRow;
    	private int m_iCol;
            private JTable maTable;
     
    	public ComboboxEditor(String type) {
                super();
                if(type.equals(Departement.TYPE)){
                    maCombo = getComboDepartement();
                }
                maCombo.addItemListener(new ItemListener() {
                    public void itemStateChanged(ItemEvent arg0) {
                        miseAjour(arg0);
                    }
                });
    	}
     
    	public Component getTableCellEditorComponent(JTable arg0, Object value, 
                boolean isSelected, int ligne, int col) {
     
                    System.out.println( "editor = " + ligne + " " + col + " " + value );
                    maTable = arg0;
                    m_iRow = ligne;
                    m_iCol = col;
                    valeur = value;
                    arg0.getModel().setValueAt(value,ligne,col);
     
    		return maCombo;
    	}
     
    	public Object getCellEditorValue() {
                    return valeur;
    	}
     
        private JComboBox getComboDepartement() {
                JComboBox CB = new JComboBox();
                CB.addItem("00 - indéterminé");
                Iterator it = Listes.setDpts.iterator();
                while (it.hasNext()){
                    CB.addItem(it.next());
                } 
                return CB;
        }
     
        private void miseAjour(ItemEvent arg0){
            JComboBox combo = (JComboBox) arg0.getSource();
            Object choix = combo.getSelectedItem();
            System.out.println( "maj nv valeur = " + choix.toString() );
            maTable.getModel().setValueAt(choix,m_iRow,m_iCol);
            if (combo.getSelectedItem()!=null){
                valeur = combo.getSelectedItem();
                maTable.getModel().setValueAt(valeur,m_iRow,m_iCol);
            }
        }
     
    }
    classe renderer:
    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
     
    public class ComboboxRenderer extends JComboBox implements TableCellRenderer {
     
        public ComboboxRenderer(String type, Object arg) {
            super();
            if(type.equals(Departement.TYPE)){
                remplirComboDepartement();
            }
     
        }
        public Component getTableCellRendererComponent(JTable table, Object value,
                boolean isSelected, boolean hasFocus, int row, int column) {
            //pas de différenciation selon la valeur, ni l'etat sélectionne, 
            //ni l'etat focus de la case
     
            System.out.println( "render = " + row + " " + column + " " + value );
            this.setSelectedItem(value);
     
            return this;
        }
        private void remplirComboDepartement() {
                //simple --> tout
                this.addItem("00 - indéterminé");
                Iterator it = Listes.setDpts.iterator();
                while (it.hasNext()){
                    this.addItem(it.next());
                } 
        }
     
    }
    malheureusement je n'arrive pas a modifier les données du modele de ma table... pourtant je suis sure que je ne suis pas loin...

Discussions similaires

  1. Une image dans un Jpanel dans un Jpanel dans un Jframe
    Par ThomasH dans le forum Agents de placement/Fenêtres
    Réponses: 9
    Dernier message: 09/12/2009, 20h23
  2. JComboBox dans le header d'une Jtable
    Par Djobird dans le forum Composants
    Réponses: 2
    Dernier message: 06/08/2007, 10h44
  3. supprimer un item d'un jcombobox dans une jtable
    Par bellout dans le forum Composants
    Réponses: 6
    Dernier message: 22/06/2006, 16h06
  4. Vérification de l'etat des JComboBox dans JTable
    Par nicotine002 dans le forum Composants
    Réponses: 5
    Dernier message: 26/01/2006, 11h47
  5. Sélection d'une ligne dans un JTable
    Par dam21 dans le forum Composants
    Réponses: 3
    Dernier message: 28/07/2004, 12h57

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