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 :

Problème d'agrandissement d'un JPanel


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 11
    Points : 14
    Points
    14
    Par défaut Problème d'agrandissement d'un JPanel
    Bonjour,

    J'ai un problème d'agrandissment ave ma fenetre. Lorsque je clique sur le bouton agrandir en haut de la fenetre, ma fenetre n'est pas complement redessinée, j'ai un panel qui n'est pas "agrandi".
    Je metgs un screenshot pour vous donner un apercu de l'erreur.
    et voici le code du panel en question.
    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    package common;
     
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Insets;
    import java.awt.Rectangle;
     
    import javax.swing.JPanel;
    import javax.swing.border.EmptyBorder;
     
    public class PanelApplication extends JPanel {
     
        private static final long serialVersionUID = 1L;
        private JPanel panelMenu = null;
        private JPanel panelContenu = null;
        private Windows win = null;
     
     
        public PanelApplication(Windows win) {
            super();
            this.win = win;
           panelMenu = getPanelMenu();
           panelContenu = getPanelContenu();
            initialize();
        }
     
     
        private void initialize() {
            this.setLayout(null);
     
            setDimensionPanel();
            this.add(getPanelMenu(), null);
            this.add(getPanelContenu(), null);
            this.setOpaque(false);
        }
     
        @Override
        public void paint(Graphics grphcs) {
            super.paint(grphcs);
            setDimensionPanel();
            repaint();
            revalidate();
        }
     
        public void setDimensionPanel(){
     
            int w = (int) (win.getSize().width);
            int h = (int) ( win.getSize().height);
     
            this.setSize(w, h);
     
              Insets insets = getInsets();
            Dimension size ;
            if(panelMenu != null)
            {
                size = panelMenu.getPreferredSize();
                panelMenu.setBounds(new Rectangle(
                                                                       (int)(0.009 * win.getSize().width)+insets.left,
                                                                       (int)(0.182 * win.getSize().height+insets.top),
                                                                       70,
                                                                       (int)(0.872 * win.getSize().height) - (int)(0.182 * win.getSize().height)
                                                                     )
                                                                 );
            }
            if(panelContenu != null)
            {
                size = panelContenu.getPreferredSize();
                    panelContenu.setBounds(new Rectangle(
                                                                        (int)(0.087 * win.getSize().width)+insets.left,
                                                                        (int)(0.182 * win.getSize().height)+insets.top,
                                                                        win.getSize().width - ( (int)(0.090 * win.getSize().width) ),
                                                                        (int)(0.872 * win.getSize().height) - (int)(0.182 * win.getSize().height)
                                                                        )
                                                                 );
            }
     
     
            if(panelContenu != null) panelContenu.setSize(win.getSize().width + 400, (int)(0.872 *win.getSize().height));
     
           repaint();
            revalidate();
        }
     
     
        public JPanel getPanelMenu() {
            if (panelMenu == null) {
                panelMenu = new JPanel();
                panelMenu.setLayout(new BorderLayout());
     
                Menu menu = new Menu(win);
                panelMenu.add(menu.getPanel());
                panelMenu.setOpaque(false);
                                    Insets insets = getInsets();
            Dimension size = panelMenu.getPreferredSize();
     
               panelMenu.setBounds(new Rectangle(10+insets.left, 140+insets.top, 70, (int)(0.872 *win.getSize().height)));
            }
     
            return panelMenu;
        }
     
        public JPanel getPanelContenu() {
            if (panelContenu == null) {
                panelContenu = new JPanel();
                panelContenu.setLayout(new BorderLayout());
                panelContenu.setOpaque(false);
     
                        Insets insets = getInsets();
            Dimension size = panelContenu.getPreferredSize();
     
                panelContenu.setBounds(new Rectangle(90+insets.left, 140 + insets.top, win.getSize().width + 400, (int)(0.872 *win.getSize().height)));
     
     
                   panelContenu.setBorder(new EmptyBorder(0,0,0,20));
            }
     
            return panelContenu;
        }
    }
    Images attachées Images attachées  

  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
    C'est normal, fallait pas utiliser de NullLayout (ce qui correspond à un setLayout(null) et à des setBounds dans tous les sens). Le NullLayout est en général considéré comme une mauvaise pratique. En effet, suivant les OS les polices, bordures, icônes et tout autre ressource graphique varient, de fait les calculs à base de NullLayout faits pour un OS particulier risquent de ne pas être valides pour les autres OS.
    De plus le NullLayout est fixe par essence, et ne gère pas les redimensionnements par nature.

    Dans ton cas je te conseille donc d'arrêter d'utiliser le NullLayout et de te pencher sur l'utilisation de Layouts corrects.

    Dans ton cas, la fenêtre devrait avoir la hiérarchie suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    JFrame
    |
    |---->Composant héritant de JPanel et redéfinissant la méthode paintComponent pour afficher une image. Layout: BorderLayout
             |
             |----> Dans le NORTH de ce JPanel ton Header
             |----> Dans le WEST de ce JPanel ton Menu
             |----> Dans le CENTER de ce JPanel ton JSplitPane
                      |
                      |----> Dans le Left du JSplitPane ton TaskPane
                      |----> Dans le Left du JSplitPane ta liste d'articles (je ne sais pas comment elle a été développée)
    Et le tour devrait être joué.
    Et de façon plus générale, évite de fixer des tailles en pixel à tes composants autant que possible.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

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

Discussions similaires

  1. petit problème de placement d'un JPanel
    Par anarkia dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 11/09/2008, 16h57
  2. Problème d'affichage surperposition de JPanel
    Par marcel72 dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 17/07/2007, 16h47
  3. Réponses: 2
    Dernier message: 08/02/2007, 12h02
  4. Réponses: 1
    Dernier message: 06/01/2007, 15h22
  5. Problème de taille d'un JPanel dans un GridLayout
    Par ZamZam340 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 30/04/2006, 20h56

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