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 taille


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut JTabbedPane et taille
    Bonjour à tous,

    Voilà, je me heurte à un petit problème :
    Dans un Frame, j'ai un JTabbedPane avec différents onglets. A chaque changement de sélection d'onglet, il faudrait que je change la taille de mon TabbedPane pour qu'il colle au mieux au nouveau composant qu'il affiche.

    J'ai commencé par un écrire ce pov' bout de code, histoire de voir si c'était réalisable sans trop de problè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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    package javaapplication2;
     
    import com.jgoodies.forms.layout.CellConstraints;
    import com.jgoodies.forms.layout.FormLayout;
    import java.awt.Dimension;
    import java.awt.Rectangle;
    import javax.swing.*;
     
    /**
     *
     * Test sur tabbed pane dont la taille préférentielle est la taille du composant couramment affiché
     *
     * @author Administrateur
     */   
     
    public class TabbedPane extends JTabbedPane
    {
        public TabbedPane()
        {   super(); }
     
        protected void fireStateChanged()
        {
            super.fireStateChanged();
     
            /** remove all components and add the component at the selected index */
            JComponent c = (JComponent)this.getSelectedComponent();
            Dimension d = c.getPreferredSize();
     
            Rectangle rec = this.getUI().getTabBounds(this, this.getSelectedIndex());
     
            d.height += rec.height - rec.y;
     
            this.setPreferredSize(d);
        }
     
        public static void main(String[] args)
        {
            final JFrame frame = new JFrame();
            frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
     
            JPanel contentPanel = new JPanel(new FormLayout("fill:pref:grow", "pref, pref, pref"));
            CellConstraints cc = new CellConstraints();
     
            final TabbedPane tabbed = new TabbedPane();
     
            JPanel panela = new JPanel(new FormLayout("pref", "pref, fill:pref:grow"));
            JButton button = new JButton("6FFFFFFFFFFFF");
            panela.add(button, cc.xy(1, 1));
            button.setPreferredSize(new Dimension(70, 20));
            button.setAlignmentY(0.0f);
     
            JPanel panel = new JPanel();
            BoxLayout layout2 = new BoxLayout(panel, BoxLayout.PAGE_AXIS);
            panel.setLayout(layout2);
            panel.add(new JButton("1AAAAAAAAAAAAAAA"));
            panel.add(new JButton("2BBBBBBBBBBBBBBB"));
            panel.add(new JButton("3CCCCCCCCCCCCCCC"));
            panel.add(new JButton("4DDDDDDDDDDDDDDD"));
            panel.add(new JButton("5EEEEEEEEEEEEEEE"));
     
            tabbed.addTab("b", panel);
            tabbed.addTab("a", panela);
     
            contentPanel.add(new JLabel("label de début"), cc.xy(1, 1, cc.LEFT, cc.TOP));
            contentPanel.add(tabbed, cc.xy(1, 2, cc.LEFT, cc.TOP));
            contentPanel.add(new JLabel("label de fin"), cc.xy(1, 3, cc.LEFT, cc.TOP));
     
            frame.setContentPane(contentPanel);
     
            frame.pack();
            frame.setVisible(true);
        }
    }
    Déjà, suis pas certain que ce soit cool de surcharger fireStateChanged pour ca mais bon... Le problème comme vous pouvez le constater, c'est de déterminer la taille à donner au TabbedPane en fonction du composant affiché...

    quelqu'un a une idée?

  2. #2
    Membre chevronné Avatar de bassim
    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Février 2005
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 666
    Par défaut
    moi je fais un TaFrame.pack() et la fiche se redimensionne selon la taille des composants inclus dans le JTabbedPane

    évidemment il faut utiliser un Layout pour gérer le dimensionnement des composants

  3. #3
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    merci pour ta réponse mais j'aurais aimé ne pas intervenir sur la taille de la frame

  4. #4
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    Est-il possible de déterminer la taille qu'occuperait un JTabbedPane en fonction du composant couramment sélectionné?

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Je crois que ceci devrait aller.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dimension taille = monTabbedPane.getSelectedComponent().getPrefferedSize();

  6. #6
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    merci pour la réponse

    dingoth, c'est un peu ce que je fais dans le morceau de code de mon premier post!!
    Le probleme c'est que j'ai du mal à tenir compte des dimensions que place l'UI.... il faut que je prenne en compte la hauteur des onglets ( s'ils sont en alignement de type TOP ) + j'imagine d'éventuelles bordures.....

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/10/2013, 16h49
  2. taille d'un JTabbedPane
    Par diUPS dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 17/02/2011, 12h09
  3. Taille d'un composant dans un JTabbedPane
    Par bischof dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 18/04/2005, 18h13
  4. Connaitre la taille de la RAM
    Par dway dans le forum Assembleur
    Réponses: 23
    Dernier message: 15/09/2004, 10h05
  5. taille maximale d'une base de donnée paradox
    Par Anonymous dans le forum Paradox
    Réponses: 5
    Dernier message: 14/02/2004, 17h39

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