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 : 54
Taille : 22,9 Ko
Nom : Winscroll-6.png
Affichages : 53
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 : 53
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 : 54
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 : 85
Taille : 82,6 Ko

Merci pour l'aide
Louis