Académique Documents
Professionnel Documents
Culture Documents
paumier@univ-mlv.fr
Les containers
rappel: tous les composants Swing sont des containers potentiels, mme s'il vaut mieux ne pas essayer pour la plupart d'entre eux rgle d'or: on ne peut pas ajouter un mme composant plusieurs fois:
paumier@univ-mlv.fr
faciles utiliser pas besoin d'en dfinir de nouveaux, moins d'un besoin trs particulier attention: on n'ajoute pas forcment les composants avec le add classique...
3
paumier@univ-mlv.fr
La Box
remarque: l'orientation passe au constructeur est un champ de BoxLayout et non de Box attention: container transparent, ne pas l'utiliser comme content pane
4
paumier@univ-mlv.fr
La Box
Box b=new Box(BoxLayout.Y_AXIS); b.add(new JRadioButton("Alpha")); b.add(new JRadioButton("Beta")); b.add(new JRadioButton("Gamma")); b.add(Box.createVerticalGlue()); /* This has no effect on a Box! */ b.setOpaque(true); b.setBorder(BorderFactory.createTitledBorder("Box"));
paumier@univ-mlv.fr
Le JSplitPane
container 2 zones spares par une barre de redimensionnement ne peut pas rduire un composant moins de sa taille minimum ne peut recevoir que 2 composants qui sont passs au constructeur:
Le JSplitPane
paumier@univ-mlv.fr
Le JTabbedPane
addTab(String title,Component c)
set/getTabPlacement set/getTabLayoutPolicy
8
paumier@univ-mlv.fr
Le JTabbedPane
paumier@univ-mlv.fr
Le JTabbedPane
setTabComponentAt(int index,Component c)
paumier@univ-mlv.fr
10
Le JScrollPane
permet d'afficher un composant sa taille prfre, sans le rduire s'il n'y a pas assez d'espace le composant est pass au constructeur:
JScrollPane(Component view, int vsbPolicy, int hsbPolicy) les 2 autres paramtres rgissent la prsence des barres de dfilement
paumier@univ-mlv.fr
11
Le JScrollPane
paumier@univ-mlv.fr
12
Le JScrollPane
soit le mettre au centre d'un panel avec un BorderLayout soit redfinir getScrollableTracksViewportWidth() pour toujours retourner false
13
paumier@univ-mlv.fr
Le JScrollPane
14
Le JScrollPane
paumier@univ-mlv.fr
15
Le JScrollPane
bouton dont la largeur a t cale manuellement sur la largeur prfre du JTextPane JPanel qui prend les hauteur et largeur des headers
16
Le JLayeredPane
affiche les composants par couches chaque couche est code par un Integer:
add(biniou,14) add(biniou,Integer.valueOf(14))
par dfaut, il n'y a pas de layout manager pour dterminer la taille des composants contenus dans le JLayeredPane :(
paumier@univ-mlv.fr
Le JLayeredPane
exemple 3 couches:
- pour voir travers la couche 17, il faut rendre le JSplitPane transparent - pour pouvoir cliquer travers le JLabel, il faut que le JSplitPane dise qu'il ne contient pas les clics sur le JLabel
paumier@univ-mlv.fr
18
La mthode contains
contains est utilise par Swing pour savoir (entre autres choses) qui est concern par un clic donc, facile de faire mentir le JSplitPane:
JSplitPane split=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,label,b) { /* These overridings are used to allow clicks on the background * through the JLabel */ @Override public boolean contains(int x, int y) { if (label.contains(x,y)) {return false;} return super.contains(x,y); } @Override public boolean contains(Point p) { if (label.contains(p)) {return false;} return super.contains(p); }
};
paumier@univ-mlv.fr
19
Le JDesktopPane
container spcial destin recevoir des fentre internes (JInternalFrame) ne JAMAIS lui donner de layout manager:
paumier@univ-mlv.fr
20
La JInternalFrame
ATTENTION: invisible et de taille 0,0 par dfaut! possde un root pane, donc on a accs une barre de menu, un content pane et un glass pane
21
paumier@univ-mlv.fr
La JInternalFrame
toutes les fentres sont par dfaut en haut gauche pas de gestion des fentres en cascade, en grille, etc :(
22
paumier@univ-mlv.fr
Les menus
setJMenuBar(JMenuBar bar)
des boutons spciaux: JMenuItem, JRadioButtonMenuItem, JCheckBoxMenuItem des sparateurs: addSeparator() des sous-menus de type JMenu
23
paumier@univ-mlv.fr
Les menus
3 modes de slection:
paumier@univ-mlv.fr
24
Les menus
exemple de sous-menu:
on utilise un ButtonGroup comme d'habitude
on ragit aux slections d'items avec des ActionListener, comme pour les boutons normaux
25
paumier@univ-mlv.fr
fonctionne comme un JMenu apparat quand on fait un clic droit sur le composant concern
paumier@univ-mlv.fr
26
Les actions
un nom un raccourci clavier (accelerator) un mnmonique une icne une description courte du code excuter un tat activ/dsactiv
paumier@univ-mlv.fr
Les actions
final Action buttonAction=new AbstractAction("Run", new ImageIcon( fr.umlv.ig.example_viewer.GUIExampleViewer.class.getResource("run.png"))) { @Override public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(f,"OK, I run."); } }; /* KeyEvent.VK_R matches both 'r' and 'R' */ buttonAction.putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_R,Event.CTRL_MASK)); /* We need to use the following because 'U' would be * autoboxed into a Character and not an Integer */ buttonAction.putValue(Action.MNEMONIC_KEY,Integer.valueOf('U')); buttonAction.putValue(Action.SHORT_DESCRIPTION,"Shows a message"); menu.add(new JMenuItem(buttonAction));
28
Les actions
l'acclrateur le nom avec le mnmonique
l'icne
la bulle d'aide
paumier@univ-mlv.fr
29
Les actions
paumier@univ-mlv.fr
30
Les actions
tous les boutons "Run" ont le mme comportement
31
La barre d'outils
une JToolBar peut tre place sur les bords (et pas au centre!) d'un container muni d'un BorderLayout ne rien mettre d'autre qu'un composant au centre et la JToolBar
paumier@univ-mlv.fr
32
La barre d'outils
utilise un BoxLayout peut se dtacher si elle est floatable quand on ferme une JToolBar flottante:
paumier@univ-mlv.fr
33