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 :

Problèmes concernant une JTable


Sujet :

Composants Java

  1. #21
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Par défaut
    Apparemment pas .. par contre je ne m'explique pas comment on peut accéder directement du renderer à l'editor sans perdre l'événement en route... j'avais le souvenir d'un comportement différent.. au temps pour moi.

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  2. #22
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Par défaut
    Juste pour le fun, ajoute une ligne à ton exemple et retestes... je me disais bien que c'était un peu plus complexe dans mes souvenirs .. mais bon ..

    Et même sans le JOptionPane qui gêne un peu le rafraîchissement, il y a un soucis de bouton qui reste enfoncé.
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  3. #23
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Il suffit d'utiliser deux boutons un pour le rendu, un pour l'édition ...

    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
     
    import java.awt.Component;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.EventObject;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.WindowConstants;
    import javax.swing.event.CellEditorListener;
    import javax.swing.event.ChangeEvent;
    import javax.swing.event.EventListenerList;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableCellEditor;
    import javax.swing.table.TableCellRenderer;
     
    public class TableButtonCell {
     
       public static void main(final String[] args) {
     
          final EventListenerList listeners = new EventListenerList();
          final JButton button = new JButton();
          button.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent e) {
                String input = JOptionPane.showInputDialog(null, "New name", button.getText());
                if (input != null) {
                   button.setText(input);
                }
                ChangeEvent event = null;
                for (CellEditorListener l : listeners.getListeners(CellEditorListener.class)) {
                   if (event == null) {
                      event = new ChangeEvent(this);
                   }
                   if (input != null) {
                      l.editingStopped(event);
                   } else {
                      l.editingCanceled(event); 
                   }
                }
             }
          });
          final JButton stamp = new JButton();
          DefaultTableModel model = new DefaultTableModel(new Object[][] { { "Tartuffe" }, { "Tartampion" } }, new Object[] { "Title" } );
          JTable table = new JTable(model);
          table.getColumnModel().getColumn(0).setCellRenderer(new TableCellRenderer() {
     
             public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
                   int row, int column) {
                stamp.setText(String.valueOf(value));
                return stamp;
             }
          });
          table.getColumnModel().getColumn(0).setCellEditor(new TableCellEditor() {
     
             public boolean stopCellEditing() {
                return true;
             }
     
             public boolean shouldSelectCell(EventObject anEvent) {
                return true;
             }
     
             public void addCellEditorListener(CellEditorListener l) {
                listeners.add(CellEditorListener.class, l);
             }
     
             public boolean isCellEditable(EventObject anEvent) {
                return true;
             }
     
             public void removeCellEditorListener(CellEditorListener l) {
                listeners.remove(CellEditorListener.class, l);
             }
     
             public Object getCellEditorValue() {
                return button.getText();
             }
     
             public void cancelCellEditing() {
             }
     
             public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
                button.setText(String.valueOf(value));
                return button;
             }
          });
     
          JFrame frame = new JFrame("My Table");
          frame.setSize(640, 480);
          frame.getContentPane().add(new JScrollPane(table));
          frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
          frame.setLocationRelativeTo(null);
          frame.setVisible(true);
       }
    }
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  4. #24
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 273
    Par défaut
    Il y a plusieurs trucs que je comprends pas dans ton code Nemek et j'ai trouvé beaucoup de codes qui ressemblent au tiens sur le net.

    1) Ici tu ne renvoies qu'une seule colonne, la première. OK mais comment tu choisis ta ligne ensuite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table.getColumnModel().getColumn(0).setCellRenderer(new TableCellRenderer() ...
    2) ensuite tu redéfinis la méthode getTableCellRendererComponent dont les paramètres spécifient par exemple la ligne (et la colonne Oo, alors qu'on vient de spécifier qu'on voulait la premiere, où est l'intérêt?).

    3) tu n'appelles jamais cette méthode. A quel moment tu spécifies donc que tu veux telle cellule dans la première colonne?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
                   int row, int column) {
                stamp.setText(String.valueOf(value));
                return stamp;
             }

  5. #25
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Oh là tu viens de loin
    Je te conseille de lire un tutorial Java et les interface (le mot-clé, pas les IHMs)

    Pour répondre
    1. Les renderer/editor d'une JTable sont setter par colonne. Le design suppose que les données d'une même colonne sont généralement uniformes (de même nature, de même type).
    2. C'est l'interface TableCellRenderer qui le définit. Lis le tutorial Sun/Oracle sur la gestion des JTable. Tu peux très bien utiliser une seule instance de renderer pour toute ton application, il faut donc bien pouvoir savoir qu'elle est la table, la ligne et la colonne concerné pour bien initialiser le renderer.
    3. Idem que précédemment. C'est la JTable qui appelle cette méthode comme une grande
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  6. #26
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 273
    Par défaut
    Bon j'ai un autre problème maintenant. Le fait qu'il faut que j'appuie au moins une fois sur la ligne de ma JTable pour voir les résultats. Sinon je ne vois rien, pourtant la recherche s'est bien passée.

  7. #27
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Est-ce que ton modèle (TableModel) notifie bien ces changements ?
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  8. #28
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 273
    Par défaut
    Si ta question est de savoir si j'ai redéfini la méthode isCellEditable, la réponse est oui. Mais mon problème ne vient pas de là.
    J'appuie sur mon bouton "enregistrement suivant" disons, mais il faut que j'appuie avec la souris sur chaque cellule de la ligne pour voir la modif s'afficher.

  9. #29
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Je parle de notification de changement ...
    Quand le modèle est modifié, il doit notifier les listener qui se sont enregistrés.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  10. #30
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2010
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 273
    Par défaut
    En fait mes JButton ne sont plus dans ma JTable. Il n'y aucun Listener dans ma JTable d'ailleurs, juste des JLabel que je demande qu'ils se mettent à jour.

    Bon j'ai enfin trouvé une solution en faisant simplement tableau.repaint() après chaque changement.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Problème concernant une action Struts JSP
    Par letelwad dans le forum Struts 1
    Réponses: 1
    Dernier message: 17/07/2013, 15h48
  2. [AC-2003] Problème concernant une liste de produit bdd + SQL
    Par Nheil dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 29/03/2010, 08h36
  3. Réponses: 0
    Dernier message: 11/02/2010, 17h49
  4. Problème avec une JTable
    Par Spinoza23 dans le forum AWT/Swing
    Réponses: 34
    Dernier message: 08/02/2007, 20h06
  5. Problèmes avec une JTable
    Par Fab916 dans le forum Composants
    Réponses: 4
    Dernier message: 12/01/2006, 14h11

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