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

AWT/Swing Java Discussion :

JTabbedPane et setLocation()


Sujet :

AWT/Swing Java

  1. #1
    Membre éclairé Avatar de HebusBreizh
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Par défaut JTabbedPane et setLocation()
    Bonjour,

    j'ai un problème en utilisant la méthode setLocation() à l'intérieur d'un JTabbedPane.

    Voici une description de ma fenêtre:
    - un JTabbedPane avec plusieurs onglets
    - à l'intérieur d'un de ces onglet, un tableau trop grand pour être affiché en entier (il y a donc une scrollbar horizontale)
    - au dessus de certaines colonnes de ce tableau, des JLabel qui décrivent le contenu des dites colonnes

    Lorsque je bouge la scrollbar, le tableau "glisse" et j'aimerais que les labels suivent aussi.
    Pour cela, j'ai mis un listener sur la scrollbar et j'y fais un setLocation() sur le label en fonction du déplacement de la scrollbar.

    Cependant, ça ne marche pas.
    Néanmoins, j'arrive à déplacer un JLabel avec une toolbar si jamais ils sont dans un container et non pas dans un JTabbedPane.

    Quelqu'un sait-il pour le layout du JTabbedPane m'empêche de déplacer des composants avec setLocation()?

    Merci de vos réponses

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 179
    Par défaut
    Citation Envoyé par HebusBreizh Voir le message
    Quelqu'un sait-il pour le layout du JTabbedPane m'empêche de déplacer des composants avec setLocation()?
    Utiliser setLocation() ou setBounds() n'a de sens qui si justement tu n'as pas de LayoutManager. Rien ne t'empêche de mettre un JPanel dans le TabPanel qui lui aura un layout null. Mais attention, tu dois gérer toi-même le positionnement de tous les composants et ce dans tous les cas (redimensionnement & cie)

    Fred

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 116
    Par défaut
    Arrg que c'est moche.
    L'object TableColumn contient un header.

    void setHeaderRenderer(TableCellRenderer headerRenderer)
    void setHeaderValue(Object headerValue)

    Pourquoi ne pas mettre le titre de colonne dedans?

  4. #4
    Membre éclairé Avatar de HebusBreizh
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Par défaut
    Pourquoi ne pas mettre le titre de colonne dedans?
    La table contient plusieurs colonnes.
    Chaque colonne a un titre dans le header. Et par exemple, les 4 première colonnes forment un groupe décrit par un premier JLabel, les 4 suivantes forment un autre groupe décrit par un autre JLabel, ...

    Est-ce qu'on peut en plus du header, créer un autre header (qui lui serait attaché et dont on fusionnerait les colonnes pour avoir le résultat souhaité) ?

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 179
    Par défaut
    Citation Envoyé par HebusBreizh Voir le message
    Est-ce qu'on peut en plus du header, créer un autre header (qui lui serait attaché et dont on fusionnerait les colonnes pour avoir le résultat souhaité) ?
    Tu peux définir l'objet JTableHeader au niveau de la table. Donc oui, ça devrait être possible.

    Mais il y a un certain nombre de chose auquel du devra faire attention :
    - Les déplacements de colonnes
    - Les tris sur les colonnes
    - Les autres trucs auquel je pense pas et qui risque de faire chier !

    Fred

  6. #6
    Membre éclairé Avatar de HebusBreizh
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Par défaut
    J'ai résolu les problèmes que tu te poses:
    - myTable.getTableHeader().setReorderingAllowed(false)
    - la table n'est pas triable
    - on ne peut pas faire d'autre action que de rajouter (et supprimer) des lignes, donc à priori, il ne devrait pas y avoir d'autres problèmes

    Allez, au boulot maintenant!

  7. #7
    Membre éclairé Avatar de HebusBreizh
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Par défaut
    Pfffff, c'est pas facile...
    Voila le header que je souhaite obtenir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    |---------------------------|
    |  Description des 4 Cols   |
    |---------------------------|
    | Col1 | Col2 | Col3 | Col4 |
    |---------------------------|
    Et voici hélas ce que j'arrive à faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    |----------------------------|
    |  Desc|ription| des 4| Cols |
    |----------------------------|
    | Col1 | Col2  | Col3 | Col4 |
    |----------------------------|
    Quelqu'un a une idée pour fusionner les parties supérieures du header, c'est à dire ne plus avoir ma bordure de séparation des colonnes (en rouge sur le deuxième schéma)?

    Merci pour vos idées, suggestions, remarques, critiques....

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 179
    Par défaut
    Citation Envoyé par HebusBreizh Voir le message
    Pfffff, c'est pas facile...
    Je te crois sur parole !

    Je veux bien essayer de t'aider, mais il faudrait que je sache déjà comment tu as géré les deux niveaux dans le header.

    On m'a demandé ce genre de chose aussi.
    Du coup, ton expérience m'interresse .

    Fred

  9. #9
    Membre éclairé Avatar de HebusBreizh
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 85
    Par défaut
    Merci pour cette proposition

    Pour l'instant, les 2 niveaux du header sont gérés ainsi: j'ai créé une nouvelle classe qui implémente TableCellRenderer.
    Dans cette classe, j'ai un layout qui contient 2 cellules l'une au dessus de l'autre, avec des propriétés différentes pour que la cellule du haut soit transparente et pour que celle du bas ait la couleur d'un header comme partout ailleurs.

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 179
    Par défaut
    Si j'ai bien compris, tu essaies en changeant le renderer du JTableHeader ?

    Comme quoi j'ai bien fait de poser la question, j'étais parti sur la création d'un composant héritant de JTableHeader.

    A vrai dire, je ne pense pas qu'on puisse résoudre ce problème avec l'utilisation d'un renderer.
    Le découpage en colonne est déja fait à ce niveau.

    C'est pour ça que je partais sur la création d'un JTableHeader spécial qui contiendrait deux niveaux. Je ne sais pas encore où gérer ces deux niveaux : avec le layout du header, en redéfinissant son UI ou en créant une bordure spéciale. Ce sont les trois pistes que je vois, mais je ne pourrais vraiment me décider qu'après étude du code du JTableHeader...

    Fred

Discussions similaires

  1. [JTabbedPane] afficher texte étiquette bas en haut.
    Par spoutyoyo dans le forum Agents de placement/Fenêtres
    Réponses: 11
    Dernier message: 07/07/2009, 17h46
  2. Utilisation de setLocation()
    Par mush_H dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 04/08/2004, 11h13
  3. JTabbedPane
    Par soad dans le forum Composants
    Réponses: 3
    Dernier message: 15/07/2004, 14h57
  4. [JTabbedPane]Refresh spécifique
    Par Piolet dans le forum Composants
    Réponses: 3
    Dernier message: 11/06/2004, 19h11
  5. [JTabbedPane] Accès à des composants dynamiques
    Par SamRay1024 dans le forum Composants
    Réponses: 8
    Dernier message: 26/05/2004, 13h04

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