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 :

Créer un JPanel scrollable


Sujet :

AWT/Swing Java

  1. #1
    Invité de passage
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2026
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2026
    Messages : 52
    Par défaut Créer un JPanel scrollable
    Hello
    Nouveau problème

    Les deux images qui suivent montrent les deux aspect que doit avoir la fenêtre de mon projet

    Nom : Winscroll-5.png
Affichages : 50
Taille : 22,9 Ko
    Nom : Winscroll-6.png
Affichages : 50
Taille : 31,2 Ko

    Explication des zones
    1. Titre de la fenêtre
    2. Barre des menus
    3. Zone contenant les fenêtres theWinLayout et theWinGallery, nommée internalDisplayArea, une instance de la classe JPanel
    4. Barre d'état
    5. Ascenseur vertical
    6. Ascenseur horizontal
    7. Zone pour les barre des boutons pour la gestion du contour, du réseau, des signaux, du décor
    8. Zone d'affichage des paramètres d'un élément du réseau sélectionné

    Les composants 4, 7 et 8 sont des JPanel ajoutés à mainDisplayArea
    • Composant 4: stateDisplayArea
    • Composant 7: un seul est visible à un moment donné
    ◦ contourButtonsDisplayArea: zone des boutons pour la gestion du contour du réseau
    ◦ layoutButtonsDisplayArea: zone des boutons pour la gestion du réseau
    ◦ signalsButtonsDisplayArea: zone des boutons pour la gestion des signaux
    ◦ scenaryButtonsDisplayArea: zone des boutons pour la gestion du décor
    ◦ submoduleButtonsDisplayArea: zone des boutons pour la gestion des sous-modules
    • Composant 8: parametersDeviceDisplayArea

    Une instance JPanel nommée mainDisplayArea contient les zones 3, 4, 7 et 8

    On a la hiérarchie suivante :

    Nom : Winscroll-7.png
Affichages : 50
Taille : 29,2 Ko

    • theWinMain: JFrame, fenêtre principale
    • mainDisplayArea: JFrame, zone d'affichage de tous les composants qui s'affiche dans theWinMain
    • scrollPane: JScrollPane, pour rendre scrollable internalDisplayArea
    • stateDisplayArea, contourDisplayArea, ...: JPanel
    • internalDisplayArea: JPanel, contient les fenêtres internes theWinLayout et theWinGallery
    • theWinLayout, theWinGallery: WinInternal extends JinternalFrame

    Pour le moment je veux juste rendre inernalDisplayArea scrollable

    Le code

    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
    // Classe de la fenêtre principale
    public class CdmWin extends JFrame{
    	// Pour éviter un warning
    	private static final long serialVersionUID = -6677562836791922873L;
    	
    	// La fenêtre principale
    	public static CdmWin theWinMain = null;
    	// La fenêtre du réseau
    	public static CdmWin.WinInternal theWinLayout = null;
    	// La fenêtre de la gallerie des trains
    	public static CdmWin.WinInternal theWinGallery = null;
    
    	// Zone d'affichage des fenêtres internes
    	private JDesktopPane mainDesktop = new JDesktopPane();
    	
    	private static byte winNum = 0;
    	
    	// Constructeur
    	// ptitle : titre de la fenêtre
    	public CdmWin(String ptitle) {
    		
    		// Zone d'affichage de la fenêtre
    		Rectangle screenBounds = Global.SCREEN_PRIMARY_BOUNDS;
    		
    		theWinMain = this;
    
    		// On place la fenêtre sur le bon écran
    		this.setBounds(screenBounds.x, screenBounds.y, screenBounds.width, screenBounds.height);
    		
    		Global.cdmMainWin = this.getBounds();
    		
    		// Son titre
    		this.setTitle(ptitle);
    		
    		// Quitte l'application quand on clique sur le bouton de fermeture de la fenêtre
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		
    		// Pour que la fenêtre reste toujours au premier plan
    		this.setAlwaysOnTop(true);
    		
    		// Zone d'affichage des éléments ajoutés à la fenêtre
    		JPanel mainDisplayArea = (JPanel)this.getContentPane();
    		
    JPanel internalDisplayArea= new JPanel();
    		
    		// Couleur de fond de la zone Desktop
    		mainDesktop.setBackground(Global.mainBackgroundColor);
    		
    		// Indique que c'est la zone de la fenêtre
    		this.setContentPane(mainDisplayArea);
    		
    		// Zone pour les fenêtres internes
    //		mainDisplayArea.add(mainDesktop, BorderLayout.CENTER);
    
    internalDisplayArea.add(mainDesktop, BorderLayout.CENTER);
    
    JScrollPane scrollPane = new JScrollPane(internalDisplayArea, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    mainDisplayArea.add(scrollPane);
    		
    		// Création de la fenêtre du réseau
    		// Pas visible lors de la création de la fenêtre
    		mainDesktop.add(theWinLayout = new WinInternal(Global.whichLanguage == Menu.MENU_OPTIONS_LANGUE_FRENCH ? "Le réseau" : "The Layout"));
    		
    		// Création de la fenêtre de la galerie des trains
    		// Pas visible lors de la création de la fenêtre
    		mainDesktop.add(theWinGallery = new WinInternal(Global.whichLanguage == Menu.MENU_OPTIONS_LANGUE_FRENCH ? "La Galerie de trains" : "The Train Gallery"));	
    		
    		// Création du panneau contenant les boutons icnones pour la création et la gestion du contour du réseau
    //		BarButtons theLayoutContour = new BarButtons();
    		
    		// Affiche le menu 
    		Menu.CreateMenus(this);
    		// Maj de l'état de tous les menus
    		
    		// Affiche la fenêtre
    		this.setVisible(true);		
    	}
    	
    	// Classe des fenêtres du réseau et de la gallerie des trains
    	public class WinInternal extends JInternalFrame {
    		// Pour éviter un warning
    		private static final long serialVersionUID = 4993363235763093908L;
    
    		// Classe pour la zone d'affichage des composant de la fenêtre interne
    		public class DisplayArea extends JPanel {
    			// Pour éviter un warning
    			private static final long serialVersionUID = -5609983333478303182L;
    
    			// Cette fonction est appelée à chaque interraction de l'utilisateur sur la fenêtre
    			public void paintComponent(Graphics g) {
    				g.setColor(Color.white);
    				g.fillOval(20, 20, 75, 75);
    			}			
    		}
    		
    		// Constructeur
    		public WinInternal(String ptitle) {
    			
    			// Titre de la fenêtre
    			// Les quatres true indiquent dans l'ordre
    			// On peut la redimensionner
    			// On peut la ferner
    			// On peut la maximiser
    			// On peut la minimiser (icone)
    			super(ptitle, true, true, true, true);
    			
    			// Met à la taille par défaut
    			this.setSize(Global.cdmMainWin.width - 40, Global.cdmMainWin.height - 120);
    			
    			// Positionne les fenêtre en les décalant
    			winNum++; 
    			this.setLocation(winNum * 10, winNum * 10);
    			
    			// Zone d'affichage des composants ajoutés à la fenêtre
    			DisplayArea theDisplayArea = new DisplayArea();
    			
    			// Couleur de fond de la zone d(affichage
    			theDisplayArea.setBackground(Global.internalBackgroundColor);
    			
    			// Indique que c'est la zone d(affichage de la fenêtre
    			this.setContentPane(theDisplayArea);
    			
    		}
    	}
    Avec le code en orange et sans le code en rouge cela ne fonctionne pas
    J'obtiens cet affichage
    Nom : Winscroll-8.png
Affichages : 50
Taille : 56,0 Ko

    Le code en rouge sans le code en orange me permet d'avoir ceci comme affichage
    Nom : Winscroll-9.png
Affichages : 81
Taille : 82,6 Ko

    Merci pour l'aide
    Louis

  2. #2
    Invité de passage
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2026
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2026
    Messages : 52
    Par défaut
    J'essaye diverses solutions mais je n'arrive à rien

    Merci pour l'aide
    Louis

Discussions similaires

  1. Scrollable JPanel dans un autre JPanel
    Par Arcam dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 21/10/2007, 14h54
  2. marges de JPanel
    Par cmoulin dans le forum Agents de placement/Fenêtres
    Réponses: 10
    Dernier message: 10/05/2004, 15h21
  3. Pb scintillement-stabilité lors réaffichage de JPanel
    Par Pill_S dans le forum Composants
    Réponses: 5
    Dernier message: 28/04/2004, 14h03
  4. Listener sur un JPanel
    Par ptitelfe dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 27/03/2004, 13h14
  5. JPanel et Border
    Par titoine dans le forum Débuter
    Réponses: 3
    Dernier message: 22/04/2003, 15h58

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