Qu'est-ce que tu entends par fractionnables ?
Avant de vous faire un laïus (un petit, je vous rassure), voici à quoi ressemblent des fenêtres à contenus fractionnables :
votre contenu avec une séparation
le même contenu pendant le déplacement de la séparation
et le résultat après déplacement

Ceci correspond à l'intérieur d'un objet
JFrame.
La barre au milieu est un objet déplaçable qui permet d'agrandir une zone tout en rétrécissant celle d'à côté...
Ici, dans la première image, le barre est vers la gauche. La deuxième image est prise pendant que je déplace la barre centrale, et enfin la troisième correspond au résultat lorsque j'ai relâché le bouton de ma souris !
Vous pouvez constater que le conteneur de gauche est devenu plus grand au détriment de celui de droite...
C'est comme une espèce de séparateur qui fonctionne à la façon des vases communiquants...
Vous avez tout compris !
Je vous rassure tout de suite, ce composant est très simple d'utilisation...

En fait, les composants abordés dans ce chapitre s'utilisent facilement.
Je ne vais pas vous faire mariner plus longtemps : l'objet utilisé ici est un
JSplitPane.
Voici le code source que j'ai utilisé pour avoir le résultat ci-dessus :
Code : Java 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 | import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
public class Fenetre extends JFrame {
//On déclare notre objet JSplitPane
private JSplitPane split;
//Vous êtes habitués à cette classe, maintenant... ;)
public Fenetre(){
this.setLocationRelativeTo(null);
this.setTitle("Gérer vos conteneur");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(200, 200);
//On crée deux conteneurs de couleurs différentes
JPanel pan = new JPanel();
pan.setBackground(Color.blue);
JPanel pan2 = new JPanel();
pan2.setBackground(Color.red);
//On construit enfin notre séparateur
split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, pan, pan2);
//On le passe ensuite au contentPane de notre objet Fenetre
//placé au centre pour qu'il utilise tout l'espace disponible
this.getContentPane().add(split, BorderLayout.CENTER);
this.setVisible(true);
}
public static void main(String[] args){
Fenetre fen = new Fenetre();
}
}
|
Nous voyons l'attribut JSplitPane.HORIZONTAL_SPLIT
dans le constructeur de l'objet : cela veut-il dire que nous pouvons avoir d'autres types de séparations ?
Je vois que vous comprenez très vite !
Vous pouvez avoir une séparation verticale en utilisant l'attribut
JSplitPane.VERTICAL_SPLIT
:
On le savait !

Mais, dis-nous, les deux autres paramètres sont nécessairement des
JPanel ?
Ici, j'ai utilisé des
JPanel, mais en fait, vous pouvez utiliser n'importe quelle classe dérivant de
JComponent (conteneur, bouton, case à cocher...) : elle n'est pas belle, la vie ?
Je ne vous avais donc pas menti : cet objet est vraiment très simple d'utilisation, mais je ne vais pas vous laisser tout de suite...
Vous ne l'avez peut-être pas remarqué mais ces objets ne peuvent pas faire disparaître entièrement les côtés.
Dans notre cas, la fenêtre est petite, mais vous aurez peut-être l'occasion d'avoir une grande IHM et souvent d'agrandir / de rétrécir vos contenus.
L'objet
JSplitPane a une méthode qui permet de rendre la barre de séparation intelligente, enfin presque...
La dite méthode ajoute deux petits boutons sur votre barre et, lorsque vous cliquerez dessus, rétrécira le côté vers lequel pointe la flèche dans le bouton.
Hein ?!?
Voici l'illustration de mes propos :
Pour avoir ces deux boutons en plus sur votre barre, il vous suffit d'invoquer la méthode
split.setOneTouchExpandable(true);
(mon objet s'appelle toujours
split) et le tour est joué !
Amusez-vous à cliquer sur ces boutons et vous verrez à quoi ils servent.
Avant de vous laisser fouiner un peu sur cet objet, vous devez savoir que vous pouvez définir une taille de séparateur grâce à la méthode
split.setDividerSize(int size)
; voici ce que j'ai obtenu avec une taille de 35 :
Vous pouvez également définir où doit s'afficher la barre de séparation. Ceci se fait grâce à la méthode
setDividerLocation(int location);
ou
setDividerLocation(double location);
.
Avant de vous montrer un exemple de code utilisant cette méthode, vous avez dû comprendre que, vu que cet objet peut prendre des sous-classes de
JComponent, il pouvait donc aussi prendre des
JSplitPane !
Voici ce que j'ai pu obtenir :
Secret (cliquez pour afficher)
Ceci, avec ce code :
Secret (cliquez pour afficher)
Code : Java 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 | import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
public class Fenetre extends JFrame {
//On déclare notre objet JTextPane
private JTextArea textPane = new JTextArea();
//L'objet qui va gérer le scroll
//En lui passant un objet JComponent dans le constructeur
private JScrollPane scroll = new JScrollPane(textPane);
//Vous êtes habitués à cette classe, maintenant... ;)
//On déclare notre objet JSplitPane
private JSplitPane split, split2, split3;
//Familiers avec celle-là également... ;)
public Fenetre(){
this.setLocationRelativeTo(null);
this.setTitle("Gérer vos conteneur");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(200, 200);
//On crée deux conteneurs de couleurs différentes
JPanel pan = new JPanel();
pan.setBackground(Color.blue);
JPanel pan2 = new JPanel();
pan2.setBackground(Color.red);
JPanel pan3 = new JPanel();
pan3.setBackground(Color.orange);
JPanel pan4 = new JPanel();
pan4.setBackground(Color.YELLOW);
//On construit enfin notre séparateur
split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, pan, pan4);
//On place le séparateur
split.setDividerLocation(80);
split2 = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, pan3, pan2);
//On place le séparateur
split2.setDividerLocation(100);
//On passe les deux précédents JSplitPane à celui-ci
split3 = new JSplitPane(JSplitPane.VERTICAL_SPLIT, split, split2);
//On place le séparateur
split3.setDividerLocation(80);
//On le passe ensuite au contentPane de notre objet Fenetre
//placé au centre pour qu'il utilise tout l'espace disponible
this.getContentPane().add(split3, BorderLayout.CENTER);
this.setVisible(true);
}
public static void main(String[] args){
Fenetre fen = new Fenetre();
}
}
|
Ce que je peux vous conseiller, c'est d'essayer d'adapter cet objet au dernier TP.
Je pense que vous en savez assez pour utiliser cet objet comme il convient. Nous allons à présent voir un autre objet bien pratique, lui aussi. Il permet d'avoir un scroll à côté de vos conteneurs afin de pouvoir dépasser les limites de ceux-ci !
