Top Banner
Java Swing Java Swing Eléments Eléments de Base de Base ESIL ESIL Laurent Henocque Laurent Henocque Cours mis Cours mis à jour en à jour en Février Février 2008 2008
67

Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

Sep 10, 2018

Download

Documents

lyliem
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

Java SwingJava SwingEléments Eléments de Basede Base

ESILESILLaurent HenocqueLaurent Henocque

Cours mis Cours mis à jour en à jour en FévrierFévrier20082008

Page 2: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

Licence Creative CommonsLicence Creative Commons

Cette création est mise Cette création est mise à disposition à disposition selonselonle le Contrat Paternité-Partage Contrat Paternité-Partage desdesConditions Conditions Initiales Initiales à à l'Identique l'Identique 2.02.0France France disponible disponible en en ligneligne

http:http://creativecommons//creativecommons.org/licenses/by-.org/licenses/by-sa/2.0/fr/sa/2.0/fr/

ou ou par par courrier courrier postal à Creativepostal à CreativeCommons, 559 Nathan Abbott Way,Commons, 559 Nathan Abbott Way,Stanford, California 94305, USA.Stanford, California 94305, USA.

Page 3: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

IntroductionIntroduction

Swing Swing est est la la bibliothèque bibliothèque JavaJavaperformante performante pour la pour la réalisation réalisation desdesinterfaces interfaces homme homme machine.machine.

Swing Swing est actuellement est actuellement en en compétitioncompétitionavec SWT (Eclipse) et avec SWT (Eclipse) et bientôt bientôt Flash etFlash etJavascript Javascript (adobe flex et air)(adobe flex et air)

http://java.sun.http://java.sun.com/docs/books/tutorial/ucom/docs/books/tutorial/uiswing/indexiswing/index.html.html

Page 4: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

Présentation très rapidePrésentation très rapidedes conceptsdes concepts

Page 5: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

Création d'une classe Création d'une classe "frame""frame"import import javaxjavax.swing..swing.JFrameJFrame;;

public class public class MainFrame MainFrame extendsextendsJFrameJFrame{{ public public MainFrameMainFrame()() { { super("My title");super("My title"); setSizesetSize(300, 300);(300, 300); }}}}

Page 6: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

Création d'une Création d'une applicationapplicationpublic class Application public class Application {{ public static void main(String[] args) public static void main(String[] args) { { // perform any initialization// perform any initialization MainFrame mf = new MainFrame();MainFrame mf = new MainFrame(); mf.show();mf.show(); }}} }

Page 7: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

Fermer l'applicationFermer l'application

setDefaultCloseOperationsetDefaultCloseOperation(( JFrameJFrame.EXIT_ON_CLOSE);.EXIT_ON_CLOSE);

Page 8: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

Container content = Container content = getContentPanegetContentPane();();content.add(new content.add(new JButtonJButton("Button 1")); ("Button 1"));

Ajout Ajout de de composantscomposants

Page 9: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

Grouper des Grouper des composantscomposants

JPanel panel=new JPanel();panel.add(new JButton("Button 1"));panel.add(new JButton("Button 2"));panel.add(new JButton("Button 3"));content.add(panel);

Page 10: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

Gérer Gérer le le Positionnement Positionnement VariableVariable

import java.awt.*;import javax.swing.*;

public class MainFrame extends JFrame{ public MainFrame() { super("My title"); setSize(300,300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container content = getContentPane(); content.setLayout(new BorderLayout()); JPanel panel = new JPanel(new FlowLayout()); panel.add(new JButton("Button 1")); panel.add(new JButton("Button 2")); panel.add(new JButton("Button 3")); content.add(panel, BorderLayout.SOUTH); content.add(new JTextArea(), BorderLayout.CENTER); }}

Page 11: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

AscenseursAscenseurs

content.add(new JScrollPane(new JTextArea()), BorderLayout.CENTER);

Page 12: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

Mixer les layoutsMixer les layoutspanel=new JPanel(new FlowLayout());panel.add(new JLabel("Enter your name"));panel.add(new JTextField(10));String options[] = new String[]{ "Option 1","Option 2","Option 2" };panel.add(new JComboBox(options));content.add(panel, BorderLayout.NORTH);

Page 13: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

EvénementsEvénementsimport java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.*;

public class MainFrame extends JFrame { public MainFrame(){ super("My title");... JButton button1 = new JButton("Button 1"); panel.add(button1); button1.addActionListener( new MyButtonListener(this));... }

private class MyButtonListener implements ActionListener { private JFrame parentComponent; MyButtonListener(JFrame parentComponent){ this.parentComponent=parentComponent; }

public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(parentComponent, "BUTTON PRESSED!");} }}

Page 14: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

Evénements Evénements (version 2)(version 2)

import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.*;

public class MainFrame extends JFrame { public MainFrame(){ super("My title");... JButton button1 = new JButton("Button 1"); panel.add(button1); button1.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(

e.getSource().parentComponent, "BUTTON PRESSED!");} });... }}

Page 15: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

Présentation Présentation de lade laBibliothèqueBibliothèque

Page 16: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

Squelette dSquelette d’’application application SwingSwingimport java.import java.awtawt.*;.*;import java.import java.awtawt.event.*;.event.*;import import javaxjavax.swing.*;.swing.*;public class public class JWinApp JWinApp extends extends JFrameJFrame{{

public public JWinAppJWinApp(String title, (String title, JPanel JPanel panel){panel){super(title);super(title);getContentPanegetContentPane().add(panel, ().add(panel, BorderLayoutBorderLayout.CENTER);.CENTER);setSizesetSize(200,200);(200,200);addWindowListeneraddWindowListener(new (new WindowAdapterWindowAdapter(){(){

public void public void windowClosingwindowClosing((WindowEvent WindowEvent we){we){exitAppexitApp(); }(); } });});}}protected void protected void exitAppexitApp(){(){

setVisiblesetVisible(false);(false);dispose();dispose();System.exit(0);System.exit(0);

}}public static void main(String public static void main(String argsargs[]) { new[]) { newJWinAppJWinApp((……).).setVisiblesetVisible(true); }(true); }

}}

Page 17: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

Hello WorldHello World

class class WinHelloPanel WinHelloPanel extends extends JPanel JPanel implementsimplementsActionListenerActionListener{{JLabel JLabel label = new label = new JLabelJLabel("Hello World "); // un label("Hello World "); // un labelJButton JButton button = new button = new JButtonJButton("Click!"); // un ("Click!"); // un boutonboutonpublic public WinHelloPanelWinHelloPanel(){(){

add(label);add(label);add(button);add(button);button.button.addActionListeneraddActionListener(this);(this);

}}public void public void actionPerformedactionPerformed((ActionEvent aeActionEvent ae){){

JOptionPaneJOptionPane..showMessageDialogshowMessageDialog(this, "Thanks for(this, "Thanks forClicking.");Clicking.");}}

}}

Page 18: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

Widgets Widgets commecomme AWTAWT

Page 19: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

WidgetsWidgetsSwingSwing

Page 20: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

JPanelJPanel

CC’’est est un Panel un Panel léger offrant léger offrant ununsupport pour le double bufferingsupport pour le double buffering(technique (technique dd’’affichage affichage en en deuxdeuxtemps temps permettant dpermettant d’é’éviter viter leslesscintillements scintillements et et défaut ddéfaut d’’aspectsaspects))

Quand Quand le buffering le buffering est activéest activé((constructeurconstructeur) ) tous tous les les composantscomposantsse se dessinent ddessinent d’’abord dans abord dans un bufferun buffernon non affichéaffiché

Page 21: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

IconesIcones

Les Les icones sont utilisées icones sont utilisées avec avec tous tous les les boutons ouboutons ouautres composantsautres composants..

public interface Icon {public interface Icon { void void paintIconpaintIcon(Component c, Graphics g, (Component c, Graphics g, int int x, x, int int y);y); int getIconWidthint getIconWidth();(); int getIconHeightint getIconHeight();();}}

ll’’argument argument ““cc”” sert sert à à fournir une fournir une informationinformationcomplémentaire complémentaire au moment au moment du dessin du dessin (police, (police, couleurcouleur))

x et y x et y spécifient lspécifient l’’origine du dessinorigine du dessin

Page 22: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

ImageIconImageIcon

Icon i = new Icon i = new ImageIconImageIcon((““Image.gif");Image.gif");

Icon j = new Icon j = new ImageIconImageIcon((

new URL(new URL(““http://http://……Image.gifImage.gif””));));

Avantages Avantages ::•• url ou fichierurl ou fichier,,

•• chargement asynchrone chargement asynchrone : pas de : pas de blocage blocage dedell’’interfaceinterface

•• ll’’image nimage n’’est est pas pas sérializablesérializable

Page 23: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

Créer sa propre iconeCréer sa propre icone

public class public class RedOval RedOval implements Icon {implements Icon { public void public void paintIcon paintIcon ((

Component c, Graphics g, Component c, Graphics g, int int x, x, int int y) {y) { g. g.setColorsetColor((ColorColor.red);.red); g. g.drawOval drawOval (x, y, (x, y, getIconWidthgetIconWidth(),(),

getIconHeightgetIconHeight());()); } } public public int getIconWidthint getIconWidth() { return 10; }() { return 10; } public public int getIconHeightint getIconHeight() { return 10; }() { return 10; }}}

Page 24: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

JLabelJLabelpublic class public class LabelPanel LabelPanel extends extends JPanel JPanel {{ public public LabelPanelLabelPanel() {() { JLabel plainLabel JLabel plainLabel = new = new JLabelJLabel("Petit Label");("Petit Label"); add( add(plainLabelplainLabel););

JLabel fancyLabel JLabel fancyLabel = new = new JLabelJLabel(« Super Beau Label");(« Super Beau Label"); Font Font fancyFont fancyFont = new Font("Serif", Font.BOLD |= new Font("Serif", Font.BOLD |

Font.ITALIC, 32);Font.ITALIC, 32); fancyLabelfancyLabel..setFontsetFont((fancyFontfancyFont););

Icon Icon tigerIcon tigerIcon = new = new ImageIconImageIcon(("SmallTiger"SmallTiger.gif");.gif"); fancyLabelfancyLabel..setIconsetIcon((tigerIcontigerIcon);); fancyLabelfancyLabel..setHorizontalAlignmentsetHorizontalAlignment((JLabelJLabel.RIGHT);.RIGHT); add( add(fancyLabelfancyLabel);); } }}}

Page 25: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

JButtonJButton

public class public class ButtonPanel ButtonPanel extends extends JPanel JPanel {{ public public ButtonPanelButtonPanel() {() { Icon Icon tigerIcon tigerIcon = new = new ImageIconImageIcon(("SmallTiger"SmallTiger.gif");.gif"); JButton myButton JButton myButton = new = new JButtonJButton("Tiger", ("Tiger", tigerIcontigerIcon);); add( add(myButtonmyButton);); } }}}

Page 26: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

AbstractButtonAbstractButton Plusieurs Plusieurs classes Swing classes Swing implémentent abstractButtonimplémentent abstractButton

setMnemonicsetMnemonic() () –– accélérateur accélérateur clavier : les clavier : les constantes constantes VK_* de VK_* de KeyEventKeyEvent

doClickdoClick() () –– appel du bouton appel du bouton par programmepar programme

setDisabledIconsetDisabledIcon(), (), setDisabledSelectedIconsetDisabledSelectedIcon(), (), setPressedIconsetPressedIcon(),(),setRolloverIconsetRolloverIcon(), (), setRolloverSelectedIconsetRolloverSelectedIcon(), (), setSelectedIconsetSelectedIcon() () ––modifications modifications dynamique dynamique de de ll’’iconeicone

setVerticalAlignmentsetVerticalAlignment(), (), setHorizontalAlignemntsetHorizontalAlignemnt()()

setVerticalTextPositionsetVerticalTextPosition(), (), setHorizontalTextPositionsetHorizontalTextPosition() () –– place le place le texte texte parparrapport à rapport à ll’’iconeicone

On On peut spécifier peut spécifier le le texte du texte du label en html (<html> label en html (<html> …… <html>) à <html>) à partir partir dedeswing 1.1.1)swing 1.1.1)

Page 27: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

JCheckBoxJCheckBoxclassclass CheckboxPanel CheckboxPanel extendsextends JPanel JPanel {{

Icon no = Icon no = newnew ToggleIcon ToggleIcon ((falsefalse);); Icon yes = Icon yes = newnew ToggleIcon ToggleIcon ((truetrue););

publicpublic CheckboxPanelCheckboxPanel() {() {

setLayoutsetLayout((newnew GridLayoutGridLayout(2, 1));(2, 1));

JCheckBox JCheckBox cb1 = cb1 = newnewJCheckBoxJCheckBox("Choose Me", ("Choose Me", truetrue););

cb1. cb1.setIconsetIcon(no);(no); cb1. cb1.setSelectedIconsetSelectedIcon(yes);(yes);

JCheckBox JCheckBox cb2 = cb2 = newnewJCheckBoxJCheckBox("No Choose Me", ("No Choose Me", falsefalse););

cb2. cb2.setIconsetIcon(no);(no); cb2. cb2.setSelectedIconsetSelectedIcon(yes);(yes);

add(cb1); add(cb2); add(cb1); add(cb2); } }

classclass ToggleIcon ToggleIcon implementsimplements Icon { Icon { booleanboolean state;state; publicpublic ToggleIcon ToggleIcon ((booleanboolean s) {s) { state = s; state = s; } }

publicpublic voidvoid paintIcon paintIcon (Component c,(Component c,Graphics g, Graphics g, intint x, x, intint y) {y) {

intint width = width = getIconWidthgetIconWidth();(); intint height = height = getIconHeightgetIconHeight();(); g. g.setColor setColor ((ColorColor.black);.black); ifif (state) g. (state) g.fillRect fillRect (x, y, width,(x, y, width,

height);height); elseelse g. g.drawRect drawRect (x, y, width,(x, y, width,

height);height); } }

publicpublic intint getIconWidth getIconWidth() { () { returnreturn10; }10; }

publicpublic intint getIconHeight getIconHeight() { () { returnreturn10; }10; }

} }}}

Page 28: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

JRadioButtonJRadioButtonclass class RadioButtonPanel RadioButtonPanel extends extends JPanel JPanel {{public public RadioButtonPanelRadioButtonPanel() {() { setLayoutsetLayout(new (new GridLayoutGridLayout(4,1));(4,1)); JRadioButton radioButtonJRadioButton radioButton;; ButtonGroup rbg ButtonGroup rbg = new = new ButtonGroupButtonGroup();(); JLabel JLabel label = new label = new JLabelJLabel("Annual Salary: ");("Annual Salary: "); label. label.setFontsetFont(new Font((new Font("SansSerif""SansSerif", Font.BOLD,, Font.BOLD,

14));14)); add(label); add(label);

radioButton radioButton = new = new JRadioButtonJRadioButton("$45,000");("$45,000"); radioButtonradioButton..setMnemonic setMnemonic ((KeyEventKeyEvent.VK_4);.VK_4); add ( add (radioButtonradioButton); ); rbgrbg.add (.add (radioButtonradioButton);); radioButtonradioButton..setSelectedsetSelected(true);(true);

radioButton radioButton = new = new JRadioButtonJRadioButton("$60,000");("$60,000"); radioButtonradioButton..setMnemonic setMnemonic ((KeyEventKeyEvent.VK_6);.VK_6); add ( add (radioButtonradioButton); ); rbgrbg.add (.add (radioButtonradioButton);); ... ...}}

Page 29: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

JToggleButtonJToggleButtonclass class ToggleButtonPanel ToggleButtonPanel extends extends JPanel JPanel {{

public public ToggleButtonPanelToggleButtonPanel() {() {

// Set the layout to a // Set the layout to a GridLayoutGridLayout

setLayout setLayout(new (new GridLayoutGridLayout(4,1, 10, 10));(4,1, 10, 10));

add (new add (new JToggleButton JToggleButton ("Fe"));("Fe")); add (new add (new JToggleButton JToggleButton (("Fi""Fi"));)); add (new add (new JToggleButton JToggleButton (("Fo""Fo"));)); add (new add (new JToggleButton JToggleButton (("Fum""Fum"));)); } }}}

Page 30: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

Méthodes Méthodes de de JTextComponentJTextComponent

copy()copy() cut()cut() paste()paste() getSelectedTextgetSelectedText()() setSelectionStartsetSelectionStart()() setSelectionEndsetSelectionEnd()() selectAllselectAll()() replaceSelectionreplaceSelection()() getTextgetText()() setTextsetText()() setEditablesetEditable()() setCaretPositionsetCaretPosition()()

Page 31: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

JTextFieldJTextField & & JTextAreaJTextArea

JTextField tf JTextField tf = new = new JTextFieldJTextField();();

JTextArea ta JTextArea ta = new = new JTextAreaJTextArea();();

tftf..setTextsetText(("TextField""TextField"););

tata..setTextsetText(("JTextArea\n "JTextArea\n Multi Multi Lignes"Lignes"););

add(add(tftf););

add(new add(new JScrollPaneJScrollPane((tata)); // scroll au )); // scroll au cas oùcas où

Page 32: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

JTextPaneJTextPane

JTextPane est JTextPane est un un éditeur éditeur de de texte complet texte complet (avec(avecinsertions insertions dd’’imagesimages). Il ). Il ss’’appuie sur une liste appuie sur une liste dedeblocs blocs dotés dotés de stylesde styles

JTextPane tp JTextPane tp = new = new JTextPaneJTextPane();();

MutableAttributeSet attr MutableAttributeSet attr = new= newSimpleAttributeSetSimpleAttributeSet();();

StyleConstantsStyleConstants..setFontFamilysetFontFamily((attrattr, "Serif");, "Serif"); StyleConstantsStyleConstants..setFontSizesetFontSize((attrattr, 18);, 18); StyleConstantsStyleConstants..setBoldsetBold((attrattr, true);, true); tptp..setCharacterAttributessetCharacterAttributes((attrattr, false);, false); add(new add(new JScrollPaneJScrollPane((tptp));));

Page 33: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

JTextPane exempleJTextPane exempleclass class TextPanel TextPanel extends extends JPanel JPanel {{

public public TextPanelTextPanel() {() { setLayoutsetLayout(new (new BorderLayoutBorderLayout());());

JTextField textField JTextField textField = new = new JTextFieldJTextField();(); JTextArea textArea JTextArea textArea = new = new JTextAreaJTextArea();(); JTextPane textPane JTextPane textPane = new = new JTextPaneJTextPane();();

MutableAttributeSet attr MutableAttributeSet attr = new = new SimpleAttributeSetSimpleAttributeSet();(); StyleConstantsStyleConstants..setFontFamilysetFontFamily((attrattr, "Serif");, "Serif"); StyleConstantsStyleConstants..setFontSizesetFontSize((attrattr, 18);, 18); StyleConstantsStyleConstants..setBoldsetBold((attrattr, true);, true); textPanetextPane..setCharacterAttributessetCharacterAttributes((attrattr, false);, false);

add( add(textFieldtextField, , BorderLayoutBorderLayout.NORTH);.NORTH); add(new add(new JScrollPaneJScrollPane((textAreatextArea), ), BorderLayoutBorderLayout.CENTER);.CENTER); add(new add(new JScrollPaneJScrollPane((textPanetextPane), ), BorderLayoutBorderLayout.SOUTH);}}.SOUTH);}}

Page 34: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

JPasswordFieldJPasswordFieldclass class PasswordPanel PasswordPanel extends extends JPanel JPanel {{ PasswordPanelPasswordPanel() {() { JPasswordField JPasswordField p1 = newp1 = new

JPasswordFieldJPasswordField(20);(20); JPasswordField JPasswordField p2 = newp2 = new

JPasswordFieldJPasswordField(20);(20); p2. p2.setEchoChar setEchoChar ('?');('?'); add(p1); add(p1); add(p2); add(p2);}}}}

Page 35: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

JEditorPaneJEditorPane

JEditorPane est JEditorPane est un un éditeur éditeur de de textestextes permettant lpermettant l’’affichage affichage de de contenucontenu

html, html, ou ou rtf, rtf, identifié identifié par par une une URL,URL, et et permettant permettant de de suivre suivre les liensles liens

Page 36: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

SourceSourceclass Browser extends class Browser extends JPanel JPanel {{ Browser() { Browser() { setLayout setLayout (new (new BorderLayout BorderLayout (5, 5));(5, 5)); final final JEditorPane jt JEditorPane jt = new = new JEditorPaneJEditorPane();(); final final JTextField JTextField input = new input = new JTextFieldJTextField("http://java.sun.com");("http://java.sun.com"); jtjt..setEditablesetEditable(false);(false);

// // suivre suivre les liens :les liens : jtjt..addHyperlinkListeneraddHyperlinkListener(new (new HyperlinkListener HyperlinkListener () {() { public void public void hyperlinkUpdatehyperlinkUpdate(final (final HyperlinkEvent HyperlinkEvent e) {e) { if (e. if (e.getEventTypegetEventType() == () == HyperlinkEventHyperlinkEvent..EventTypeEventType.ACTIVATED) {.ACTIVATED) { SwingUtilitiesSwingUtilities..invokeLaterinvokeLater(new (new RunnableRunnable() {() { public void run() { Document doc = public void run() { Document doc = jtjt..getDocumentgetDocument();(); try { URL try { URL url url = e.= e.getURLgetURL(); (); jtjt..setPagesetPage((urlurl););

input. input.setText setText ((urlurl..toStringtoString());()); } catch ( } catch (IOException ioIOException io) {) { JOptionPaneJOptionPane..showMessageDialog showMessageDialog (( Browser.this, "Can't follow link", "Invalid Input", Browser.this, "Can't follow link", "Invalid Input", JOptionPaneJOptionPane.ERROR_MESSAGE);.ERROR_MESSAGE); jtjt..setDocument setDocument (doc);}}});(doc);}}});}}});}}});

Page 37: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

suitesuiteJScrollPane JScrollPane pane = new pane = new JScrollPaneJScrollPane();(); pane. pane.setBorder setBorder (( BorderFactoryBorderFactory..createLoweredBevelBordercreateLoweredBevelBorder());()); pane. pane.getViewportgetViewport().add(().add(jtjt);); add(pane, add(pane, BorderLayoutBorderLayout.CENTER);.CENTER); input. input.addActionListener addActionListener (new (new ActionListenerActionListener() {() { public void public void actionPerformed actionPerformed ((ActionEvent ActionEvent e) {e) { try { try { jtjt..setPage setPage (input.(input.getTextgetText()); }()); }

catch ( catch (IOException IOException ex) {ex) { JOptionPaneJOptionPane..showMessageDialog showMessageDialog (( Browser.this, "Invalid URL", "Invalid Browser.this, "Invalid URL", "Invalid

Input",Input", JOptionPaneJOptionPane.ERROR_MESSAGE); }.ERROR_MESSAGE); } } }); } }); add (input, add (input, BorderLayoutBorderLayout.SOUTH);}}.SOUTH);}}

Page 38: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

JScrollBarJScrollBar

classclass ScrollbarPanel ScrollbarPanel extendsextends JPanel { JPanel { publicpublic ScrollbarPanel() { ScrollbarPanel() { setLayout( setLayout(newnew BorderLayout()); BorderLayout());

JScrollBar sb1 = JScrollBar sb1 = newnew JScrollBar (JScrollBar.VERTICAL, 0, 5, 0, 100); JScrollBar (JScrollBar.VERTICAL, 0, 5, 0, 100); add(sb1, BorderLayout.EAST); add(sb1, BorderLayout.EAST);

JScrollBar sb2 = JScrollBar sb2 = newnew JScrollBar (JScrollBar.HORIZONTAL, 0, 5, 0, 100); JScrollBar (JScrollBar.HORIZONTAL, 0, 5, 0, 100); add(sb2, BorderLayout.SOUTH); add(sb2, BorderLayout.SOUTH); } }}}

Page 39: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

JSliderJSliderpublic class SliderPanel extends JPanel {public class SliderPanel extends JPanel { public SliderPanel() { public SliderPanel() { setLayout(new BorderLayout()); setLayout(new BorderLayout());

JSlider s1 = new JSlider (JSlider.VERTICAL, 0, 100, 50); JSlider s1 = new JSlider (JSlider.VERTICAL, 0, 100, 50); s1.setPaintTicks(true); s1.setPaintTicks(true); s1.setMajorTickSpacing(10); s1.setMinorTickSpacing(2); s1.setMajorTickSpacing(10); s1.setMinorTickSpacing(2); add(s1, BorderLayout.EAST); add(s1, BorderLayout.EAST);

JSlider s2 = new JSlider (JSlider.VERTICAL, 0, 100, 50); JSlider s2 = new JSlider (JSlider.VERTICAL, 0, 100, 50); s2.setPaintTicks(true); s2.setMinorTickSpacing(5); s2.setPaintTicks(true); s2.setMinorTickSpacing(5); add(s2, BorderLayout.WEST); add(s2, BorderLayout.WEST);

JSlider s3 = new JSlider (JSlider.HORIZONTAL, 0, 100, 50); JSlider s3 = new JSlider (JSlider.HORIZONTAL, 0, 100, 50); s3.setPaintTicks(true); s3.setMajorTickSpacing(10); s3.setPaintTicks(true); s3.setMajorTickSpacing(10); add(s3, BorderLayout.SOUTH); add(s3, BorderLayout.SOUTH);

JSlider s4 = JSlider s4 = new JSlider (JSlider.HORIZONTAL, 0, 100, 50); new JSlider (JSlider.HORIZONTAL, 0, 100, 50); s4.setBorder(BorderFactory.createLineBorder(Color.blue)); s4.setBorder(BorderFactory.createLineBorder(Color.blue)); add(s4, BorderLayout.NORTH); add(s4, BorderLayout.NORTH); }} }}

Page 40: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

JSlider JSlider et Labelset Labelspublic class SliderPanel2 extends JPanel {public class SliderPanel2 extends JPanel { public SliderPanel2() { public SliderPanel2() { setLayout(new BorderLayout()); setLayout(new BorderLayout());

JSlider right, bottom; JSlider right, bottom; right = new JSlider(JSlider.VERTICAL, 1, 9, 3); right = new JSlider(JSlider.VERTICAL, 1, 9, 3); Hashtable h = new Hashtable(); Hashtable h = new Hashtable(); h.put (new Integer (1), new JLabel("Mercure")); h.put (new Integer (1), new JLabel("Mercure")); ……

right.setLabelTable (h); right.setLabelTable (h); right.setPaintLabels (true); right.setPaintLabels (true); right.setInverted (true); right.setInverted (true);

bottom = new JSlider(JSlider.HORIZONTAL, 0, 100, 25); bottom = new JSlider(JSlider.HORIZONTAL, 0, 100, 25); bottom.setMajorTickSpacing (10); bottom.setMajorTickSpacing (10); bottom.setPaintLabels (true); bottom.setPaintLabels (true); add(right, BorderLayout.EAST); add(right, BorderLayout.EAST); add(bottom, BorderLayout.SOUTH); add(bottom, BorderLayout.SOUTH); } }}}

Page 41: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

JProgressBarJProgressBar Créer une Progress BarCréer une Progress Bar

•• progressBar = new JProgressBar(0,progressBar = new JProgressBar(0,task.getLengthOfTask());task.getLengthOfTask());

•• progressBar.setValue(0);progressBar.setValue(0);•• progressBar.setStringPainted(true);progressBar.setStringPainted(true);

Changer la valeur courante :Changer la valeur courante :•• progressBar.setValue(task.getCurrent());progressBar.setValue(task.getCurrent());

Utilisation du mode « indeterminate »Utilisation du mode « indeterminate »•• progressBar = new JProgressBar();progressBar = new JProgressBar();•• progressBar.setIndeterminate(true);progressBar.setIndeterminate(true);•• ... // la taille devient connue... // la taille devient connue•• progressBar.setMaximum(newLength);progressBar.setMaximum(newLength);•• progressBar.setValue(newValue);progressBar.setValue(newValue);•• progressBar.setIndeterminate(false);progressBar.setIndeterminate(false);

Page 42: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

JComboBoxJComboBoxpublic class ComboPanel extends JPanel {public class ComboPanel extends JPanel { String choices[] = {"Mercure", "Venus", "Terre", "Mars", String choices[] = {"Mercure", "Venus", "Terre", "Mars","Jupiter", "Saturne", "Uranus", "Neptune", "Pluton"};"Jupiter", "Saturne", "Uranus", "Neptune", "Pluton"}; public ComboPanel() { public ComboPanel() { JComboBox combo1 = new JComboBox(); JComboBox combo1 = new JComboBox(); JComboBox combo2 = new JComboBox(); JComboBox combo2 = new JComboBox(); for (int i=0;i<choices.length;i++) { for (int i=0;i<choices.length;i++) { combo1.addItem (choices[i]); combo2.addItem (choices[i]); combo1.addItem (choices[i]); combo2.addItem (choices[i]); } } combo2.setEditable(true); combo2.setEditable(true); combo2.setSelectedItem("X"); combo2.setSelectedItem("X"); combo2.setMaximumRowCount(4); combo2.setMaximumRowCount(4); add(combo1); add(combo2); add(combo1); add(combo2); } } public static void main (String args[]) { public static void main (String args[]) {…… } } } }

Page 43: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

Callbacks ComboBoxCallbacks ComboBoxpublic class ComboBoxDemo implements ActionListener {public class ComboBoxDemo implements ActionListener {

. . .. . .combo.addActionListener(this);combo.addActionListener(this);. . .. . .public void actionPerformed(ActionEvent e) {public void actionPerformed(ActionEvent e) {

JComboBox cb = (JComboBox)e.getSource();JComboBox cb = (JComboBox)e.getSource();String item = (String)cb.getSelectedItem(); String item = (String)cb.getSelectedItem(); . . . . . .

}}. . .. . .}}

Page 44: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

JListJList

String label [] = {"a", "b", "c", "d", "e",String label [] = {"a", "b", "c", "d", "e","f", "g", "h", "i", "j", "k" };"f", "g", "h", "i", "j", "k" };

JList list = new JList(label);JList list = new JList(label);JScrollPane pane = new JScrollPane(list);JScrollPane pane = new JScrollPane(list);

Page 45: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

JList JList : : SélectionSélectionstatic Vector v;static Vector v;l = new JList(v);l = new JList(v);l.setSelectionMode(l.setSelectionMode(

ListSelectionModel.SINGLE_SELECTION);ListSelectionModel.SINGLE_SELECTION);// SINGLE_INTERVAL_SELECTION// SINGLE_INTERVAL_SELECTION// MULTIPLE_INTERVAL_SELECTION// MULTIPLE_INTERVAL_SELECTION

Page 46: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

Modification Modification dynamique dynamique de de JListJList

//Schéma Modèle/Vue//Schéma Modèle/Vue(s)(s)/Controleur/ControleurlistModel listModel = new = new DefaultListModelDefaultListModel();();listModellistModel..addElementaddElement("A");("A");listModellistModel..addElementaddElement("B");("B");listModellistModel..addElementaddElement("C");("C");

JList JList list = new list = new JListJList((listModellistModel););...... listModellistModel.remove(index);.remove(index);

Page 47: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

listSelectionListenerlistSelectionListenerpublic void valueChanged(ListSelectionEvent e) {public void valueChanged(ListSelectionEvent e) { if (e.getValueIsAdjusting()) return; if (e.getValueIsAdjusting()) return;

JList theList = (JList)e.getSource(); JList theList = (JList)e.getSource(); if (theList.isSelectionEmpty()) { if (theList.isSelectionEmpty()) { ... ... } else { } else { int index = theList.getSelectedIndex(); int index = theList.getSelectedIndex(); ... ... } }}}

Page 48: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

BordersBordersJButton JButton b = new b = new JButtonJButton("Empty"); b.("Empty"); b.setBorder setBorder (new (new EmptyBorder EmptyBorder (1,1,1,1));(1,1,1,1));

b = new b = new JButton JButton ("Etched"); b.("Etched"); b.setBorder setBorder (new (new EtchedBorder EtchedBorder ());());

b = new b = new JButton JButton (("ColorizedEtched""ColorizedEtched"); b.); b.setBorder setBorder (new (new EtchedBorder EtchedBorder ((ColorColor.red,.red,ColorColor.green));.green));

b = new b = new JButton JButton ("Titled/Line");("Titled/Line");b.b.setBordersetBorder(new (new TitledBorder TitledBorder (( new new TitledBorderTitledBorder((LineBorderLineBorder..createGrayLineBordercreateGrayLineBorder(),"Hello"), "World",(),"Hello"), "World", TitledBorderTitledBorder.RIGHT, .RIGHT, TitledBorderTitledBorder.BOTTOM));.BOTTOM));

b = new b = new JButton JButton ("Bevel Up"); b.("Bevel Up"); b.setBordersetBorder(new(newBevelBorderBevelBorder((BevelBorderBevelBorder.RAISED));.RAISED));

b = new b = new JButton JButton ("Bevel Down"); b.("Bevel Down"); b.setBordersetBorder(new(newBevelBorderBevelBorder((BevelBorderBevelBorder.LOWERED));.LOWERED));

Page 49: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

BordersBorders (2) (2)

SoftBevelBorderSoftBevelBorder((SoftBevelBorderSoftBevelBorder.RAISED);.RAISED);

SoftBevelBorderSoftBevelBorder((SoftBevelBorderSoftBevelBorder.LOWERED);.LOWERED);

MatteBorderMatteBorder(5, 10, 5, 10, (5, 10, 5, 10, ColorColor.red);.red);

Icon icon = new Icon icon = new ImageIcon ImageIcon ("file.gif");("file.gif"); new new MatteBorderMatteBorder(10, 10, 10, 10, icon));(10, 10, 10, 10, icon));

BevelBorderBevelBorder((BevelBorderBevelBorder.RAISED, .RAISED, ColorColor.red, .red, ColorColor.pink));.pink));

CompoundBorderCompoundBorder(( new new MyBorderMyBorder((ColorColor.red),.red), new new CompoundBorder CompoundBorder (new (new MyBorderMyBorder((ColorColor.green),.green), new new MyBorderMyBorder((ColorColor.blue)));.blue)));

Page 50: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

MenusMenusJMenuBar jmb JMenuBar jmb = new = new JMenuBarJMenuBar();();JMenu JMenu file = new file = new JMenu JMenu ("File");("File");file.file.addMenuListener addMenuListener (new (new MenuListenerMenuListener() {() { public void public void menuSelected menuSelected ((MenuEvent MenuEvent e) { ... }e) { ... } public void public void menuDeselected menuDeselected ((MenuEvent MenuEvent e) { ... }e) { ... } public void public void menuCanceled menuCanceled ((MenuEvent MenuEvent e) { ... }e) { ... }});});

JMenuItem JMenuItem item;item;file.add (item = new file.add (item = new JMenuItem JMenuItem ("New"));("New"));file.add (item = new file.add (item = new JMenuItem JMenuItem ("Open"))("Open"))file.file.addSeparatoraddSeparator();();file.add (item = new file.add (item = new JMenuItem JMenuItem ("Close"));("Close"));jmbjmb.add (file);.add (file);

... ...

setJMenuBar setJMenuBar ((jmbjmb););

Page 51: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

Callbacks sur Callbacks sur menu itemsmenu items

menuItem.addActionListener(this);menuItem.addActionListener(this);......//JRadioButtonMenuItem://JRadioButtonMenuItem:rbMenuItem.addActionListener(this);rbMenuItem.addActionListener(this);......//JCheckBoxMenuItem://JCheckBoxMenuItem:cbMenuItem.addItemListener(this);cbMenuItem.addItemListener(this);

Page 52: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

Sous Sous menusmenus//submenu//submenusubmenu = new JMenu("A submenu");submenu = new JMenu("A submenu");submenu.setMnemonic(KeyEvent.VK_S);submenu.setMnemonic(KeyEvent.VK_S);

menuItem = new JMenuItem("dans le sous menu");menuItem = new JMenuItem("dans le sous menu");menuItem.setAccelerator(KeyStroke.getKeyStroke(menuItem.setAccelerator(KeyStroke.getKeyStroke( KeyEvent.VK_2, ActionEvent.ALT_MASK)); KeyEvent.VK_2, ActionEvent.ALT_MASK));submenu.add(menuItem);submenu.add(menuItem);

......menu.add(submenu);menu.add(submenu);

Page 53: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

JPopupMenuJPopupMenupublic class PopupPanel extends JPanel {public class PopupPanel extends JPanel { JPopupMenu popup = new JPopupMenu (); JPopupMenu popup = new JPopupMenu (); public PopupPanel() { public PopupPanel() {

popup.add (new JMenuItem ("Cut"));popup.add (new JMenuItem ("Cut")); ......

popup.setInvoker (this);popup.setInvoker (this);

addMouseListener (new MouseAdapter() {addMouseListener (new MouseAdapter() { public void mousePressed (MouseEvent e) { public void mousePressed (MouseEvent e) { if (e.isPopupTrigger()) { if (e.isPopupTrigger()) { popup.show (e.getComponent(), e.getX(), e.getY()); popup.show (e.getComponent(), e.getX(), e.getY()); } } } } public void mouseReleased (MouseEvent e) { public void mouseReleased (MouseEvent e) { if (e.isPopupTrigger()) { if (e.isPopupTrigger()) { popup.show (e.getComponent(), e.getX(), e.getY()); popup.show (e.getComponent(), e.getX(), e.getY()); } } }); } } } }); }

Page 54: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

Hiérarchie Hiérarchie des des FenêtresFenêtres La hiérarchie des classes fenêtre Swing s'intègre sous la classeLa hiérarchie des classes fenêtre Swing s'intègre sous la classe

Windows de AWTWindows de AWT

Elles ne sont donc pas "lightweight", sont associées à une fenêtreElles ne sont donc pas "lightweight", sont associées à une fenêtregraphique, et ne peuvent pas être transparentes.graphique, et ne peuvent pas être transparentes.

On peut utiliser setJMenuBar().On peut utiliser setJMenuBar().

De même que pour JWindow et JDialog, on doit ajouter les élémentsDe même que pour JWindow et JDialog, on doit ajouter les élémentsà un container obtenu par getContentPane()à un container obtenu par getContentPane()

Page 55: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

JFrame JFrame et Closeet Close Contrairement à Frame, JFrame se fermeContrairement à Frame, JFrame se ferme

sur "close".sur "close".

setDefaultCloseOperation() :setDefaultCloseOperation() :•• DO_NOTHING_ON_CLOSE: comme AWTDO_NOTHING_ON_CLOSE: comme AWT•• HIDE_ON_CLOSE: le défaut (setVisible(true)HIDE_ON_CLOSE: le défaut (setVisible(true)

remappe la fenêtre)remappe la fenêtre)•• DISPOSE_ON_CLOSE: récupère les ressourcesDISPOSE_ON_CLOSE: récupère les ressources

HIDE_ON_CLOSE et DISPOSE_ON_CLOSEHIDE_ON_CLOSE et DISPOSE_ON_CLOSElaissent s'exécuter les event listenerslaissent s'exécuter les event listeners

Page 56: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

JRootPaneJRootPane

Le dispositif d'affichage d'un JFrame estLe dispositif d'affichage d'un JFrame estun JRootPane, composé de deux objets :un JRootPane, composé de deux objets :un glass pane et un layered pane.un glass pane et un layered pane.

Le glass pane est invisible, mais toujoursLe glass pane est invisible, mais toujoursdevant le layered pane, et permetdevant le layered pane, et permetl'affichage des tooltips et des popupsl'affichage des tooltips et des popups

Le layered pane est constitué d'unLe layered pane est constitué d'unmenubar optionnel, et d'un content pane,menubar optionnel, et d'un content pane,utilisé habituellementutilisé habituellement

Page 57: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

JLayeredPaneJLayeredPane

Le JLayeredPane permet d'afficher desLe JLayeredPane permet d'afficher descomposants dans des couches différentes, ce quicomposants dans des couches différentes, ce quipermet des superpositions:permet des superpositions:

layeredPane.add (component, new Integer(5)); layeredPane.add (component, new Integer(5));

Le défaut est JLayeredPane.DEFAULT_LAYER.Le défaut est JLayeredPane.DEFAULT_LAYER.

On peut placer des objets relativement à cetteOn peut placer des objets relativement à cettecouche, devant ou derrièrecouche, devant ou derrière

Le LayoutManager détermine l'ordre d'affichage,Le LayoutManager détermine l'ordre d'affichage,et empêche les superpositions au sein d'uneet empêche les superpositions au sein d'unemême couche.même couche.

Page 58: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

TooltipsTooltips

public class TooltipPanel extends JPanel {public class TooltipPanel extends JPanel {

public TooltipPanel() { public TooltipPanel() {

JButton myButton = new JButton("Hello"); JButton myButton = new JButton("Hello");

myButton.setToolTipText ("World"); myButton.setToolTipText ("World");

add(myButton); add(myButton); } }}}

Page 59: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

ToolbarsToolbars JToolbar est JToolbar est un container qui un container qui permet d'afficherpermet d'afficher

des toolbars des toolbars déplaçablesdéplaçables, , éventuellement danséventuellement dansd'autres d'autres containers containers que celui d'origineque celui d'origine. . L'affichageL'affichagedu du toolbar toolbar passe passe de vertical à horizontal de vertical à horizontal suivantsuivantson emplacement.son emplacement.

On On peut désactiver peut désactiver la la possibilité possibilité de de rendre rendre leslestoolbars toolbars flottantesflottantes..

aToolBaraToolBar..setFloatable setFloatable (false);(false);

Page 60: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

JTabbedPaneJTabbedPane JTabbedPane permet de réaliser desJTabbedPane permet de réaliser des

interfaces à onglets.interfaces à onglets. On ajoute les onglets (des "cards") avecOn ajoute les onglets (des "cards") avec

addTab(). Une des versions permetaddTab(). Une des versions permetl'affichage d'un tooltipl'affichage d'un tooltip

N'importe quel Component peut être affichéN'importe quel Component peut être affichédans un ongletdans un onglet•• addTab(String title, Component component)addTab(String title, Component component)•• addTab(String title, Icon icon, ComponentaddTab(String title, Icon icon, Component

component)component)•• addTab(String title, Icon icon, ComponentaddTab(String title, Icon icon, Component

component, String tip)component, String tip)

Page 61: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

JSplitPaneJSplitPane

JSplitPane permet le redimensionnement réciproque deJSplitPane permet le redimensionnement réciproque dedeux fenêtresdeux fenêtres

On peut placer un JSplitPane dans un autre : c'est unOn peut placer un JSplitPane dans un autre : c'est unmoyen de faire des interfaces compliquées sans gérer lesmoyen de faire des interfaces compliquées sans gérer leslayoutslayouts

setContinuousLayout permet de voir le redimensionnementsetContinuousLayout permet de voir le redimensionnementen directen direct

On peut changer par programme la "dividerLocation"On peut changer par programme la "dividerLocation"

Page 62: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

BoxLayoutBoxLayout Le BoxLayout layout arrange les composants selon l'axeLe BoxLayout layout arrange les composants selon l'axe

horizontal ou vertical, mais plus intelligemment que le gridhorizontal ou vertical, mais plus intelligemment que le gridlayout : les épaisseurs ou largeurs peuvent varierlayout : les épaisseurs ou largeurs peuvent varier

Il centre les composants ne pouvant pas être redimensionnésIl centre les composants ne pouvant pas être redimensionnés

setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));

Le premier paramètre spécifie le container (JPanel par ex), etLe premier paramètre spécifie le container (JPanel par ex), etle second l'axe du BoxLayout. On ajoute les composantsle second l'axe du BoxLayout. On ajoute les composantscomme d'habitudecomme d'habitude

add(myComponent);add(myComponent);

Page 63: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

BoxLayoutBoxLayout

Par ailleurs, Par ailleurs, BoxLayout BoxLayout permet depermet delier relativement des composantslier relativement des composantsconsécutifs :consécutifs :

En les «En les « collantcollant » »,, Et en introduisant des séparateursEt en introduisant des séparateurs

invisiblesinvisibles

Page 64: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

BoxLayoutBoxLayout//Alignement des boutons//Alignement des boutonsJPanel buttonPane JPanel buttonPane = new = new JPanelJPanel();();buttonPanebuttonPane..setLayoutsetLayout(new (new BoxLayoutBoxLayout((buttonPanebuttonPane,,

BoxLayoutBoxLayout.LINE_AXIS));.LINE_AXIS));buttonPanebuttonPane..setBordersetBorder((BorderFactoryBorderFactory..createEmptyBordercreateEmptyBorder

(0, 10, 10, 10));(0, 10, 10, 10));buttonPanebuttonPane..addadd(Box.(Box.createHorizontalGluecreateHorizontalGlue());());buttonPanebuttonPane..addadd((cancelButtoncancelButton););buttonPanebuttonPane..addadd(Box.(Box.createRigidAreacreateRigidArea(new Dimension(10,(new Dimension(10,

0)));0)));buttonPanebuttonPane..addadd((setButtonsetButton););

Page 65: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

Nouveautés majeures Nouveautés majeures de Java 5de Java 5

cfcfhttp://java.sun.com/j2se/1.5.0/docs/guide/swing/1.5/index.htmlhttp://java.sun.com/j2se/1.5.0/docs/guide/swing/1.5/index.html

look and feel par défaut améliorélook and feel par défaut amélioré introduction d'un nouveau look and feelintroduction d'un nouveau look and feel

skinnable sans changer le code: "synth"skinnable sans changer le code: "synth" gestion directe des popup menus (avecgestion directe des popup menus (avec

héritage)héritage) support de l'impression sur JTablesupport de l'impression sur JTable

Page 66: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

Nouveautés Nouveautés de Java5 - de Java5 - TexteTexte JTextArea ne scrolle plusJTextArea ne scrolle plus

automatiquement quand on ajoute duautomatiquement quand on ajoute dutextetexte

HTMLEditorKit a été amélioré pourHTMLEditorKit a été amélioré pourintercepter les évènements desintercepter les évènements desformulaires avant que les paramètresformulaires avant que les paramètres"post" ne soient transmis"post" ne soient transmis

Interrogation du caractère "actif" duInterrogation du caractère "actif" ducurseur ("visible" ne convient pas s'ilcurseur ("visible" ne convient pas s'ilclignote...)clignote...)

Gestion de la couleur de fond amélioréeGestion de la couleur de fond amélioréedans LabelViewdans LabelView

Page 67: Java Swing Eléments de Base - Laurent Henocquelaurent.henocque.com/oldsite/doc/Cours Java Swing Henocque Esil... · Java Swing Eléments de Base ESIL Laurent Henocque Cours mis à

ConclusionConclusion

C'était C'était un point de un point de départ départ pour pour JavaxJavaxSwingSwing

De la De la pratique maintenantpratique maintenant..

Doc en Doc en ligne ligne ((référence référence et et exemplesexemples))sur sur http://www.http://www.javasoftjavasoft.com.com