Composants de Swing JavaBeans Actions Boutons Icônes Bordures Curseurs

Slides:



Advertisements
Présentations similaires
Réaliser en Java un programme client d’une Base de Données
Advertisements

PHP5 its a kind of magic. Chargement automatique function __autoload( $nom_classe ) { require_once('obj/'.$nom_classe.'.class.php'); } si on exécute le.
Conception d’IHM en Java
Conception d’IHM en Java
1 Swing par la pratique contrat Creative Commons Paternité-Pas d'Utilisation Commerciale-Partage des Conditions Initiales à l'Identique.
Gestion des événements (suite)
Programmation événementielle
Les Prepositions.
Gestionnaires de géométrie
Arbres Un premier exemple Contenu Rendu Ecouteurs Parcours
Tables Construire une table Modèle de table Filtrer un modèle 1.
Composants graphiques de Java
Page 1 Les applets Jacques Lonchamp. Page 2 Présentation Une applet est téléchargée à partir dune machine distante qui fournit le code. Ce chargement.
Introduction à Java - les « Threads » -
Voisin-Polian : Introduction à Java 1 Introduction à Java - AWT - Frédéric VOISIN – Nicole POLIAN FIIFO - « Remise à Niveau »
Les Interfaces graphiques Les Swing. Les interfaces graphiques: Introduction Une application est une boîte noire. Prend des entrées et produit des sorties.
Les composants Graphiques Atomiques
Architecture Logicielle pour les IHM
Algorithme et structure de données
Vos premiers pas en Swing
JAV - TD 6 Structures de données JAVA
Swing et les Interfaces Graphiques
Chapitre IV Object, interfaces, classes imbriquées.
Injection de dépendances
BlueJ_XI 1 Java, les objets : tout de suite ! Gestion des erreurs : les exceptions Notes de cours associées au chapitre 11 tutorial BlueJ
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Faculté I&C, Claude Petitpierre, André Maurer 1 Java.
Langage Oriente Objet Cours 4.
Cours du 19 octobre. POO-L3 H. Fauconnier2 E) Constructeurs et héritage Le constructeurs ne sont pas des méthodes comme les autres: le redéfinition na.
1 Guide de lenseignant-concepteur Vincent Riff 27 mai 2003.
1 Les pointeurs et quelques rappels sur certains éléments du langage C.
Master 1 SIGLIS java Lecteur Stéphane Tallard Chapitre 4 – Structures de contrôle.
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Interface graphiques.
Graphical User Interface (GUI)
Le patron de conception « Strategy » Simon Durocher ( )
Programmation par Objets et Java
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
GPA789 Analyse et conception orientées objet 1 Professeur: Tony Wong, Ph.D., ing. Chapitre 6 Correspondance UML et C++
1. 2 PLAN DE LA PRÉSENTATION - SECTION 1 : Code HTML - SECTION 2.1. : CSS (Méthode 1) - SECTION 2.2. : CSS (Méthode 2) - SECTION 3 : JavaScript - SECTION.
Programmation concurrente
Design Pattern Memento. Principe : Enregistrer les changements d'états d'un objet Objectif : Pouvoir restituer les états précédents d'un objet.
Design Pattern: Decorator
Multi-Thread Jian-Yun Nie
IFT 6800 Atelier en Technologies d’information
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Badr Benmammar Formation Développeur Java Thread et Swing Badr Benmammar
Formation Développeur Java Applet et interfaces graphiques avec AWT
Java Swing.
Cours 11 Threads. Chapitre X threads threadPOO-L3 H. Fauconnier3 Threads threads: plusieurs activités qui coexistent et partagent des données exemples:
COURS DE PROGRAMMATION ORIENTEE OBJET :
Veuillez trouver ci-joint
99 Réutilisation du code grâce à l'héritage. 9-2 Objectifs À la fin de ce cours, vous serez capables de : Définir l'héritage Utiliser l'héritage pour.
Java : Graphique Swing juin 2006 Brigitte Groléas.
10 paires -. 9 séries de 3 étuis ( n° 1 à 27 ) 9 positions à jouer 5 tables Réalisé par M..Chardon.
CALENDRIER-PLAYBOY 2020.
USAM BRIDGE H O W E L L -CLASSIQUE
9 paires séries de 3 étuis ( n° 1 à 27 )
Propriétés. Propriétés ► Les propriétés peuvent être visibles dans les environnements de scripts ► Les propriétés peuvent être accédées par programmation.
11/04/ L'héritage Cours 7 Cours 7.
Cours 7 Classes locales Clonage Divers: tableaux.
Cours 91 9 Interfaces graphiques avec awt. Cours 92 Plan Introduction : deux bibliothèques graphiques 1.Comment se dessine une fenêtre ?  Un exemple.
Interfaces graphiques. Composants d'interface utilisateur graphique (GUI) 1 Bibliothèques Awt et Swing Procédures communes pour l'utilisation de ces clases.
14 La gestion d’événements
Tutorat en bio-informatique
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
Cours du 5 novembre.
Java Swing. Principes de base  Des composants graphiques (exemple: JFrame, JButton …)  Hiérarchie de classes  Des événements et les actions à effectuer.
Transcription de la présentation:

Composants de Swing JavaBeans Actions Boutons Icônes Bordures Curseurs 1

Java Beans Tout composant Swing est un JavaBean. Un bean est capable d’introspection possède et gère des propriétés expose les propriétés communique par évènements les changements de propriétés réalise la persistance car sait se sérialiser.

Propriétés Propriété est exposée par setXX(), getXX(), isXX() est simple, liée (bound) ou contrainte Propriété liée envoit un PropertyChangeEvent, chaque fois qu’elle change, aux PropertyChangeListener. Propriété contrainte envoit un PropertyChangeEvent juste avant qu’elle ne change, et d’autres composants peuvent s’opposer (véto) au changement (VetoableChangeListener).

ChangeEvent De plus, les composants Swing ont un événement “lèger”: ChangeEvent ChangeEvent n’a que la méthode getSource() (comme tout évènement). PropertyChangeEvent a les méthodes getSource() getOldValue() getNewValue() getPropertyName()

AbstractAction AbstractAction est une classe abstraite elle implémente l’interface Action Action étend ActionListener la seule méthode à écrire est actionPerformed() Les conteneurs JMenu, JPopupMenu et JToolBar honorent les actions: un même objet d’une classe implémentant AbstractAction peut être “ajouté” à plusieurs de ces conteneurs. les diverses instances opèrent de concert. par exemple, un objet ajouté à un menu et à une barre d’outils est activé ou désactivé simultanément dans les deux. Les classes dérivées de AbstractAction sont utiles quand une même action peut être déclenchée de plusieurs manières.

Emploi d’AbstractAction Création d’une classe qui étend AbstractAction Utilisation comme ActionListener Utilisation dans un menu et dans une barre d’outils class MonAction extends AbstractAction { public void actionPerformed( ActionEvent e ) { ... } Action monAction = new MonAction(); JButton b = new JButton(“Hello”); b.addActionListener(monAction); Action copyAction = new MonAction(“Copy”); JMenu menu = new JMenu(“Edit”); JToolBar tools = new JToolBar(); JMenuItem copyItem = menu.add(copyAction); JButton copyBtn = tools.add(copyAction);

Constructeurs et propriétés Avec une chaîne de caractères, et une icône Propriété : enabled Constantes Gestion de propriétés: AbstractAction() AbstractAction(String nom) AbstractAction(String nom, Icon icône) Action.DEFAULT // Action.NAME // setText() Action.SHORT_DESCRIPTION // setToolTipText Action.LONG_DESCRIPTION // aide contexte Action.SMALL_ICON // aussi setIcon() void putValue(String clé, Object valeur) Object getValue(String clé)

Exemple public class MyFrame extends JFrame { private Action copyAction, cutAction, pasteAction; public MyFrame() { ... JMenuBar mbar = new JMenuBar(); JToolBar toolbar = new JToolBar(); JMenu edit = new JMenu("Edit"); copyAction = new MonAction("Copy", new ImageIcon(”copy.gif")); JMenuItem copy = edit.add(copyAction); copy.setIcon(null); JButton bouton = toolbar.add(copyAction); bouton.setText(null); bouton.setToolTipText("copier"); cutAction.setEnabled( false ); } class MonAction extends AbstractAction { String name; public MonAction(String name, Icon icon) { super( name, icon ); this.name = name; } public void actionPerformed(ActionEvent e) { System.out.println( name + " pressed" );

Etiquettes Une étiquette peut contenir un texte, une icône, ou les deux. Leurs positions sont fixées par des constantes. Une étiquette peut être désactivée. Constructeurs les paramètres peuvent être absents le dernier désigne le placement dans le conteneur Nombreuses fonctions utilitaires. JLabel(String libellé, Icon image, int alignHorizontal)

Etiquettes public class ImageLabel { public static void main(String[] args) { JLabel[] e = new JLabel[9]; e[0] = makeLabel(JLabel.TOP, JLabel.LEFT); e[1] = makeLabel(JLabel.TOP, JLabel.CENTER); e[2] = makeLabel(JLabel.TOP, JLabel.RIGHT); e[3] = makeLabel(JLabel.CENTER, JLabel.LEFT); e[4] = makeLabel(JLabel.CENTER, JLabel.CENTER); e[5] = makeLabel(JLabel.CENTER, JLabel.RIGHT); e[6] = makeLabel(JLabel.BOTTOM, JLabel.LEFT); e[7] = makeLabel(JLabel.BOTTOM, JLabel.CENTER); e[8] = makeLabel(JLabel.BOTTOM, JLabel.RIGHT); e[0].setEnabled(false); e[2].setIconTextGap(15); JFrame f = new JFrame(); f.addWindowListener(new Fermeur()); Container c = f.getContentPane(); c.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5)); for (int i = 0; i < 9; i++) c.add(e[i]); f.setSize(300,250); f.setVisible(true); c.setBackground(Color.blue);// opaque } protected static JLabel makeLabel(int vert, int horiz) { JLabel l = new JLabel("sourire", icon, SwingConstants.CENTER); l.setVerticalTextPosition(vert); l.setHorizontalTextPosition(horiz); l.setBorder(BorderFactory.createLineBorder(Color.black)); l.setOpaque(true); l.setBackground(Color.yellow); return l; } private static Icon icon = new ImageIcon("gifs/soccer.gif");

Boutons Un bouton délivre un ActionEvent quand on clique dessus, en plus des évènements de ses superclasses. Un bouton et une étiquette sont des conteneurs. Dans le programme ci-contre, le fond est une image dans un JLabel le bouton “Hello” est ajouté à l’étiquette, vue comme conteneur le bouton est rendu transparent quand on passe sur le bouton, le curseur se change en main.

Exemple de bouton l’image est chargée dans un JLabel l’étiquette est centrée dans le conteneur l’étiquette reçoit un Layout approprié et on y ajoute le bouton le bouton reçoit un ActionListener un message s’affiche dans l’étiquette du bas public class TransparentButton extends JFrame implements ActionListener { JButton bouton = new JButton("Hello"); static String[] msg = {"Opaque", "Transparent avec foyer", "Transparent sans foyer", "Transparent sans foyer ni bord", "Transparent sans fond"}; int state = 0; JLabel message = new JLabel(msg[state]); TransparentButton() { super("Bouton transparent"); Container contentPane = getContentPane(); Icon image = new ImageIcon("gifs/mandrill.jpg"); JLabel label = new JLabel(image); contentPane.add(label, BorderLayout.CENTER); contentPane.add(message, BorderLayout.SOUTH); label.setLayout(new FlowLayout(FlowLayout.LEFT)); label.add(bouton); bouton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); bouton.setFont(new Font("Helvetica", Font.BOLD, 40)); bouton.addActionListener(this); }

Exemple de bouton (fin) void actionPerformed(ActionEvent e) { switch (state) { case 0:bouton.setOpaque(false); break; case 1:bouton.setFocusPainted(false); break; case 2:bouton.setBorderPainted(false); break; case 3:bouton.setContentAreaFilled(false); break; case 4: bouton.setOpaque(true); bouton.setFocusPainted(true); bouton.setBorderPainted(true); bouton.setContentAreaFilled(true); break; } state = (state +1) % msg.length; message.setText(msg[state]); System.out.println(state + " Aille!"); public static void main(String[] args) { TransparentButton f = new TransparentButton(); f.pack(); f.setVisible(true); f.addWindowListener(new Fermeur());

Icônes La classe ImageIcon implémente l’interface Icon Le chargement de l’image de l’icône se fait au moyen d’un MediaTracker, mais ceci est transparent à l’utilisateur. Constructeurs Methodes ImageIcon(String nomfichier) ImageIcon(Image image) ImageIcon(URL url) int getIconHeight() int getIconWidth() Image getImage()

Bordures Peut être associé à tout composant dérivant de JComponent Figurent dans javax.swing.border Tout bord étend AbstractBorder qui implémente Border La classe BorderFactory a des méthodes statiques de création qui de plus essaient d’utiliser des bords déjà construits. Elle est dans javax.swing

Les divers bords Les classes de bords ont des noms différents. public class Bords extends JPanel { static JPanel panelBord(Border b) {...} public Bords(){ setLayout(new GridLayout(4,2)); add(panelBord(new TitledBorder("Titre"))); add(panelBord(new EtchedBorder())); add(panelBord(new MatteBorder(5,30,10,30,Color.green))); add(panelBord(new LineBorder(Color.blue))); add(panelBord(new BevelBorder(BevelBorder.RAISED))); add(panelBord(new SoftBevelBorder(BevelBorder.LOWERED))); add(panelBord(new CompoundBorder(new EtchedBorder(), new LineBorder(Color.red)))); ... } Les classes de bords ont des noms différents. Les paramètres dépendent des classes On peut imbriquer un bord dans un autre en créant un bord composé.

Les noms des classes Par introspection, on obtient le nom de la classe static JPanel panelBord(Border b) { JPanel p = new JPanel(); p.setLayout(new BorderLayout()); String nom = b.getClass().toString(); p.add(new JLabel(nom,JLabel.CENTER), BorderLayout.CENTER); p.setBorder(b); return p; }

Un bord compliqué JPanel p = new JPanel(); p.setLayout(new BorderLayout()); p.add(new JLabel("bords imbriqués",JLabel.CENTER), BorderLayout.CENTER); Border emptyBorder = new EmptyBorder(3,3,3,4); Border b = new CompoundBorder(emptyBorder, new LineBorder(Color.blue,3) ); b = new CompoundBorder(new LineBorder(Color.red,3),b); b = new CompoundBorder(emptyBorder, b); b = new CompoundBorder(new LineBorder(Color.green,3), b); p.setBorder(b);

Curseur Un curseur (slider) permet d’entrer une valeur entre deux bornes selon uen échelle linéaire. On construit un curseur par si les valeurs extrêmes ne sont pas données, elles prennent les valeurs par défaut 0, 100, et 50 pour la valeur initiale. Un curseur vertical est construit avec JSlider curseur = new JSlider(min, max, valeurInitiale); JSlider curseur = new JSlider(JSlider.VERTICAL, min, max, valeurInitiale);

Curseurs A chaque changement de valeur, un curseur engendre un ChangeEvent On écoute ces évènements en enrégistrant un ChangeListener. Sa seule méthode est stateChanged(). public void stateChanged(ChangeEvent ev) { JSlider curseur = (JSlider)ev.getSource(); int valeur = curseur.getValue(); ...

Curseurs : décorations Marques d’espacement: Affichage de ces marques: Arrêt sur graduation: Libellés des graduations: Inversion de direction: curseur.setMajorTickSpacing(20); curseur.setMinorTickSpacing(5); curseur.setPaintTicks(true); curseur.setSnapToTicks(true); curseur.setPaintLabels(true); curseur.setInverted(true);

Curseurs: étiquettes personnalisées Les étiquettes sont des JLabel, rangées dans une table de hachage avec les valeurs de marques correspondantes, transformées en objets: La table est enregistrée dans le curseur labelTable = new Hashtable(); labelTable.put(new Integer(0), new JLabel(new ImageIcon("9h.gif"))); labelTable.put(new Integer(20), new JLabel(new ImageIcon("10h.gif"))); labelTable.put(new Integer(40), new JLabel(new ImageIcon("jh.gif"))); curseur.setLabelTable(labelTable);

Exemple Trois curseurs permettent de sélectionner et d’afficher une date. Le curseur des jours ajuste son maximum en fonction du nombre de jours dans le mois.

Curseur des années De 1990 à 2010 initialisé à l’année courante encadré et titré Calendar calendar = new GregorianCalendar(); Date date = new Date(); calendar.setTime(date); curAnnee = new JSlider(1990, 2010, calendar.get(Calendar.YEAR)); curAnnee.setPaintLabels(true); curAnnee.setMajorTickSpacing(5); curAnnee.setMinorTickSpacing(1); curAnnee.setPaintTicks(true); curAnnee.addChangeListener(lst); p = new JPanel(new BorderLayout()); p.setBorder(new TitledBorder(new EtchedBorder(), " Année ")); p.add(curAnnee, BorderLayout.CENTER);

Curseur des mois les étiquettes sont des abréviations des noms des mois elles sont rangées dans une table de hachage curMois = new JSlider( 0, 11, calendar.get(Calendar.MONTH)); String[] months = (new DateFormatSymbols()).getShortMonths(); Hashtable labels = new Hashtable(12); for (int k = 0; k < 12; k++) labels.put(new Integer(k), new JLabel(months[k])); curMois.setLabelTable(labels); curMois.setPaintLabels(true); curMois.setMinorTickSpacing(1); curMois.setPaintTicks(true); curMois.addChangeListener(lst);

Curseur des jours Initialisé au nombre de jours du mois courant Numérotation à partir de 1 int maxDays = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); curJour = new JSlider(1, maxDays, calendar.get(Calendar.DAY_OF_MONTH)); curJour.setPaintLabels(true); curJour.setMajorTickSpacing(5); curJour.setMinorTickSpacing(1); curJour.setPaintTicks(true); curJour.addChangeListener(lst);

Ajuster la date En réponse à un ChangeEvent de l’un des trois curseurs recalculer la date ajuster l’échelle des jours dans le curseur des jours afficher la date dans la zone de date. lst = new DateListener(); class DateListener implements ChangeListener { public void stateChanged(ChangeEvent e) { showDate(); } public void showDate() { calendar.set(curAnnee.getValue(), curMois.getValue(), 1); int maxDays = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); if (curJour.getMaximum() != maxDays) curJour.setMaximum(maxDays); calendar.set(curAnnee.getValue(), curMois.getValue(), curJour.getValue()); Date date = calendar.getTime(); zoneDate.setText(dateFormat.format(date)); }