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

Agents de placement/Fenêtres Java Discussion :

JCheckBox dans un TitledBorder ?


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 5
    Par défaut JCheckBox dans un TitledBorder ?
    Bonjour,

    Ma question est dans le titre : comment mettre une case à cocher (JCheckBox) dans un TitledBorder ? Ou d'une manière plus générale, comment remplacer le String par un JComponent ?

    Merci.

  2. #2
    Membre averti Avatar de JWillow
    Inscrit en
    Juin 2003
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 57
    Par défaut
    Voici un embryon de réponse. A toi de le rendre un peu plus générique notamment sur la taille du composant.
    Je vais pas tout faire quand même

    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
     
     
     
    public class CustomTitledBorder extends TitledBorder {
     
    	private JComponent component = null;
     
    	public CustomTitledBorder(JComponent c_arg) {
    		super("");
    		component = c_arg;
    		component.setSize(50,10);
    		component.setOpaque(true);
    	}
     
     
     
     
                     public void paintBorder(Component arg0, Graphics arg1, int x, int y,
    			int w, int h) {
     
    		super.paintBorder(arg0, arg1, x , y + (component.getSize().height / 2), w, h -  component.getSize().height);		
    		component.setLocation(0, 0);
    		component.paint(arg1);
    	}
    }

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 5
    Par défaut
    OK, le principe est d'étendre un TitledBorder avec une chaîne vide (de la bonne longueur) et de dessiner par dessus mon composant. Je vois l'astuce, merci !

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 5
    Par défaut
    Bon, en fait, c'est un peu plus compliqué que ça. Après quelques adaptations, le visuel rend bien comme je veux, mais la checkBox n'a aucun comportement. Donc j'aimerai abonner ma checkBox aux évènements calvier/souris de Swing, mais voilà, une JCheckBox (ou plus généralement un JComponent) n'est pas un MouseListener, KeyListener etc...

    Comment ça se passe dans un JPanel quand on ajoute un JComponent ? Parcequ'il s'occupe bien d'abonner ses "composants internes" aux différents évènements ? Alors comment fait-il puisqu'un JComponent n'est pas un EventListener ? L'idéal serait de "copier" ce que fait un JPanel dans le "CustomTitledBorder", si c'est possible car un TitledBorder n'est pas un JComponent (oui, faut suivre !!!! ).

    Pfou, c'est le bordel tout ça !! Mais je dois pas être le premier à vouloir faire ça ??

  5. #5
    Membre averti Avatar de JWillow
    Inscrit en
    Juin 2003
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 57
    Par défaut
    En fait je viens de refaire mon test et tu as raison ...


    MAIS J'ai ajoute le composant aussi au panel qui à la bordure et là ça marche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    JPanel pane = new JPanel();
    JCheckBox chk = new JCheckBox("Test");
    pane.setBorder(new CustomTitledBorder(chk));
    pane.add(chk);
    getContentPane().add(pane);
    // En reaffectant un layout ta checkBox n'est plus gérer en terme de taille et de positionnement > il disparait graphiquement du panel
    // Mais le panel gére toujours son affichage
    // Dans CustomTitledBorder si tu enlève paintComponent sa marche toujours, il faut juste continuer à gérer sa taille et son positionnement
    pane.setLayout(new GridBagLayout());

    Je sais on dirait du bricolage mais j'ai pas mieux et ça marche !

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 5
    Par défaut
    Bon, moi, la bidouille marche pas trop car mon JPanel est géré par un GridBagLayout avec plein de contraintes de partout, et ma checkBox est toujours afichée (un peu n'importe où)...

    Mais j'ai trouvé une autre bidouille qui semble bien marcher. En fait, j'ajoute la JCheckBox au JPanel, je lui laisse tout gérer (évènements + affichage), et je change juste ma checkBox de place quand je dessine la bordure (je la dessine même pas !!). Bon, ça reste du bidouillage quand même !!

    Pour ceux que ça intéresse, voici le code que j'obtiens finalement :

    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
    public class CustomTitledBorder extends TitledBorder {
     
      private JComponent internalComponent = null;
     
      public CustomTitledBorder(JComponent component, JComponent parentComponent) {
        super(" ");
        internalComponent = component;
        internalComponent.setSize(internalComponent.getPreferredSize());
        parentComponent.add(internalComponent);
      }
     
      public void paintBorder(Component component, Graphics g, int x, int y, int w, int h) {
        super.paintBorder(component, g, x, y, w, h);
        internalComponent.setLocation(10, -1);
      }
     
    }
    En tout cas, merci JWillow pour ton aide !!!

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

Discussions similaires

  1. JCheckBox dans JTree
    Par nanourene dans le forum Composants
    Réponses: 9
    Dernier message: 26/09/2008, 18h10
  2. declarer plusieurs JcheckBox dans une boucle
    Par 01211983 dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 21/02/2008, 01h47
  3. Probleme avec JCheckBox dans le menu contextuel
    Par Mo_Poly dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 20/03/2007, 21h29
  4. jcheckbox dans une jtable
    Par orelero dans le forum Composants
    Réponses: 6
    Dernier message: 20/05/2006, 01h31
  5. pb avec un JcheckBox dans un Jtable
    Par hutchuck dans le forum Composants
    Réponses: 4
    Dernier message: 04/11/2005, 09h51

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