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 :

[JXTable] Renderer pour JButton


Sujet :

Composants Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 90
    Par défaut [JXTable] Renderer pour JButton
    Bonjour à tous,

    Je rencontre un problème pour afficher comme Renderer d'une de mes cellules, un JButton. Autant cela fonctionnait lorsque le renderer n'était pas réellement adapté (j'avais fait un renderer pour JTable et non pour JXTable), autant là impossible de savoir quoi utiliser :

    Le ComponentProvider qui serait un button est en fait une checkbox et est d'ailleurs deprecated. Je n'ai rien trouvé d'autre comme solution.

    Quelqu'un aurait il une idée ou une voie à m'indiquer ?

    Merci beaucoup,

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Août 2008
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 265
    Par défaut
    Salut,

    Pas le trop le temps de regarder en détail, mais si ça peut t'aider voilà le code que j'utilise

    Dans la JFrame :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TableColumnModel myColumnModel = this.table.getColumnModel();
     
            TableColumn column = myColumnModel.getColumn(0);
            column.setCellRenderer(new ButtonRender("button", "button"));
    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
    public class ButtonRender extends DefaultTableCellRenderer {
     
        private javax.swing.JToggleButton button = new javax.swing.JToggleButton();
     
        public ButtonRender(String type, String text) {
            this.button.setText(text);
        }
     
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasfocus, int rowIndex, int columnIndex) {
            String val = (String) value;
            if (val.equalsIgnoreCase("OK")) {
                this.button.setEnabled(true);
            } else {
                this.button.setEnabled(false);
            }
            return this.button;
     
        }
    }


    J'ai tenté de réduire un maximum mon code.
    En espérant que ça t'inspire

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 90
    Par défaut
    Merci Larger mais le problème est que c'est que ton exemple est parfaitement adapté pour une JTable mais pas une JXTable

    En fait le Renderer que j'utilise actuellement est plus ou moins le même que celui que tu as fait et cela fonctionne "a peu près" à cause de cette fichue non compatibilité entre JXTable et JTable ( dont notamment un sacré bazar avec les Highlighters de la JXTable ). En fait, j'ai defini mon renderer de cette façon :

    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
     
     BooleanValue bv = new BooleanValue(){
        public boolean getBoolean(Object value) {
    		if (editButton.isSelected())
    		 return true;
    	       return false;
                }
      };
     StringValue sv = new StringValue() {
    	public String getString(Object value) {
    		if (value == null)
    			return "";
    		else
    			return value.toString(); }
    	};     
     
     _renderer = new DefaultTableRenderer( new ButtonProvider(new MappedValue(sv, null, bv), JLabel.LEADING));
    Mais là j'ai une checkbox qui apparait dans ma case

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Août 2008
    Messages
    265
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 265
    Par défaut
    Arg, désolé

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Bah en même temps si on regarde le code du ButtonProvider, bah il s'agit bien d'une CheckBox pas d'un Button (de toute façon une JCheckBox est un AbstractButton).
    Donc dans ton cas il va falloir que tu écrives ton propre provider.

    Tu peux t'inspirer pour cela du code du ButtonProvider que tu trouveras là:

    http://swinglabs.org/hudson/job/Swin...nProvider.java

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 90
    Par défaut
    Ah oui exact sinok : il suffit de changer le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     protected AbstractButton createRendererComponent() {
            return new JRendererCheckBox();
        }
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        protected JButton createRendererComponent() {
            return new JButton();
        }
    Enfin ça fonctionne comme il faut mais je n'arrive pas à enlever le comportement des Highlighters du coup il ressemble à un Label une case sur deux :/

    J'ai regardé du coté du configureVisuals(CellContext context), mais là dès que j'y touche ça annule complètement son comportement (et donc ce n'est plus du tout un bouton).

    Bizarre non ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    90
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 90
    Par défaut
    Bon je n'ai pas réussi mais ce n'est pas gênant : ça va avec le Highlighter.

    Merci à tous pour l'aide

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

Discussions similaires

  1. JTable - Renderer pour panel
    Par nabich dans le forum Composants
    Réponses: 2
    Dernier message: 18/01/2011, 23h11
  2. [jxtable] Renderer pour masquer certaines colonnes
    Par Renaud-62 dans le forum Composants
    Réponses: 9
    Dernier message: 17/07/2008, 21h58
  3. Réponses: 20
    Dernier message: 22/07/2006, 13h39
  4. Problème gestion actionListener pour JButton
    Par cedricbr dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 26/05/2006, 16h39
  5. Icon pour pour JButton dans une Jtable + pb colonnes
    Par dim_italia dans le forum Composants
    Réponses: 3
    Dernier message: 22/02/2006, 18h05

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