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 :

Besoin d'aide pour mettre un JCombox dans le header d'un JTable


Sujet :

Composants Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Besoin d'aide pour mettre un JCombox dans le header d'un JTable
    Bonjour,

    j'ai une Jtable avec diverses colonnes.

    j'aimerais intégrer un JComBox au header d'une de mes colonnes. Mais ca ne veut pas, puisque la JComboBox n'est pas un renderer mais un editor.
    Alors, j'arrive à "gruger" utilisant ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class MonHeaderRenderer extends JComboBox implements TableCellRenderer 
    {
    	public MonHeaderRenderer()
    	{ 
    	}
     
    	public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int column)
    	{
    	       return this;
    	}
    }
    Puis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    TableColumn colonne1 = this.getColumnModel().getColumn(2);
    colonne1.setHeaderRenderer(new MonHeaderRenderer());
    JComboBox headerJcb=(JComboBox) colonne1.getHeaderRenderer();
     
    headerJcb.addItem("val1");
    headerJcb.addItem("val2");
    headerJcb.addItem("val3");
    Mais, si ca m'affiche bien l'image d'un JCombobox, le fait de cliquer dessus ne donne rien du tout.
    Donc si vous aviez une idée pour utiliser une JComboBox dans le header de mon JTable ce serait top !

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Solution très simple et ne nécessitant pas de hack dégueulasse: virer le header (et encore on peut le garder) et utiliser la premère ligne de la JTable en tant que filtre. Tu remarqueras que c'est exactement ainsi qu'Excel procède pour ses filtres automatiques.

    Pour affecter un couple Renderer/Editor à une seule ligne seulement il suffit de créer une classe héritant de JTable et redéfinissant la méthode getCellEditor(int row, int column) pour qu'elle renvoie l'editor basé sur la JComboBox si row vaut 0, l'editor normal (super.getCellEditor(row, column) sinon.

    Pense par contre à te créer un modèle qui garde systématiquement la première ligne vide.

    Sinon pour faire ce que tu cherches à faire ça tient du gros hack à base de MouseListener et un redispatch d'event vers la ComboBox, honnêtement c'est assez galère comme truc. Une solution basée sur un JButton et un JPopupMenu serait probablement déjà un peu plus réalisable cf: http://www.java2s.com/Code/Java/Swin...derExample.htm

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour et merci de la réponse.
    J'ai déjà vu cet exemple et je ne vois pas en quoi il peut mettre utile...
    Je crois que je vais abandonner cette solution au profit d'une autre même si moins esthétique mais bcp plus simple à mettre en œuvre...

    si des fois quelqu'un aurait une solution simple de compréhension a me proposer.
    (je suis un initié au java mais pas un "pro")

    ce serait top !

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par sinok Voir le message
    Solution très simple et ne nécessitant pas de hack dégueulasse: virer le header (et encore on peut le garder) et utiliser la premère ligne de la JTable en tant que filtre. Tu remarqueras que c'est exactement ainsi qu'Excel procède pour ses filtres automatiques.

    Pour affecter un couple Renderer/Editor à une seule ligne seulement il suffit de créer une classe héritant de JTable et redéfinissant la méthode getCellEditor(int row, int column) pour qu'elle renvoie l'editor basé sur la JComboBox si row vaut 0, l'editor normal (super.getCellEditor(row, column) sinon.

    Pense par contre à te créer un modèle qui garde systématiquement la première ligne vide.
    Ca c'est une solution simple et plutôt acceptable dans l'ensemble à mon gout...

Discussions similaires

  1. Besoin d'aide pour garder un "referid=" dans mes URL
    Par gcvoiron dans le forum Langage
    Réponses: 4
    Dernier message: 21/05/2006, 16h17
  2. Besoin d'aide pour afficher une image dans un applet
    Par argon dans le forum AWT/Swing
    Réponses: 16
    Dernier message: 19/01/2006, 19h45
  3. Besoin d'aide pour afficher du text dans un applet
    Par argon dans le forum Applets
    Réponses: 2
    Dernier message: 15/01/2006, 21h53
  4. Réponses: 3
    Dernier message: 05/12/2005, 02h30
  5. besoin d'aide pour intégrer une entité dans un MCD
    Par barkleyfr dans le forum Schéma
    Réponses: 17
    Dernier message: 13/10/2005, 13h29

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