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 :

[Débutant] Problème JScrollPane et plein écran


Sujet :

AWT/Swing Java

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [Débutant] Problème JScrollPane et plein écran
    Bonjour à tous !

    Je travaille sur une IHM développée en awt/swing qui consiste en un écran de visualisation à droite et plusieurs panneaux de menus rétractables à gauche. Ces derniers sont chacun des JPanel et l'ensemble est encapsulé dans un autre JPanel appelé SideBar, lui même dans un autre JPanel appelé alignPanel.

    A l'origine, j'avais donc simplement ma MainFrame (JFrame) dans laquelle étaient ajoutés les deux éléments :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    add(scroll, BorderLayout.WEST);
    add(ecran, BorderLayout.CENTER);
    Enfin, un bouton permet de passer en mode "plein écran", c'est-à-dire que la sidebar de gauche disparait et l'écran de droite remplit tout l'espace. Ceci est basiquement géré par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        public void fullScreenOn()
        {
            sideBar.setVisible(false);
        }
     
        public void fullScreenOff()
        {
            sideBar.setVisible(true);
        }
    Mon souci est apparu lorsque j'ai décidé de rajouter une scrollbar sur la sidebar pour améliorer l'utilisation. Celle-ci se révèle en effet incompatible avec le mode plein écran : l'ensemble (sidebar + scrollbar) disparaît bien, mais son emplacement reste visible et l'écran de droite ne bouge pas.

    Voici le code de la mainFrame :
    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
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    /*
     * MainFrame.java
     *
     * Created on 15 mai 2007, 14:55
     *
     */
     
    {...}
     
    public class MainFrame extends JFrame
    {
     
    {...}
     
        // -------------------------------------------------------------------------
        // ATTRIBUTES
        // -------------------------------------------------------------------------
        private GLPPI ppi;
     
        private Toolbar toolbar;
     
        private Sidebar sideBar;
     
        private JMenuBar menuBar;
     
        private JScrollPane scroll;
     
        private JPanel alignPanel;
     
        // -------------------------------------------------------------------------
        //  CONSTRUCTOR & INIT
        // -------------------------------------------------------------------------
        /**
         * Default constructor.
         */
        private MainFrame()
        {
            super("IHM");
        }
     
        public static MainFrame getInstance()
        {
            if (s_instance == null)
            {
                s_instance = new MainFrame();
            }
            return s_instance;
        }
     
        public void init()
        {
            setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
     
            addWindowListener(new WindowAdapter()
            {
     
                public void windowClosing(WindowEvent e)
                {
                    EGlobalActions.EXIT_ACTION.getAction().actionPerformed(null);
                }
            });
     
            setIconImage(ImageManager.getInstance().getImage("iconentourage.png"));
     
            initComponents();
            initMenus();
     
     
     
            LayerManager.getInstance().init();
     
            pack();
            setExtendedState(JFrame.MAXIMIZED_BOTH);
     
            pack();
        }
     
        // -------------------------------------------------------------------------
        //  ACCESS METHODS
        // -------------------------------------------------------------------------
     
    {...}
     
        /**
         * Retrieves toolbar associated to the MainFrame.
         * @return the associated toolbar
         */
        public Toolbar getToolBar()
        {
            return toolbar;
        }
     
        // -------------------------------------------------------------------------
        // METHODS
        // -------------------------------------------------------------------------
        private void initComponents()
        {
            setLayout(new BorderLayout(4, 0));
     
    {...}
     
            // Creates full swing components
            toolbar = new Toolbar();
            sideBar = new Sidebar();
            add(toolbar, BorderLayout.NORTH);
            alignPanel = new JPanel(new BorderLayout());
            scroll = new JScrollPane(alignPanel);
            alignPanel.add(sideBar, BorderLayout.NORTH);
            scroll.getVerticalScrollBar().setUnitIncrement(20);
        scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
            add(scroll, BorderLayout.WEST);
            add(ecran, BorderLayout.CENTER);
            add(new Statusbar(), BorderLayout.SOUTH);
        }
     
    {...}
     
        public void fullScreenOn()
        {
            alignPanel.setVisible(false);
            scroll.setVisible(false);
            sideBar.setVisible(false);
        }
     
        public void fullScreenOff()
        {
            alignPanel.setVisible(true);
            scroll.setVisible(true);
            sideBar.setVisible(true);
        }
    Comment faire pour que l'écran s'agrandisse comme avant? Ca n'a pas l'air spécialement compliqué, mais tout ce que j'ai essayé n'a pas marché.

    Merci de votre aide!

  2. #2
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Bonjour,

    avant tout, il est inutile d'appeler setVisible(true/false) sur autre chose que sideBar. Mais par contre, il faut sûrement appeler revalidate() sur l'objet qui contient sideBar (en l'occurrence this) pour recalculer le layout.

    Une autre solution plus simple c'est simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void fullScreenOn() {
      remove(sideBar);
    }
     
    public void fullScreenOff() {
      add(sideBar, BorderLayout.WEST);
    }
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup xavlours : ça fonctionne!!

    Sinon, j'ai un autre problème qui est un peu lié au précédent : lorsque je veux minimiser ma fenêtre (le bouton du milieu parmi les 3 qui se trouvent en haut à droite de la fenêtre), seul l'écran de droite disparaît complètement et la sidebar reste au même endroit et avec la même taille.

    Comment faire pour que tout se réduise proportionnellement, comme dans n'importe quelle application?
    Il me semblait que c'était le rôle d'un layout ce genre de chose non?

  4. #4
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Euh là comme ça je ne peux pas te sortir la politique du BorderLayout en terme de redimensionnement. Mais je crois qu'un JSplitPane collera mieux à ce que tu recherches (redimensionnement proportionnel, pouvoir cacher un côté, ...)
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

Discussions similaires

  1. [Débutant] Plein écran ?
    Par ghohm dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 27/06/2007, 11h00
  2. Problème avec Turbo C en plein écran.
    Par dutrez dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 30/05/2007, 22h12
  3. Réponses: 3
    Dernier message: 23/08/2006, 12h29
  4. problème fenêtre plein écran
    Par chti_juanito dans le forum AWT/Swing
    Réponses: 13
    Dernier message: 01/02/2006, 19h13
  5. Problème d'affichage en plein écran
    Par kurul1 dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/11/2005, 14h43

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