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]AbstractCellEditor et Boolean


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Par défaut [JTable]AbstractCellEditor et Boolean
    Salut tout le monde,

    je rencontre quelque difficultés avec un renderer et peut etre l'un (ou l'une ) d'entre vous pourra m'eclairer ...

    Voila j'ai une Jtable dont une des colonne contient des Boolean.

    Au depart j'affichais une checkbox dans cette colonne donc aucun problème pour le renderer. Pour l'editeur j'avais crée une classe qui etendait DefaultCellEditor , et j'avais réecrit la methode stopCellEditing .
    Tout fonctionnait a merveille
    Seulement les spec ont changées (curieux non ?) et je doit maintenant afficher non plus une checkbox mais une image (un cadenas ouvert si False ou fermé si True).

    J'ai donc crée un renderer qui renvoir un JLabel avec le bon icon. Mon probleme vient de l'editeur : impossible de créer quelque chose de fonctionnel :

    Le super constructeur DefaultCellEditor accepte uniquement 3 composants (Textfield, checkbox et combobox) . Pas moyen de filer un JLabel.
    J'ai bien essayé de créer une classe basé sur DefaultCellEditor (qui etend AbstractCellEditor) mais je ne peux pas mettre de actionListener sur le Jlabel ...

    Si quelqu'un a une solution , je suis grandement preneur

    merci

  2. #2
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Bonjour,

    Le plus simple ne serait-il pas d'étendre JCheckBox ?
    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
    public class LockerCheckBox extends JCheckBox {
     
      private static Image locked, unlocked;
     
      // TODO : prendre en compte le cas ou le composant est
      // plus petit que l'image
     
      public void paintComponent(Graphics g) {
        Image image = super.isSelected() ? locked : unlocked;
     
        int xoffset = (super.getWidth() - image.getWidth())/2;
        int yoffset = (super.getHeight() - image.getHeight())/2;
     
        g.drawImage(xoffset, yoffset, null);    
      }
    }
    Bon, ça laisse un peu à désirer, mais si tu veux plus propre, tu peux redéfinir une CheckBoxUI. Ca sera en tout cas (à mon avis) plus simple que de redéfinir un Renderer.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  3. #3
    Membre éclairé Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Par défaut
    salut,

    heu ... j'avais pas du tout penser a une solution de ce type .
    J'essaie et je te tiens au courant

    merci pour ta réponse rapide

  4. #4
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Citation Envoyé par biozaxx
    heu ... j'avais pas du tout penser a une solution de ce type .
    Vu à quel point je déteste les TableCellRenderer/Editor, c'est normal que je réfléchisse autrement
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  5. #5
    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 : 52
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Par défaut
    Juste avant que tu t'embarques dans un truc de fou, regardes ce petit exemple ou j'utilise du texte au lieu d'images dans un JButton mais c'est pas bcp plus complique avec des images, c'est juste que je n'en avais pas sous la main

    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
      public class MyCellEditor extends AbstractCellEditor implements TableCellEditor
      {
        private JButton _but;
     
        private boolean _value;
     
        public MyCellEditor()
        {
          _but = new JButton();
          _but.setBorder(null);
          _but.setHorizontalAlignment(SwingConstants.LEFT);
          _but.setBackground(Color.white);
          _but.addActionListener(new ActionListener()
          {
            public void actionPerformed(ActionEvent event)
            {
              _value = Boolean.valueOf(_but.getText()).booleanValue();
              _value = ! _value;
              _but.setText(Boolean.toString(_value));
            }
          });
        }
     
        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)
        {
          _but.setText(value.toString());
          return _but;
        }
     
        public Object getCellEditorValue()
        {
          return Boolean.valueOf(_but.getText());
        }
      }
    dis moi ce que tu en penses,

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

  6. #6
    Membre éclairé Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Par défaut
    merciiiiiiiiiii

    alors j'ai laissé tomber l'extension de la checkbox par contre j'ai utilisé l'idée du bouton.
    Au final j'ai un renderer avec le jlabel et l'editeur qui fait appel au jbutton.
    Ca marche niquel

    par contre j'ai un tout petit souci : la hauteur d'une cellule de la table n'est plus suffisament haute pour afficher l'icone en entier ...
    TableColumn permet visiblement de modifier uniquement la largeur. Est ce que tu sais comment modifier cette taille ? sinon cela fera l'objet d'un nouveau poste

    en tout les cas merci a vous 2

    @+

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

Discussions similaires

  1. case à cocher pour valeur boolean dans un jtable
    Par robert_trudel dans le forum Composants
    Réponses: 2
    Dernier message: 08/11/2009, 22h16
  2. évenement Boolean JTable
    Par garciajulien dans le forum Composants
    Réponses: 0
    Dernier message: 13/04/2009, 15h14
  3. récupéré un boolean dans une Jtable
    Par Wensomtama dans le forum Composants
    Réponses: 2
    Dernier message: 17/06/2008, 23h15
  4. JTable + boolean
    Par mzibri dans le forum Composants
    Réponses: 5
    Dernier message: 02/06/2006, 18h10
  5. [Jtable] DefaultTableModel renderer des boolean
    Par lilou77 dans le forum Composants
    Réponses: 2
    Dernier message: 20/12/2005, 15h32

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