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 et JComboBox : problème lors de l'édition


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Par défaut JTable et JComboBox : problème lors de l'édition
    Bonjour tout le monde

    J'ai une JComboBox dans une JTable,en suivant les indications contenues dans le tutorial de sun : http://java.sun.com/docs/books/tutor...nts/table.html


    J'obtiens donc comme il faut une JComboBox qui s'affiche dans les colonnes adéquates, mais lorsque je clique dessus pour affecter une nouvelle valeur a une de ces colonnes, la valeur sélectionnée devient la dernière valeur donnée à une JComboBox de la colonne.

    Cela ne m'empêche pas de changer cette valeur ensuite mais cela est genant de se retrouver lors de l'édition avec une valeur n'ayant rien à voir avec celle sélectionnée pour cette ligne précisément...

    Pour éclaircir, voici des captures d'écran :

    Je crées 2 lignes pour lesquelles j'affecte les bonnes valeurs => l'affichage est ok :




    Puis, je veux modifier le type de la ligne1, je clique donc dessus :



    Et là, il me sélectionne "Choice" alors que c'était "Number" qui était sélectionné pour cette ligne

    Je rappelle que ce n'est rien de bien grave puisqu'ensuite, je peux remettre cette valeur à "Number" sans autres conséquences néfastes, mais c'est juste un comportement troublant à l'utilisation...

    Si quelqu'un pouvait m'indiquer ce que j'ai mal fait... Je vous remercie d'avance

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    On pourrait voir le code de ta classe Renderer qui représente le JComboBox...

    a++

  3. #3
    Membre chevronné Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Par défaut
    C'est l'équivalent de ces 2 lignes du tutorial :

    sportColumn.setCellEditor(new DefaultCellEditor(comboBox));

    //Set up tool tips for the sport cells.
    DefaultTableCellRenderer renderer =
    new DefaultTableCellRenderer();

    Je cherche actuellement un code min de l'erreur...

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Et quel est le type des objets Java stocké dans cette colonne ???

    a++

  5. #5
    Membre chevronné Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Par défaut
    Bon en mixant le code de sun et le miens, je suis arrivé a une version plus petite mais qui buggue toujours. La voici :

    Les types manipulés :

    P1PropertyType :
    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
     
    public abstract class P1PropertyType {
     
        public static String textProperty = "Text";
        public static String numberProperty = "Number";
     
        private String name;
     
        public P1PropertyType (String n) {
            name = n;
        }
     
        public String getName() {
            return name;
        }
     
        public void setName(String string) {
            name = string;
        }
     
        public String toString () {
            return getName();
        }
     
        // creates a new PropertyType with the type parameter
        static public P1PropertyType createPropertyType (String type) {
            if (type.equals(textProperty)) {
                return new P1TextPropertyType("");
            } else if (type.equals(numberProperty)) {
                return new P1NumberPropertyType("");
            }
            return null;
        }
     
        public abstract String getType ();
    }
    P1TextPropertyType :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class P1TextPropertyType extends P1PropertyType {
     
        public P1TextPropertyType(String n) {
            super(n);
        }
     
        public String getType() {
            return P1PropertyType.textProperty;
        }
    }
    P1NumberPropertyType :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class P1NumberPropertyType extends P1PropertyType {
     
        public P1NumberPropertyType(String n) {
            super(n);
        }
     
        public String getType() {
            return P1PropertyType.numberProperty;
        }
    }
    Ma JComboBox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class P1JComboBoxPropertyType extends JComboBox {
     
        private static final long serialVersionUID = 1L;
     
        public P1JComboBoxPropertyType() {
            super();
            DefaultComboBoxModel model = new DefaultComboBoxModel();
            model.addElement(new P1TextPropertyType(P1PropertyType.textProperty));
            model.addElement(new P1NumberPropertyType(P1PropertyType.numberProperty));
            this.setModel(model);
        }    
    }
    Le code de sun repris et arrangé pour utiliser mes classes (et qui buggue 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
    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
    96
    97
    98
     
    public class TableRenderDemo extends JPanel {
     
        private static final long serialVersionUID = 1L;
     
        public TableRenderDemo() {
            super(new GridLayout(1,0));
     
            JTable table = new JTable(new MyTableModel());
            setUpSportColumn(table, table.getColumnModel().getColumn(1));
            add(table);
        }
     
        public void setUpSportColumn(JTable table,
                                     TableColumn sportColumn) {
            P1JComboBoxPropertyType comboBox = new P1JComboBoxPropertyType();
            sportColumn.setCellEditor(new DefaultCellEditor(comboBox));
        }
     
        class MyTableModel extends AbstractTableModel {
     
            private static final long serialVersionUID = 1L;
            private String[] columnNames = {"Name","Type"};
            private Object[] data = {
                new P1TextPropertyType(""),
                new P1NumberPropertyType(""),
                new P1TextPropertyType(""),
                new P1NumberPropertyType(""),
                new P1TextPropertyType("")
            };
     
            public final Object[] longValues = {"None of the above"};
     
            public int getColumnCount() {
                return columnNames.length;
            }
     
            public int getRowCount() {
                return data.length;
            }
     
            public String getColumnName(int col) {
                return columnNames[col];
            }
     
            public Object getValueAt(int arg0, int arg1) {
                P1PropertyType pt = (P1PropertyType)data[arg0];
                switch (arg1) {
                    case 0 :
                        return pt.getName();
                    case 1 :
                        return pt.getType();
                }
                return null;
            }
     
            public Class<?> getColumnClass(int c) {
                return getValueAt(0, c).getClass();
            }
     
            public boolean isCellEditable(int row, int col) {
                    return true;
            }
     
            public void setValueAt(Object value, int row, int col) {
                P1PropertyType pt = (P1PropertyType)data[row];
                switch (col) {
                    case 0 :
                        pt.setName((String)value);
                        break;
                    case 1 :
                        String n = pt.getName();
                        pt = P1PropertyType.createPropertyType(((P1PropertyType)value).getType());
                        pt.setName(n);
                        data[row] = pt;
                        break;
                }
                fireTableCellUpdated(row, col);
            }
        }
     
        private static void createAndShowGUI() {
            JFrame frame = new JFrame("TableRenderDemo");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            TableRenderDemo newContentPane = new TableRenderDemo();
            frame.setContentPane(newContentPane);
            frame.pack();
            frame.setVisible(true);
        }
     
        public static void main(String[] args) {
            javax.swing.SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    createAndShowGUI();
                }
            });
        }
    }
    Voila, avec ce code, j'ai le même comportement dérangeant... Je pense que mon erreur provient de la méthode "setValueAt", mais je ne comprends pas... Merci si vous avez une idée (ou si vous savez carrément )

  6. #6
    Membre chevronné Avatar de Claythest
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    558
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 558
    Par défaut
    L'erreur ne vient pas de mon setValueAt puisque si je met rien dans ce code, j'obtiens toujours le même problème...

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

Discussions similaires

  1. Gxt: Problème lors d'une édition dans une EditorGrid
    Par miragul dans le forum GWT et Vaadin
    Réponses: 2
    Dernier message: 07/03/2013, 17h05
  2. Réponses: 2
    Dernier message: 27/03/2009, 11h30
  3. [JTable] Problème lors de la création via Vector
    Par Shurka dans le forum Composants
    Réponses: 6
    Dernier message: 13/08/2007, 12h48
  4. [JTable]évènement lors de l'édition ?
    Par Claythest dans le forum Composants
    Réponses: 1
    Dernier message: 03/05/2007, 10h36
  5. Réponses: 9
    Dernier message: 12/06/2006, 09h59

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