Bonjour,
Je cherche à rajouter pendant le déroulement de mon application des éléments (JLabel) au sein d'un JPanel, et souhaite qu'une barre de défilement apparaisse quand le JPanel est "plein" de manière à voir l'ensemble des éléments.
Le code suivant, Code1, fonctionne :
Toutefois, je souhaite utiliser le "contentPane" ci-dessus, contenant ma boîte verticale scrollable, n'importe où au sein de mon GUI, et en particulier dans un autre JPanel. Dans le présent exemple, je veux donc transformer le "JFrame.getContentPane" de Code1 en "JFrame.setContentPane"
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 import java.awt.*; import javax.swing.*; public class Code1 { public static void main(String[] args) { // initialisation de la frame : JFrame maFrame = new JFrame(); maFrame.setSize(100,400); maFrame.setResizable(false); maFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Container associé à la frame Container contentPane = maFrame.getContentPane(); // Code1 // une boîte verticale englobée dans un JScrollPane, destinée à recevoir des éléments : JPanel verticalBoxPanel = new JPanel(); verticalBoxPanel.setLayout(new BoxLayout(verticalBoxPanel, BoxLayout.Y_AXIS)); JScrollPane scroll = new JScrollPane(verticalBoxPanel); // affichage de la frame : contentPane.add(scroll); maFrame.setVisible(true); // la frame étant affichée, on rajoute des labels : for (int i=0; i<50; i++) { verticalBoxPanel.add(new JLabel("Label "+i)); verticalBoxPanel.revalidate(); try {Thread.sleep(100);} catch (Exception e) {e.printStackTrace();} } } }
D'où le Code2 ci-dessous, mais il ne fonctionne pas (au sens où la barre de défilement n'apparait pas, et je n'ai donc pas accès aux derniers éléments). L'un d'entre vous pourrait-il me faire profiter de ses lumières pour m'aider à comprendre ?
Merci d'avance,
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 import java.awt.*; import javax.swing.*; public class Code2 { public static void main(String[] args) { // initialisation de la frame : JFrame maFrame = new JFrame(); maFrame.setSize(100,400); maFrame.setResizable(false); maFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Container associé à la frame JPanel contentPane = new JPanel(); // Code2 maFrame.setContentPane(contentPane); // Code2 // contentPane est bien opaque // une boîte verticale englobée dans un JScrollPane, destinée à recevoir des éléments : JPanel verticalBoxPanel = new JPanel(); verticalBoxPanel.setLayout(new BoxLayout(verticalBoxPanel, BoxLayout.Y_AXIS)); JScrollPane scroll = new JScrollPane(verticalBoxPanel); // affichage de la frame : contentPane.add(scroll); maFrame.setVisible(true); // la frame étant affichée, on rajoute des labels : for (int i=0; i<50; i++) { verticalBoxPanel.add(new JLabel("Label "+i)); verticalBoxPanel.revalidate(); contentPane.revalidate(); // Code2 try {Thread.sleep(100);} catch (Exception e) {e.printStackTrace();} } } }
Nicolas
Partager