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, combobox dans une cellule


Sujet :

Composants Java

  1. #1
    Membre éprouvé Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Points : 934
    Points
    934
    Par défaut jtable, combobox dans une cellule
    mon problème : dans une table j'affiche une adresse, un champ par ligne,
    colonne 1 nom du champ, colonne 2 valeur du champ,
    et quand je clique sur la ligne 3, colonne 2 je veux voir proposé un combobox

    pour mettre à ma table un combobx dans une cellule seulement
    je fais ça qui sent un peu la bidouille...
    avez-vous mieux que ces successives modifications de l'éditeur ?

    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
     
      private void jXTable1MouseClicked(java.awt.event.MouseEvent evt) {                                      
              int nucol = 0, nuli =0;        
              nucol = jXTable1.getSelectedColumn();
              nuli =  jXTable1.getSelectedRow();         
              if (nuli == 3 && nucol == 2 {
                     comboSurTable();                                    // seulemenmt pour la cellule 3/2
              }   
        }            
     
      private void comboSurTable() {         
              TableColumn tc = jXTable1.getColumnModel().getColumn(2);     // la colonne visée
              tc.setCellEditor(new DefaultCellEditor(jComboBox1));           // y coller un combobox                       
      }
     
      private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
             TableColumn tc = jXTable1.getColumnModel().getColumn(2);   // à la moindre action sur le combobx
             tc.setCellEditor(jXTable1.getDefaultEditor(tc.getClass()));   // remettre la colonne 2 normale
      }
    Merci pour vos réponses

  2. #2
    Membre éclairé
    Homme Profil pro
    NoOb
    Inscrit en
    Mai 2007
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NoOb

    Informations forums :
    Inscription : Mai 2007
    Messages : 554
    Points : 852
    Points
    852

  3. #3
    Membre expérimenté 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
    Points : 1 608
    Points
    1 608
    Par défaut
    Bonjour,
    tu pourrais redéfinir la méthode JTable.getCellEditor :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public TableCellEditor getCellEditor(int row, int column) {
      return (row == 3 && column == 2)
             ? new DefaultCellEditor(jComboBox1)
             : super.getCellEditor(row, column);
    }

  4. #4
    Membre éprouvé Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Points : 934
    Points
    934
    Par défaut
    >tu pourrais redéfinir la méthode JTable.getCellEditor :

    j'essaie, mais ça patauge... lamentable.
    si tu avais un exemple sous la main, ce serait idéal...

    ******************

    à propos, je me demande si JTable est bien adapté :
    afficher successivement des adresses verticalement,
    à chaque ligne un champ (politesse, prénom,nom..) ?
    et bien sûr pouvoir modifier / ajouter / supprimer

    Monsieur
    Marcel
    DUCHAMP
    rue ....

    et non pas un champ par colonne comme tous les exemples le montrent.
    voyez-vous un composant plus adéquat ?

    merci

  5. #5
    Membre expérimenté 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
    Points : 1 608
    Points
    1 608
    Par défaut
    Un petit exemple :
    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
     public class TestJTable extends JFrame {
     
      JComboBox comboBoxGenderEditor = new JComboBox(
          new String[] {"M.", "Mme",  "Mlle"});
      JComboBox comboBoxEnglishGenderEditor = new JComboBox(
          new String[] {"Mr", "Mme", "Miss"});
      JComboBox comboBoxAgeEditor = new JComboBox(new Vector() {
        {
          for (int i = 0; i < 120; i += 10) {
            add(age(i));
          }
        }
      });
     
      public TestJTable() {
        JTable table = new SpecialTable(
            new Object[][] {
                new Object[] {"M.", "Mme", "Miss"},
                new Object[] {"Dupont", "Durant", "Smith"},
                new Object[] {age(11), age(43), age(60)}
            },
            new Object[] {"A", "B", "C"});
     
        JScrollPane sp = new JScrollPane(table);
        getContentPane().add(sp);
        setSize(250, 110);
      }
     
      private String age(int age) {
        int temp = (age / 10) * 10;
        return temp + "-" + (temp + 9);
      }
     
      class SpecialTable extends JTable {
     
        public SpecialTable(Object[][] rowData, Object[] columnNames) {
          super(rowData, columnNames);
        }
     
        public TableCellEditor getCellEditor(int row, int column) {
          return (row == 0
                  ? (column == 2
                     ? new DefaultCellEditor(comboBoxEnglishGenderEditor)
                     : new DefaultCellEditor(comboBoxGenderEditor))
                  : (row == 2
                     ? new DefaultCellEditor(comboBoxAgeEditor)
                     : super.getCellEditor(row, column)));
      }
     
      public static void main(String[] args) {
        new TestJTable().setVisible(true);
      }
    }

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 175
    Points : 72
    Points
    72
    Par défaut
    salut je suis en plein dedans mais moi j essaie de metre des boutons dans ma jtable.

    Pour toi la solution est la, ca marche dans mon code .
    il faut metre ton nom de table a la place de tableordre,
    il faut metre ton nom de ta colone a la place de "Cloture"Column

    et n oublie pas de changer le numero de ta colone ici 16.
    Quaund tu comptes tes colones tu commences par 0.


    TableColumn ClotureColumn = tableordre.getColumnModel().getColumn(16);

    JComboBox bouton = new JComboBox();


    ClotureColumn.setCellEditor(new DefaultCellEditor(bouton));

    Par contre si quelqu un a une solution pour metre des JButton parceque le meme code ne veut pas le prendre et je galere.

    merci

  7. #7
    Membre éprouvé Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Points : 934
    Points
    934
    Par défaut
    Merci pour le code, herve, marche impec.

    Une dernière question avant le résolu :
    si j'ai déjà une table (jXTable dans NetBeans), est-il possible de simplement
    court-circiuter son CellEditor comme :

    jXTable.setCellEditor(SpecialTable.getCellEditor....) ?
    j'essaie sans arriver à rien;

    ça se voit je pense que je suis débutant et autodidacte... y'a plein de trous
    dans mes lacunes.

    Merci à tous en tous cas.

  8. #8
    Membre expérimenté 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
    Points : 1 608
    Points
    1 608
    Par défaut
    Non, tu ne peux pas court-circuiter le cellEditor de cette façon, c'est la méthode getCellEditor(int row, int column) qu'il est nécessaire de redéfinir.

  9. #9
    Membre éprouvé Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Points : 934
    Points
    934
    Par défaut
    Merci !
    Bon dimanche à tous.
    Résolu

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/10/2008, 13h28
  2. [JTable] JcomboBox dans une cellule
    Par agentmob dans le forum Composants
    Réponses: 1
    Dernier message: 06/06/2008, 00h02
  3. [JTable] JTextPane dans une cellule
    Par apqmwnqmap dans le forum Composants
    Réponses: 2
    Dernier message: 16/05/2008, 16h48
  4. [JTable] Ajouter un combobox dans une cellule
    Par monpseudonom dans le forum Composants
    Réponses: 1
    Dernier message: 08/04/2008, 00h34
  5. combobox dans une cellule
    Par norkoffire dans le forum AWT/Swing
    Réponses: 16
    Dernier message: 13/06/2007, 18h36

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