Java Swing

Conteneurs de Swing
! ! ! !

Conteneurs généraux Les couches de JFrame Menus et Toolbars Conteneurs spécialisés

Jean Berstel - Institut Gaspard Monge, Université Marne-la-Vallée

1

Conteneurs généraux
JPanel
" " "

Java Swing

Conteneur très général, dérive immédiatement de JComponent Contient un FlowLayout par défaut Est opaque, ce qui importe pour les dessins.

Box
" " "

Ne descend pas de JComponent Sert comme conteneur avec remplissage, car utilise BoxLayout Ne peut avoir de bordure car ne descend pas de JComponent.

Jean Berstel - Institut Gaspard Monge, Université Marne-la-Vallée

2

Jean Berstel . Classe mère de JDesktopPane.Institut Gaspard Monge. On peut donner des valeurs de niveau aux composants indiquant qui est affiché au dessus. Université Marne-la-Vallée 3 .Les couches de JFrame JLayeredPane " " " " Java Swing Conteneur général pour des composants en couche. donc positionner ses enfants avec setBounds(). Utilise le null Layout.

Institut Gaspard Monge. boîtes à outils déplaçables MODAL_LAYER (200) pour les dialogues modaux POPUP_LAYER (300) pour les menus glissants. Six profondeurs prédéfinies # # # # # # FRAME_CONTENT_LAYER (-30000) le contentPane est de ce niveau DEFAULT_LAYER (0) niveau “par défaut” PALETTE_LAYER (100) pour les palettes.JLayeredPane " " Java Swing La profondeur d’une couche est représenté par un objet Integer. Université Marne-la-Vallée . les tooltips DRAG_LAYER (400) pour le glisser-déposer " L’affichage est évidemment en ordre croissant 4 Jean Berstel .

DesktopPaneUI qui gère le graphique du DesktopPane (mais pas des internal frames). JDesktopPane crée un DefaultDesktopManager. Deux autres classes utilisées # # DesktopManager qui gère les opérations des JInternalFrames dépendant du look-and-feel. Jean Berstel . Obtenu du look-and-feel courant.Institut Gaspard Monge.JDesktopPane " " " " Java Swing Conteneur pour gérer des JInternalFrames. Comme JLayeredPane. etc. minimisés. Ces composants peuvent être retaillés. Université Marne-la-Vallée 5 . utilise un Layout null.

JFrame et JInternalFrame Un JRootPane a deux parties : glassPane et layeredPane. Jean Berstel . et cette deuxième a deux parties : menuBar et contentPane. JDialog.JRootPane " " " " " Java Swing Composant avec un rôle très précis. Les menuBar et contentPane sont créés et gérés par JRootPane.Institut Gaspard Monge. Université Marne-la-Vallée 6 . Le glassPane sert à capter des évènements souris. Le seul fils possible pour JWindow.

Institut Gaspard Monge. et JMenu JPopupMenu " " Sert pour les menus dynamiques et les menus déroulants. JCheckBoxMenuItem. Utilise SingleSelectionModel. JRadioButtonMenuItem. qui contient l’entrée sélectionnée. 7 Jean Berstel . Utilise un BoxLayout horizontal.Menus et Toolbars JMenu " Java Swing Un menu a des entrées qui sont JMenuItem. qui se retaille et peut d’être déplacé. JToolBar " " Conteneur général. Université Marne-la-Vallée . et ses composants peuvent donc être espacés ou groupés. JSeparator.

Conteneurs spécialisés " " " Java Swing Le JTabbedPane est un conteneur à navigation par onglets Le JScrollPane permet d’afficher uen partie d’une zone Le JSplitPane introduit un volet mobile entre deux composants Jean Berstel . Université Marne-la-Vallée 8 .Institut Gaspard Monge.

JTabbedPane " " Java Swing Groupe une liste de conteneurs repérés par des onglets. Icon icone. Component composant) addTab(String texteOnglet. Component composant. Création: JTabbedPane() JTabbedPane(int cotéOnglets) " Ajout de conteneurs à un tabbedPane: addTab(String texteOnglet. Université Marne-la-Vallée 9 . String toolTipText) Jean Berstel . Icon icone. Component composant) addTab(String texteOnglet.Institut Gaspard Monge.

setSelectedIndex(int numero) " Récupérer le choix int tabbedPane.Institut Gaspard Monge.JTabbedPane " Java Swing Feuille initiale tabbedPane.getSelectedIndex() " Et la feuille elle-même Component tabbedPane.getComponentAt(int numero). Jean Berstel .getTabCount(). " Nombre total de feuilles int tabbedPane. Université Marne-la-Vallée 10 .

Institut Gaspard Monge.bat naviguer ajouter. à chaque changement De plus " Jean Berstel . enlever les feuilles choisir la position des onglets un message affiche le numéro de l’onglet. Université Marne-la-Vallée 11 .JTabbedPane : exemple (1) Pour " " " Java Swing Onglets.

Université Marne-la-Vallée 12 ."BOTTOM".length]. tabson..} les actions des boutons } Jean Berstel ."RIGHT". l’icône dans les onglets JTabbedPane tabbedPane.."berstel".Institut Gaspard Monge."remove"}.}. les images montrées ImageIcon tabimage.."desarmenien”."add".} gestion du message public void actionPerformed(ActionEvent e) {. .. les boutons de gestion JLabel statut. JButton[] boutons= new JButton[boutonNames."crochemore". le panneau à feuilles String[] boutonNames = {"TOP".length]. les sons des actions Panneau() {} création de la scène void createTab() {} ajoute une feuille et son onglet void killTab() {} supprime une feuille void setStatus(int index) {. ImageIcon[] images = new ImageIcon[imageNames... le message d’état AudioClip layoutson."LEFT".JTabbedPane : exemple (2) " Java Swing Acteurs principaux class Panneau extends JPanel implements ActionListener { String [] imageNames = { "arques".

CENTER).length]. tabbedPane.JTabbedPane : exemple (3) " Java Swing Création / suppression de feuilles public void createTab() { JLabel feuille = null.getTabCount() > 0) { tabbedPane. feuille. } Jean Berstel .setOpaque(true).setText(" Pas de feuille choisie"). else statut. setStatus(ong). } public void killTab() { // dernière if (tabbedPane. setStatus(tabbedPane.addTab(”Feuille No " + ong.length].getTabCount(). feuille. tabbedPane. feuille = new JLabel(imageNames[ong % images. int ong = tabbedPane. SwingConstants. } public void setStatus(int index) { if (index > -1) statut.setSelectedIndex(ong).getSelectedIndex()).setText(" Feuille choisie: " + index).Institut Gaspard Monge.setBackground(Color.green).removeTabAt(tabbedPane. feuille).getTabCount()-1). Université Marne-la-Vallée 13 . images[ong % images. tabimage.

play().equals(boutonNames[2])) { tabbedPane.getActionCommand().} else if(lib.setTabPlacement(SwingConstants.play().setTabPlacement(SwingConstants. } Jean Berstel . layoutson.Institut Gaspard Monge.equals(boutonNames[4])) createTab(). Université Marne-la-Vallée 14 .TOP).equals(boutonNames[0])) { tabbedPane.equals(boutonNames[5])) killTab().getSource()).setTabPlacement(SwingConstants.play().RIGHT). if (lib. else if(lib. } else if(lib. } else if(lib. } else if(lib.setTabPlacement(SwingConstants.BOTTOM). layoutson.LEFT).equals(boutonNames[1])) { tabbedPane.equals(boutonNames[3])) { tabbedPane.play(). layoutson. layoutson.JTabbedPane : exemple (4) " " Java Swing Les actions des boutons La classe SwingConstants contient les constantes de placement public void actionPerformed(ActionEvent e) { String lib = ((JButton) e.

i++) boutons[i] = new JButton(boutonNames[i]). i < boutons. for (int i = 0. BorderLayout. } Jean Berstel . createTab(). } JPanel leftPanel = new JPanel(). buttonPanel.add(boutons[i]).Institut Gaspard Monge. setLayout(new BorderLayout()).getSelectedIndex()). statut = new JLabel(). tabbedPane.add(buttonPanel). for (int i = 0 .SOUTH).CENTER). BorderLayout. createTab(). leftPanel. Université Marne-la-Vallée Java Swing 15 .1)).addChangeListener(new ChangeListener(){ public void stateChanged(ChangeEvent e) { setStatus(((JTabbedPane) e.jpg").getSource()). i++) images[i] = new ImageIcon("gifs/" + imageNames[i] +". JPanel buttonPanel = new JPanel().gif"). add(leftPanel. add(statut.JTabbedPane : exemple (5) Panneau() { tabimage = new ImageIcon("gifs/tabimage.length. createTab().play(). } }).length.TOP).WEST). createTab(). tabbedPane = new JTabbedPane(SwingConstants. add(tabbedPane. for (int i = 0. i < boutons.addActionListener(this). buttonPanel.setLayout(new GridLayout(0.length . i < images. tabson. i++){ boutons[i]. BorderLayout.

wav").tabson). Jean Berstel .wav"). layoutson = getAudioClip(getCodeBase(). setContentPane(loading).Institut Gaspard Monge. tabson = getAudioClip(getCodeBase().addAudioClips(layoutson. Panneau panneau = new Panneau().revalidate().sleep(1000). panneau. } catch (InterruptedException e) {}. try { Thread. setVisible(true).". JLabel..JTabbedPane : exemple (fin) public void init() { JLabel loading = new JLabel("Initialisation en cours. "switch. Université Marne-la-Vallée 16 . getRootPane(). } } Java Swing " " On modifie le contenu après le chargement La méthode revalidate sert à “forcer” le réaffichage.CENTER). setContentPane(panneau).. "tab.

par scrollPane.JScrollPane " " Java Swing Gère automatiquement des ascenseurs autour de son composant central qui est un JViewPort. Constructeurs principaux JScrollPane() JScrollPane(Component view) " Une “vue” s’ajoute au JViewPort.add(view) Jean Berstel .Institut Gaspard Monge. Université Marne-la-Vallée 17 . si elle ne l’est dans le constructeur.getViewPort().

BorderLayout. Université Marne-la-Vallée 18 .Institut Gaspard Monge.Exemple Java Swing TestTigre.gif"). Icon iconeTigre = new ImageIcon("BigTiger. add(scrollPane.CENTER). JScrollPane scrollPane = new JScrollPane(etiquetteTigre). } } Jean Berstel . JLabel etiquetteTigre = new JLabel(iconeTigre).bat class ScrollPanel extends JPanel { public ScrollPanel() { setLayout(new BorderLayout()).

JSplitPane(int orientation. Component gauche.JSplitPane " " " " Java Swing Split.HORIZONTAL_SPLIT JSpiltPane.Institut Gaspard Monge. JSplitPane(int orientation. chaque compartiment est ajustable Seule une classe de look-and-feel est nécessaire. Component gauche. Panneau à séparation verticale ou horizontale Constructeurs JSplitPane(int orientation. boolean dessinContinu) JSplitPane(int orientation) JSplitPane() //horizontal par défaut JSplitPane.bat Panneau à compartiments. boolean dessinContinu. Component droit). Component droit).VERTICAL_SPLIT Jean Berstel . Université Marne-la-Vallée 19 .

getImage()). aireDroite = new PanneauBoules(150. getContentPane().JSplitPane Java Swing ImageIcon bleue = new ImageIcon("bleue. aireDroite). BorderLayout. JSplitPane sp = new JSplitPane( JSplitPane. sp. " " " La taille de la barre de séparation peut être réglée par setDividerSize(int taille) L’affichage continue spécifié explicitement par setContinuousLayout(boolean dessinContinu) Poignée d’ouverture/fermeture spécifiées par setOneTouchExpandable(boolean ouvrable) Jean Berstel . sp. aireGauche.getImage()).Institut Gaspard Monge.gif").CENTER).setContinuousLayout(true). aireGauche = new PanneauBoules(150.HORIZONTAL_SPLIT. Université Marne-la-Vallée 20 .gif").setDividerSize(5). bleue. ImageIcon rouge = new ImageIcon("rouge.add(sp. rouge.

getImage()). BorderLayout. new Thread(aireDroite).setDividerSize(5).JSplitPane (2) public class Split extends JFrame { protected PanneauBoules aireGauche.setContinuousLayout(true).add(sp. public Split() { . ImageIcon bleue = new ImageIcon("bleue.CENTER).. sp. bleue.getImage()). .. aireGauche. sp.start(). new Thread(aireGauche)..start(). aireDroite = new PanneauBoules(150.Institut Gaspard Monge. } Java Swing Jean Berstel . ImageIcon rouge = new ImageIcon("rouge. aireDroite). Université Marne-la-Vallée 21 .. setVisible(true). getContentPane().gif"). aireDroite.HORIZONTAL_SPLIT. rouge.gif"). JSplitPane sp = new JSplitPane( JSplitPane. aireGauche = new PanneauBoules(150.

setPreferredSize(new Dimension(200. Image img. Dimension dim. addComponentListener(this).Institut Gaspard Monge.yellow).img = img. Image img) { sommeil = 10.} } Jean Berstel . setBackground(Color.JSplitPane (3) Java Swing class PanneauBoules extends JPanel implements Runnable. this. boules = new Boule[nBoules]. Université Marne-la-Vallée 22 . k < nBoules. k++) boules[k] = new Boule(dim).300)). ComponentListener { Boule[] boules. int sommeil. public PanneauBoules(int nBoules. } public void run() {. for (int k=0.. dim = getPreferredSize()..

if (sommeil != 0) { try { Thread.fillRect(0. dim. repaint(). k++) g. } catch(InterruptedException e) {} } } } " ComponentListener public void componentHidden(ComponentEvent e){} public void componentShown(ComponentEvent e){} public void componentMoved(ComponentEvent e){} public void componentResized(ComponentEvent e){ dim = getSize(). for (int k=0.drawImage(img.sleep(sommeil). this). dim. k++) boules[k].) { for (int k = 0. k < boules.JSplitPane (4) " Java Swing Runnable public void paintComponent(Graphics g) { g. k++) boules[k].x.moveIntoRect(dim).width.0.Institut Gaspard Monge. k < boules. g. k<boules. (int)boules[k].length. } public void run() { for(.length.length. Université Marne-la-Vallée 23 .height).setColor(getBackground()).move(dim).. (int)boules[k].y. for (int k = 0. } Jean Berstel .

height)) { vy = .min(y. dim. } public void moveIntoRect(Dimension dim) { x = Math. nx = x + vx. } x = nx. double ny = y + vy.sin(angle).JSplitPane (5) " Java Swing Les boules class Boule { protected double x. vy. ny = y + vy. y = Math. y.cos(angle).min(x. } public void move(Dimension dim) { double nx = x + vx.random(). public Boule(Dimension dim) { x = dim. vx = 2*Math. y = ny. y = dim. double angle = 2*Math. y = Math. } if ((ny < 0)||(ny > dim. vx.max(y. 0).vx.width * Math. vy = 2*Math.Institut Gaspard Monge.PI*Math.random().width). x = Math.height* Math. 0).width)) { vx = . Université Marne-la-Vallée 24 .height). dim.max(x. if ((nx < 0)|| (nx > dim.random().vy. } } Jean Berstel .

Université Marne-la-Vallée 25 .Institut Gaspard Monge.bat Panneaux mouvants emboîtés Accélérateurs de mouvements ont trois positions # # # fermé partagé ouvent Jean Berstel .JSplitPane : exemple simple " " Java Swing DesPanneaux.

10). BorderLayout. p.setOneTouchExpandable(true). new JTextArea()). "Un". "Quatre"). String un. new JButton("haut"). "Six"). BorderLayout.Institut Gaspard Monge.JSplitPane : exemple simple class Fragments extends JPanel { JSplitPane doubleur(int orientation. "Cinq". } Fragments() { setLayout(new BorderLayout(2. BorderLayout. add(p.HORIZONTAL_SPLIT. p. BorderLayout. "Trois".2)). add(p. add(p.NORTH). "Huit”).HORIZONTAL_SPLIT. p). JSplitPane p. String deux) { return new JSplitPane(orientation.SOUTH).VERTICAL_SPLIT.HORIZONTAL_SPLIT. true. "Sept". new JButton(un). new JButton(deux)). p = new JSplitPane(JSplitPane. p = doubleur(JSplitPane.setOneTouchExpandable(true). true.VERTICAL_SPLIT.WEST).CENTER). new JTextArea(10. p = doubleur(JSplitPane. p = new JSplitPane(JSplitPane. add(doubleur(JSplitPane. add(doubleur(JSplitPane. setBackground(Color.EAST). "Deux"). } } Java Swing Jean Berstel . BorderLayout. Université Marne-la-Vallée 26 .VERTICAL_SPLIT.blue).

Université Marne-la-Vallée 27 . L’entrée nouvellement sélectionnée déclenche un ItemEvent.JComboBox " " Java Swing Cache la liste des entrées possibles à l’exception de l’entrée sélectionnée. on peut taper dans la partie visible.Institut Gaspard Monge. Inversement. un changement dans les données provoque un ListDataEvent. Classes associées # # # " ComboBoxModel contient les entrées et génère les ListDataEvent ComboBoxEditor : l’éditeur utilisé dans une ComboBox éditable ListCellRenderer : pour dessiner les entrées Jean Berstel . Si elle est éditable.

Sign up to vote on this title
UsefulNot useful