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

Java Swing Eléments de Base

  • Upload
    luyu

  • View
    53

  • Download
    0

Embed Size (px)

DESCRIPTION

ESIL Laurent Henocque Cours mis à jour en Février 2008. Java Swing Eléments de Base. Licence Creative Commons. Cette création est mise à disposition selon le Contrat Paternité-Partage des Conditions Initiales à l'Identique 2.0 France disponible en ligne - PowerPoint PPT Presentation

Citation preview

Page 1: Java Swing Eléments de Base

Java SwingJava SwingEléments de BaseEléments de Base

ESILESIL

Laurent HenocqueLaurent Henocque

Cours mis à jour en Février Cours mis à jour en Février 20082008

Page 2: Java Swing Eléments de Base

Licence Creative CommonsLicence Creative Commons

Cette création est mise à disposition selon Cette création est mise à disposition selon le Contrat Paternité-Partage des le Contrat Paternité-Partage des Conditions Initiales à l'Identique 2.0 Conditions Initiales à l'Identique 2.0 France disponible en ligne France disponible en ligne

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

ou par courrier postal à Creative ou par courrier postal à Creative Commons, 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

IntroductionIntroduction

Swing est la bibliothèque Java performante Swing est la bibliothèque Java performante pour la réalisation des interfaces homme pour la réalisation des interfaces homme machine.machine.

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

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

Page 4: Java Swing Eléments de Base

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

Page 5: Java Swing Eléments de Base

Création d'une classe "frame"Création d'une classe "frame"

import javax.swing.JFrame;import javax.swing.JFrame;

public class MainFrame extends public class MainFrame extends JFrameJFrame{{   public MainFrame()   public MainFrame()   {   {      super("My title");      super("My title");      setSize(300, 300);      setSize(300, 300);   }   }} }

Page 6: Java Swing Eléments de Base

Création d'une applicationCréation d'une applicationpublic 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

Fermer l'applicationFermer l'application

setDefaultCloseOperation(setDefaultCloseOperation(

JFrame.EXIT_ON_CLOSE); JFrame.EXIT_ON_CLOSE);

Page 8: Java Swing Eléments de Base

Container content = getContentPane();Container content = getContentPane();content.add(new JButton("Button 1")); content.add(new JButton("Button 1"));

Ajout de composantsAjout de composants

Page 9: Java Swing Eléments de Base

Grouper des composantsGrouper des composants

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

Gérer le Positionnement VariableGérer le Positionnement Variable

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

AscenseursAscenseurs

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

Page 12: Java Swing Eléments de Base

Mixer les layoutsMixer les layouts

panel=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

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

Evénements (version 2)Evénements (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

Présentation de la Présentation de la BibliothèqueBibliothèque

Page 16: Java Swing Eléments de Base

Squelette d’application SwingSquelette d’application Swing

import java.awt.*;import java.awt.*;import java.awt.event.*;import java.awt.event.*;import javax.swing.*;import javax.swing.*;public class JWinApp extends JFrame{public class JWinApp extends JFrame{

public JWinApp(String title, JPanel panel){public JWinApp(String title, JPanel panel){super(title); super(title); getContentPane().add(panel, BorderLayout.CENTER);getContentPane().add(panel, BorderLayout.CENTER);setSize(200,200); setSize(200,200); addWindowListener(new WindowAdapter(){addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent we)public void windowClosing(WindowEvent we){ exitApp(); }{ exitApp(); } });});}}protected void exitApp(){protected void exitApp(){

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

}}public static void main(String args[]) { new public static void main(String args[]) { new JWinApp(…).setVisible(true); }JWinApp(…).setVisible(true); }

}}

Page 17: Java Swing Eléments de Base

Hello WorldHello World

class WinHelloPanel extends JPanel implements class WinHelloPanel extends JPanel implements ActionListener{ActionListener{JLabel label = new JLabel("Hello World "); // un labelJLabel label = new JLabel("Hello World "); // un labelJButton button = new JButton("Click!"); // un boutonJButton button = new JButton("Click!"); // un boutonpublic WinHelloPanel(){public WinHelloPanel(){

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

}}public void actionPerformed(ActionEvent ae){public void actionPerformed(ActionEvent ae){

JOptionPane.showMessageDialog(this, "Thanks for JOptionPane.showMessageDialog(this, "Thanks for Clicking.");Clicking.");}}

}}

Page 18: Java Swing Eléments de Base

Widgets commeWidgets comme AWT AWT

Page 19: Java Swing Eléments de Base

WidgetsWidgetsSwingSwing

Page 20: Java Swing Eléments de Base

JPanelJPanel

C’est un Panel léger offrant un C’est un Panel léger offrant un support pour le double buffering support pour le double buffering (technique d’affichage en deux (technique d’affichage en deux temps permettant d’éviter les temps permettant d’éviter les scintillements et défaut d’aspects)scintillements et défaut d’aspects)

Quand le buffering est activé Quand le buffering est activé (constructeur) tous les composants (constructeur) tous les composants se dessinent d’abord dans un buffer se dessinent d’abord dans un buffer non affichénon affiché

Page 21: Java Swing Eléments de Base

IconesIcones

Les icones sont utilisées avec tous les boutons ou Les icones sont utilisées avec tous les boutons ou autres composants.autres composants.

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

l’argument “c” sert à fournir une information l’argument “c” sert à fournir une information complémentaire au moment du dessin (police, couleur)complémentaire au moment du dessin (police, couleur)

x et y spécifient l’origine du dessinx et y spécifient l’origine du dessin

Page 22: Java Swing Eléments de Base

ImageIconImageIcon

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

Icon j = new ImageIcon(Icon j = new ImageIcon(

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

Avantages : Avantages : • url ou fichier, url ou fichier, • chargement asynchrone : pas de blocage de chargement asynchrone : pas de blocage de

l’interfacel’interface• l’image n’est pas sérializablel’image n’est pas sérializable

Page 23: Java Swing Eléments de Base

Créer sa propre iconeCréer sa propre icone

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

Component c, Graphics g, int x, int y) {Component c, Graphics g, int x, int y) { g.setColor(Color.red);g.setColor(Color.red); g.drawOval (x, y, getIconWidth(), g.drawOval (x, y, getIconWidth(),

getIconHeight());getIconHeight()); }} public int getIconWidth() { return 10; }public int getIconWidth() { return 10; } public int getIconHeight() { return 10; }public int getIconHeight() { return 10; }}}

Page 24: Java Swing Eléments de Base

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

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

32);32); fancyLabel.setFont(fancyFont);fancyLabel.setFont(fancyFont);

Icon tigerIcon = new ImageIcon("SmallTiger.gif"); Icon tigerIcon = new ImageIcon("SmallTiger.gif"); fancyLabel.setIcon(tigerIcon);fancyLabel.setIcon(tigerIcon); fancyLabel.setHorizontalAlignment(JLabel.RIGHT); fancyLabel.setHorizontalAlignment(JLabel.RIGHT); add(fancyLabel);add(fancyLabel); }}}}

Page 25: Java Swing Eléments de Base

JButtonJButton

public class ButtonPanel extends JPanel {public class ButtonPanel extends JPanel {

public ButtonPanel() {public ButtonPanel() {

Icon tigerIcon = new ImageIcon("SmallTiger.gif");Icon tigerIcon = new ImageIcon("SmallTiger.gif");

JButton myButton = new JButton("Tiger", tigerIcon);JButton myButton = new JButton("Tiger", tigerIcon);

add(myButton);add(myButton);

}}

}}

Page 26: Java Swing Eléments de Base

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

setMnemonic() – accélérateur clavier : les constantes VK_* de KeyEvent setMnemonic() – accélérateur clavier : les constantes VK_* de KeyEvent

doClick() – appel du bouton par programme doClick() – appel du bouton par programme

setDisabledIcon(), setDisabledSelectedIcon(), setPressedIcon(), setDisabledIcon(), setDisabledSelectedIcon(), setPressedIcon(), setRolloverIcon(), setRolloverSelectedIcon(), setSelectedIcon() – setRolloverIcon(), setRolloverSelectedIcon(), setSelectedIcon() – modifications dynamique de l’icone modifications dynamique de l’icone

setVerticalAlignment(), setHorizontalAlignemnt()setVerticalAlignment(), setHorizontalAlignemnt()

setVerticalTextPosition(), setHorizontalTextPosition() – place le texte par setVerticalTextPosition(), setHorizontalTextPosition() – place le texte par rapport à l’icone rapport à l’icone

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

Page 27: Java Swing Eléments de Base

JCheckBoxJCheckBox

classclass CheckboxPanel CheckboxPanel extendsextends JPanel { JPanel {

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

publicpublic CheckboxPanel() { CheckboxPanel() {

setLayout(setLayout(newnew GridLayout(2, 1)); GridLayout(2, 1));

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

cb1.setIcon(no);cb1.setIcon(no); cb1.setSelectedIcon(yes);cb1.setSelectedIcon(yes);

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

cb2.setIcon(no);cb2.setIcon(no); cb2.setSelectedIcon(yes);cb2.setSelectedIcon(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 (Component c, paintIcon (Component c, Graphics g, Graphics g, intint x, x, intint y) { y) {

intint width = getIconWidth(); width = getIconWidth(); intint height = getIconHeight(); height = getIconHeight(); g.setColor (Color.black);g.setColor (Color.black); ifif (state) g.fillRect (x, y, width, (state) g.fillRect (x, y, width,

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

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

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

}}}}

Page 28: Java Swing Eléments de Base

JRadioButtonJRadioButtonclass RadioButtonPanel extends JPanel {class RadioButtonPanel extends JPanel {public RadioButtonPanel() {public RadioButtonPanel() { setLayout(new GridLayout(4,1));setLayout(new GridLayout(4,1)); JRadioButton radioButton;JRadioButton radioButton; ButtonGroup rbg = new ButtonGroup();ButtonGroup rbg = new ButtonGroup(); JLabel label = new JLabel("Annual Salary: ");JLabel label = new JLabel("Annual Salary: "); label.setFont(new Font("SansSerif", Font.BOLD, label.setFont(new Font("SansSerif", Font.BOLD,

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

radioButton = new JRadioButton("$45,000");radioButton = new JRadioButton("$45,000"); radioButton.setMnemonic (KeyEvent.VK_4);radioButton.setMnemonic (KeyEvent.VK_4); add (radioButton); rbg.add (radioButton);add (radioButton); rbg.add (radioButton); radioButton.setSelected(true);radioButton.setSelected(true); radioButton = new JRadioButton("$60,000");radioButton = new JRadioButton("$60,000"); radioButton.setMnemonic (KeyEvent.VK_6);radioButton.setMnemonic (KeyEvent.VK_6); add (radioButton); rbg.add (radioButton);add (radioButton); rbg.add (radioButton); ......}}

Page 29: Java Swing Eléments de Base

JToggleButtonJToggleButton

class ToggleButtonPanel extends JPanel {class ToggleButtonPanel extends JPanel {

public ToggleButtonPanel() {public ToggleButtonPanel() {

// Set the layout to a GridLayout// Set the layout to a GridLayout

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

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

Page 30: Java Swing Eléments de Base

Méthodes de JTextComponentMéthodes de JTextComponent

copy()copy() cut()cut() paste()paste() getSelectedText()getSelectedText() setSelectionStart()setSelectionStart() setSelectionEnd()setSelectionEnd() selectAll()selectAll() replaceSelection() replaceSelection() getText()getText() setText()setText() setEditable()setEditable() setCaretPosition()setCaretPosition()

Page 31: Java Swing Eléments de Base

JTextFieldJTextField & & JTextAreaJTextArea

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

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

tf.setText("TextField");tf.setText("TextField");

ta.setText("JTextArea\n Multi Lignes");ta.setText("JTextArea\n Multi Lignes");

add(tf);add(tf);

add(new JScrollPane(ta)); // scroll au cas oùadd(new JScrollPane(ta)); // scroll au cas où

Page 32: Java Swing Eléments de Base

JTextPaneJTextPane

JTextPane est un éditeur de texte complet (avec JTextPane est un éditeur de texte complet (avec insertions d’images). Il s’appuie sur une liste de insertions d’images). Il s’appuie sur une liste de blocs dotés de stylesblocs dotés de styles

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

MutableAttributeSet attr = new MutableAttributeSet attr = new SimpleAttributeSet();SimpleAttributeSet();

StyleConstants.setFontFamily(attr, "Serif");StyleConstants.setFontFamily(attr, "Serif"); StyleConstants.setFontSize(attr, 18);StyleConstants.setFontSize(attr, 18); StyleConstants.setBold(attr, true);StyleConstants.setBold(attr, true); tp.setCharacterAttributes(attr, false);tp.setCharacterAttributes(attr, false); add(new JScrollPane(tp));add(new JScrollPane(tp));

Page 33: Java Swing Eléments de Base

JTextPane exempleJTextPane exemple

class TextPanel extends JPanel {class TextPanel extends JPanel {

public TextPanel() {public TextPanel() { setLayout(new BorderLayout());setLayout(new BorderLayout());

JTextField textField = new JTextField();JTextField textField = new JTextField(); JTextArea textArea = new JTextArea();JTextArea textArea = new JTextArea(); JTextPane textPane = new JTextPane();JTextPane textPane = new JTextPane();

MutableAttributeSet attr = new SimpleAttributeSet();MutableAttributeSet attr = new SimpleAttributeSet(); StyleConstants.setFontFamily(attr, "Serif");StyleConstants.setFontFamily(attr, "Serif"); StyleConstants.setFontSize(attr, 18);StyleConstants.setFontSize(attr, 18); StyleConstants.setBold(attr, true);StyleConstants.setBold(attr, true); textPane.setCharacterAttributes(attr, false);textPane.setCharacterAttributes(attr, false);

add(textField, BorderLayout.NORTH);add(textField, BorderLayout.NORTH); add(new JScrollPane(textArea), BorderLayout.CENTER);add(new JScrollPane(textArea), BorderLayout.CENTER); add(new JScrollPane(textPane), BorderLayout.SOUTH);}}add(new JScrollPane(textPane), BorderLayout.SOUTH);}}

Page 34: Java Swing Eléments de Base

JPasswordFieldJPasswordField

class PasswordPanel extends JPanel {class PasswordPanel extends JPanel { PasswordPanel() {PasswordPanel() { JPasswordField p1 = new JPasswordField p1 = new

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

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

Page 35: Java Swing Eléments de Base

JEditorPaneJEditorPane

JEditorPane est un éditeur de textes JEditorPane est un éditeur de textes permettant l’affichage de contenu permettant l’affichage de contenu

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

Page 36: Java Swing Eléments de Base

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

// suivre les liens :// suivre les liens : jt.addHyperlinkListener(new HyperlinkListener () {jt.addHyperlinkListener(new HyperlinkListener () { public void hyperlinkUpdate(final HyperlinkEvent e) {public void hyperlinkUpdate(final HyperlinkEvent e) { if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { SwingUtilities.invokeLater(new Runnable() {SwingUtilities.invokeLater(new Runnable() { public void run() { Document doc = jt.getDocument();public void run() { Document doc = jt.getDocument(); try { URL url = e.getURL(); jt.setPage(url); try { URL url = e.getURL(); jt.setPage(url);

input.setText (url.toString());input.setText (url.toString()); } catch (IOException io) {} catch (IOException io) { JOptionPane.showMessageDialog (JOptionPane.showMessageDialog ( Browser.this, "Can't follow link", "Invalid Input", Browser.this, "Can't follow link", "Invalid Input", JOptionPane.ERROR_MESSAGE);JOptionPane.ERROR_MESSAGE); jt.setDocument (doc);}}});jt.setDocument (doc);}}});}}});}}});

Page 37: Java Swing Eléments de Base

suitesuite

JScrollPane pane = new JScrollPane();JScrollPane pane = new JScrollPane(); pane.setBorder (pane.setBorder ( BorderFactory.createLoweredBevelBorder());BorderFactory.createLoweredBevelBorder()); pane.getViewport().add(jt);pane.getViewport().add(jt); add(pane, BorderLayout.CENTER);add(pane, BorderLayout.CENTER); input.addActionListener (new ActionListener() {input.addActionListener (new ActionListener() { public void actionPerformed (ActionEvent e) {public void actionPerformed (ActionEvent e) { try { jt.setPage (input.getText()); } try { jt.setPage (input.getText()); }

catch (IOException ex) {catch (IOException ex) { JOptionPane.showMessageDialog (JOptionPane.showMessageDialog ( Browser.this, "Invalid URL", "Invalid Input", Browser.this, "Invalid URL", "Invalid Input", JOptionPane.ERROR_MESSAGE); }JOptionPane.ERROR_MESSAGE); } } });} }); add (input, BorderLayout.SOUTH);}}add (input, BorderLayout.SOUTH);}}

Page 38: Java Swing Eléments de Base

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

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

JSlider et LabelsJSlider et 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

JProgressBarJProgressBar

Créer une Progress Bar Cré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

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

Callbacks ComboBoxCallbacks ComboBox

public 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

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

JList : SélectionJList : Sélection

static 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

Modification dynamique de JListModification dynamique de JList

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

JList list = new JList(listModel); JList list = new JList(listModel); ...... listModel.remove(index); listModel.remove(index);

Page 47: Java Swing Eléments de Base

listSelectionListenerlistSelectionListener

public 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

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

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

b = new JButton ("Titled/Line");b = new JButton ("Titled/Line");b.setBorder(new TitledBorder (b.setBorder(new TitledBorder ( new TitledBorder(LineBorder.createGrayLineBorder(),"Hello"), "World",new TitledBorder(LineBorder.createGrayLineBorder(),"Hello"), "World", TitledBorder.RIGHT, TitledBorder.BOTTOM));TitledBorder.RIGHT, TitledBorder.BOTTOM));

b = new JButton ("Bevel Up"); b.setBorder(new b = new JButton ("Bevel Up"); b.setBorder(new BevelBorder(BevelBorder.RAISED));BevelBorder(BevelBorder.RAISED));

b = new JButton ("Bevel Down"); b.setBorder(new b = new JButton ("Bevel Down"); b.setBorder(new BevelBorder(BevelBorder.LOWERED)); BevelBorder(BevelBorder.LOWERED));

Page 49: Java Swing Eléments de Base

BordersBorders (2) (2)

SoftBevelBorder(SoftBevelBorder.RAISED);SoftBevelBorder(SoftBevelBorder.RAISED);

SoftBevelBorder(SoftBevelBorder.LOWERED);SoftBevelBorder(SoftBevelBorder.LOWERED); MatteBorder(5, 10, 5, 10, Color.red);MatteBorder(5, 10, 5, 10, Color.red); Icon icon = new ImageIcon ("file.gif");Icon icon = new ImageIcon ("file.gif"); new MatteBorder(10, 10, 10, 10, icon));new MatteBorder(10, 10, 10, 10, icon)); BevelBorder(BevelBorder.RAISED, Color.red, Color.pink));BevelBorder(BevelBorder.RAISED, Color.red, Color.pink)); CompoundBorder(CompoundBorder( new MyBorder(Color.red), new MyBorder(Color.red), new CompoundBorder (new MyBorder(Color.green),new CompoundBorder (new MyBorder(Color.green), new MyBorder(Color.blue)));new MyBorder(Color.blue)));

Page 50: Java Swing Eléments de Base

MenusMenus

JMenuBar jmb = new JMenuBar();JMenuBar jmb = new JMenuBar();JMenu file = new JMenu ("File");JMenu file = new JMenu ("File");file.addMenuListener (new MenuListener() {file.addMenuListener (new MenuListener() { public void menuSelected (MenuEvent e) { ... }public void menuSelected (MenuEvent e) { ... } public void menuDeselected (MenuEvent e) { ... }public void menuDeselected (MenuEvent e) { ... } public void menuCanceled (MenuEvent e) { ... }public void menuCanceled (MenuEvent e) { ... }});}); JMenuItem item;JMenuItem item;file.add (item = new JMenuItem ("New"));file.add (item = new JMenuItem ("New"));file.add (item = new JMenuItem ("Open"))file.add (item = new JMenuItem ("Open"))file.addSeparator();file.addSeparator();file.add (item = new JMenuItem ("Close"));file.add (item = new JMenuItem ("Close"));jmb.add (file);jmb.add (file);

......

setJMenuBar (jmb);setJMenuBar (jmb);

Page 51: Java Swing Eléments de Base

Callbacks sur menu itemsCallbacks sur menu 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

Sous menusSous menus

//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

JPopupMenuJPopupMenu

public 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

Hiérarchie des FenêtresHiérarchie des Fenêtres La hiérarchie des classes fenêtre Swing s'intègre sous la classe La 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être Elles ne sont donc pas "lightweight", sont associées à une fenêtre graphique, 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éments à De 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

JFrame et CloseJFrame et Close Contrairement à Frame, JFrame se ferme Contrairement à Frame, JFrame se ferme

sur "close".sur "close".

setDefaultCloseOperation() : setDefaultCloseOperation() : • DO_NOTHING_ON_CLOSE: comme AWT DO_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_CLOSE HIDE_ON_CLOSE et DISPOSE_ON_CLOSE laissent s'exécuter les event listenerslaissent s'exécuter les event listeners

Page 56: Java Swing Eléments de Base

JRootPaneJRootPane

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

Le glass pane est invisible, mais toujours Le glass pane est invisible, mais toujours devant le layered pane, et permet devant le layered pane, et permet l'affichage des tooltips et des popups l'affichage des tooltips et des popups

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

Page 57: Java Swing Eléments de Base

JLayeredPaneJLayeredPane

Le JLayeredPane permet d'afficher des Le JLayeredPane permet d'afficher des composants dans des couches différentes, ce qui composants dans des couches différentes, ce qui permet 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 à cette On peut placer des objets relativement à cette couche, 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'une et empêche les superpositions au sein d'une même couche. même couche.

Page 58: Java Swing Eléments de Base

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

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

des toolbars déplaçables, éventuellement dans des toolbars déplaçables, éventuellement dans d'autres containers que celui d'origine. d'autres containers que celui d'origine. L'affichage du toolbar passe de vertical à L'affichage du toolbar passe de vertical à horizontal suivant son emplacement.horizontal suivant son emplacement.

On peut désactiver la possibilité de rendre les On peut désactiver la possibilité de rendre les toolbars flottantes.toolbars flottantes.

aToolBar.setFloatable (false);aToolBar.setFloatable (false);

Page 60: Java Swing Eléments de Base

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

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

addTab(). Une des versions permet addTab(). Une des versions permet l'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, Component addTab(String title, Icon icon, Component

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

component, String tip)component, String tip)

Page 61: Java Swing Eléments de Base

JSplitPaneJSplitPane

JSplitPane permet le redimensionnement réciproque de JSplitPane permet le redimensionnement réciproque de deux fenêtres deux fenêtres

On peut placer un JSplitPane dans un autre : c'est un moyen On peut placer un JSplitPane dans un autre : c'est un moyen de faire des interfaces compliquées sans gérer les layouts de faire des interfaces compliquées sans gérer les layouts

setContinuousLayout permet de voir le redimensionnement setContinuousLayout permet de voir le redimensionnement en direct en direct

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

Page 62: Java Swing Eléments de Base

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

horizontal ou vertical, mais plus intelligemment que le grid horizontal ou vertical, mais plus intelligemment que le grid layout : 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), et Le premier paramètre spécifie le container (JPanel par ex), et le second l'axe du BoxLayout. On ajoute les composants le second l'axe du BoxLayout. On ajoute les composants comme d'habitudecomme d'habitude

add(myComponent);add(myComponent);

Page 63: Java Swing Eléments de Base

BoxLayoutBoxLayout

Par ailleurs, BoxLayout permet de lier Par ailleurs, BoxLayout permet de lier relativement des composants relativement des composants consécutifs :consécutifs :

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

invisiblesinvisibles

Page 64: Java Swing Eléments de Base

BoxLayoutBoxLayout

//Alignement des boutons//Alignement des boutons

JPanel buttonPane = new JPanel();JPanel buttonPane = new JPanel();

buttonPane.setLayout(new BoxLayout(buttonPane, buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS));BoxLayout.LINE_AXIS));

buttonPane.setBorder(BorderFactory.createEmptyBorderbuttonPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));(0, 10, 10, 10));

buttonPane.add(Box.createHorizontalGlue());buttonPane.add(Box.createHorizontalGlue());

buttonPane.add(cancelButton);buttonPane.add(cancelButton);

buttonPane.add(Box.createRigidArea(new Dimension(10, buttonPane.add(Box.createRigidArea(new Dimension(10, 0)));0)));

buttonPane.add(setButton);buttonPane.add(setButton);

Page 65: Java Swing Eléments de Base

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

cf cf http://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 feel introduction d'un nouveau look and feel

skinnable sans changer le code: "synth"skinnable sans changer le code: "synth" gestion directe des popup menus (avec gestion 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

Nouveautés de Java5 - TexteNouveautés de Java5 - Texte JTextArea ne scrolle plus automatiquement JTextArea ne scrolle plus automatiquement

quand on ajoute du textequand on ajoute du texte HTMLEditorKit a été amélioré pour HTMLEditorKit a été amélioré pour

intercepter les évènements des intercepter les évènements des formulaires avant que les paramètres formulaires avant que les paramètres "post" ne soient transmis"post" ne soient transmis

Interrogation du caractère "actif" du Interrogation du caractère "actif" du curseur ("visible" ne convient pas s'il curseur ("visible" ne convient pas s'il clignote...)clignote...)

Gestion de la couleur de fond améliorée Gestion de la couleur de fond améliorée dans LabelViewdans LabelView

Page 67: Java Swing Eléments de Base

ConclusionConclusion

C'était un point de départ pour Javax C'était un point de départ pour Javax SwingSwing

De la pratique maintenant.De la pratique maintenant.

Doc en ligne (référence et exemples) Doc en ligne (référence et exemples) sur http://www.javasoft.comsur http://www.javasoft.com