Académique Documents
Professionnel Documents
Culture Documents
Chap6 (JAVA) - JAVA Graphique
Chap6 (JAVA) - JAVA Graphique
Graphique|
JAVA|
Généralités
Interface
Utilisateur
Concepts
Interface
Utilisateur
Boite à outils graphique
ØPackage javax.swing;
ØFait parti des Java Foundation Classes (JFC).
ØFournir un riche ensemble de composants GUI :
Boutons, Listes, étiquettes, zones de texte …
ØSWING offre plusieurs mécanismes originaux,
pratiques et puissants.
ØSWING peut se programmer à plusieurs niveaux.
SWING
Barre de titre (par défaut)
Titre - □ X
Menu1 | Menu2 | Menu3| …
Barre de
menu
(inexistante
par défaut)
Corps de la page
(JPanel)
Fenêtre graphique
(JFrame)
Hello World
TestGraphiq.java
import javax.swing.*;
public class TestGraphiq {
public static void main (String[] args) {
JFrame f = new JFrame("Hello World");
// Composants ajoutés au frame courant.
f.setSize(300,200);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
Hello World
TestGraphiq.java Importer le package
import javax.swing.*;
public class TestGraphiq { Créer un objet
public static void main (String[] args) { graphique
JFrame f = new JFrame("Hello World");
// Composants ajoutés au frame courant.
f.setSize(300,200); Définir la taille
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true); 300px
}
}
afficher
200px
Méthodes Swing
(f.DO_NOTHING_ON_CLOSE
Méthodes Swing
Composer la fenêtre:
JPanel, JScrollPane, JSplitPane, …
Eléments de base:
JButton, JCheckBox, JTextField,
JTextArea, …
Hello World
TestGraphiq.java
import javax.swing.*;
public class HelloWorld {
public static void main (String[] args) {
JFrame f = new JFrame("Hello World");
JLabel label = new JLabel("Bonjour");
JPanel p = (JPanel)f.getContentPane();
p.add(label);
p.setBackground(java.awt.Color.white);
f.setSize(300,200);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
Hello World
TestGraphiq.java
import javax.swing.*;
public class HelloWorld { Niveau
public static void main (String[] args) { supérieur
JFrame f = new JFrame("Hello World"); Composante de
JLabel label = new JLabel("Bonjour"); base
JPanel p = (JPanel)f.getContentPane();
p.add(label);
p.setBackground(java.awt.Color.white); Niveau
f.setSize(300,200); intermédiaire
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
Hello World
TestGraphiq.java
import javax.swing.*;
public class HelloWorld { Niveau
public static void main (String[] args) { supérieur
JFrame f = new JFrame("Hello World"); Composante de
JLabel label = new JLabel("Bonjour"); base
JPanel p = (JPanel)f.getContentPane();
p.add(label);
p.setBackground(java.awt.Color.white); Niveau
f.setSize(300,200); intermédiaire
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
Hello World
TestGraphiq.java
import javax.swing.*;
public class HelloWorld { Niveau
public static void main (String[] args) { supérieur
JFrame f = new JFrame("Hello World"); Composante de
JLabel label = new JLabel("Bonjour"); base
JPanel p = (JPanel)f.getContentPane();
p.add(label);
p.setBackground(java.awt.Color.white); Niveau
f.pack(); intermédiaire
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
Hello World
TestGraphiq.java
import javax.swing.*;
public class HelloWorld { Niveau
public static void main (String[] args) { supérieur
JFrame f = new JFrame("Hello World"); Composante de
JLabel label = new JLabel("Bonjour"); base
JPanel p = (JPanel)f.getContentPane();
p.add(label);
p.setBackground(java.awt.Color.white); Niveau
f.pack(); intermédiaire
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
Composition d’un fenêtre
Fenêtre principale
Barre de
Menu
ContentPa
ne (JPanel)
composition JFrame
Fenêtre principale
Barre de
Menu
ContentPa
ne (JPanel)
Conteneurs
Tool bar
Internal frame
Layered pane
Autres Composant de base
Progress
bar
Tool tip
Slider
Tree
22
Composantes de base
ØJButton.
ØJCheckBox.
ØJRadioButton.
ØJComboBox.
JList
ØJlist.
ØJTextField.
ØJlabel.
ØJTable.
JButton
ØChamp de texte
oJTextField jt = new JTextField(“Zone Texte”);
oString nom = jt.getText();
ojt.setText(nom);
JTextField
ØChamp de texte
oJTextField jt = new JTextField(“Zone Texte”);
oString nom = jt.getText();
ojt.setText(nom);
ojt.setColumns(nom.length());
oString x = jt.getSelectedText();
JmachinButton
ØJCheckBox
• cases à cocher
JmachinButton
ØJCheckBox
• cases à cocher
ØJRadioButton
• dans un groupe de boutons “radio”
JComboBox
Ø FlowLayout
Ø Place les composants de gauche à droite.
Ø CardLayout
Ø Superpose les composants.
Ø GridLayout
Ø Découpe en une grille régulière sur laquelle les
composants sont placés.
Ø GridBagLayout
Ø Découpe en une grille et place les composants sur une
ou plusieurs cases.
Ø BorderLayout
Ø Découpe en 5 régions: south, north, east, west, center.
Gestionnaires de placement
Ø FlowLayout
Ø Place les composants de gauche à droite.
Ø CardLayout
Ø Superpose les composants.
Ø GridLayout
Ø Découpe en une grille régulière sur laquelle les
composants sont placés.
Ø GridBagLayout
Ø Découpe en une grille et place les composants sur une
ou plusieurs cases.
Ø BorderLayout
Ø Découpe en 5 régions: south, north, east, west, center.
Gestionnaires de placement
Ø FlowLayout
Ø Place les composants de gauche à droite.
Ø CardLayout
Ø Superpose les composants.
Ø GridLayout
Ø Découpe en une grille régulière sur laquelle les
composants sont placés.
Ø GridBagLayout
Ø Découpe en une grille et place les composants sur une
ou plusieurs cases.
Ø BorderLayout
Ø Découpe en 5 régions: south, north, east, west, center.
Gestionnaires de placement
Ø FlowLayout
Ø Place les composants de gauche à droite.
Ø CardLayout
Ø Superpose les composants.
Ø GridLayout
Ø Découpe en une grille régulière sur laquelle les
composants sont placés.
Ø GridBagLayout
Ø Découpe en une grille et place les composants sur une
ou plusieurs cases.
Ø BorderLayout
Ø Découpe en 5 régions: south, north, east, west, center.
Gestionnaires de placement
Ø FlowLayout
Ø Place les composants de gauche à droite.
Ø CardLayout
Ø Superpose les composants.
Ø GridLayout
Ø Découpe en une grille régulière sur laquelle les
composants sont placés.
Ø GridBagLayout
Ø Découpe en une grille et place les composants sur une
ou plusieurs cases.
Ø BorderLayout
Ø Découpe en 5 régions: south, north, east, west, center.
Problèmes de placement
260px
100px
200 px
140px
20px
Exemple JFrame
import java.awt.*;
import javax.swing.*;
public class Fenetre{
public static void main(String args[]){
// Créer un composant de niveau supérieur
// Créer un composant intermédiaire
// Créer des composants de base avec leurs tailles et
positions
// Ajouter ces derniers dans le composant intermédiaire
// Associer le composant inter. À la fenetre
// Afficher la fenetre
}
}
Exemple JFrame
import java.awt.*;
import javax.swing.*;
public class Fenetre{
public static void main(String args[]){
// Créer un composant de niveau supérieur
Jframe f = new Jframe ("Exemple Jframe");
// Créer un composant intermédiaire
P = new JPanel(); P.setLayout(null);
// Créer des composants de base avec leurs tailles et
positions
private JLabel Etiq1, Etiq2, EtiqR;
private JTextField ZText1;
private JTextField ZText2;
private JButton Bouton1;
Bouton1 = new JButton();
Bouton1.setBounds(new Rectangle(90, 85, 80, 20));
Bouton1.setText("X + Y");
}
}
Exemple JFrame
import java.awt.*;
import javax.swing.*;
public class Fenetre{
public static void main(String args[]){
// Créer un composant de niveau supérieur
Jframe f = new Jframe ("Exemple Jframe");
// Créer un composant intermédiaire sans
LayoutManager
P = new JPanel(); P.setLayout(null);
// Créer des composants de base avec leurs tailles et
positions
private JLabel Etiq1, Etiq2, EtiqR;
private JTextField ZText1;
private JTextField ZText2;
private JButton Bouton1;
Bouton1 = new JButton();
Bouton1.setBounds(new Rectangle(90, 85, 80, 20));
Bouton1.setText("X + Y");
}
}
Exemple JFrame
20px
// Créer des composants de base avec leurs tailles et
positions 80px
private JLabel Etiq1, Etiq2, EtiqR;
private JTextField ZText1;
private JTextField ZText2;
private JButton Bouton1;
Définir la taille
Bouton1 = new JButton();
et position du
Bouton1.setBounds(90, 85, 80, 20);
Bouton1.setText("X + Y"); bouton Bouton1
…
}
}
Associer événement au bouton
Associer un
événement au
bouton
Événement
NomComp.addXXXListener(new java.awt.event.XXXAdapter() {
public void xxxYYY(java.awt.event.XXXEvent e){
// Liste des actions à exécuter
……
}
});
Ø Faut changer la valeur de xxx par Mouse/Key,
Ø Faut changer YYY par le type d’événement détectable :
Clicked, Pressed, Released, Entered, Exited
Événement
NomComp.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e){
// Liste des actions à exécuter
……
}
});
Exemple JFrame
Bouton1.addMouseListener(new
java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent e)
{
System.out.println(“Bouton clic !!");
}
});
Exemple JFrame
Bouton1.addMouseListener(new
java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent e)
{
System.out.println(“Bouton clic !!");
}
}); En cas de clic sur bouton,
Afficher dans console le
message
‘Bouton clic !!’
Exemple JFrame
Bouton1.addMouseListener(new
java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent e)
{
…
}
});
Bouton1.addMouseListener(new
java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent e)
{
EtiqR.setText(ZText1.getText() + ZText2.getText());
}
});
Exemple JFrame
Bouton1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent e) {
int Resultat =
Integer.parseInt(ZText1.getText())+Integer.parseInt(ZText2.getText());
EtiqR.setText(Resultat);
}
});
Exemple JFrame
Bouton1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent e) {
int Resultat =
Integer.parseInt(ZText1.getText())+Integer.parseInt(ZText2.getText());
EtiqR.setText(Resultat+””);
}
});
JMenu
25 ans
Simulation crédit: amélioration (1)
À chaque fois que l’utilisateur change le taux, la durée, ou le montant à
emprunter, la valeur de la mensualité devrait s’actualiser
automatiquement, sans avoir à recliquer sur le bouton ‘Calculer’.
Ainsi, il faut associer différents écouteurs pour divers événements, qui
devraient être associés au JTextField, au JSpinner et aussi au JSlider.
25 ans
Simulation crédit : amélioration (2)
On distingue entre trois types de demandeur de crédit : un client à
risque (mensualité >50% du salaire), un client à moyen risque
(mensualité>30% du salaire) et un client sans risque lorsque la mensualité
calculée est inférieur à 1/3 du salaire. Ainsi, on ajoute un champ de texte
pour permettre à l’utilisateur de spécifier son salaire, afin qu’on puisse
afficher la mensualité en Rouge si client à risque, Orange pour client à
risque moyen et Vert dans le dernier cas.
25 ans
Simulation crédit : amélioration (3)
Au fur et à mesure que le client saisisse la valeur du montant à
emprunter, la valeur de la mensualité devrait être calculée, sans avoir à
cliquez sur un des autres composants graphiques (JButton, JSpinner,
JSlider,…). Pour optimiser le calcul, on ne commencera à calculer la
valeur de la mensualité que devrait payer le client qu’à partir d’un
montant de 5chiffres (valeur minimale du montant à considérer : 10000
Drhms).
25 ans
Editeur de factures
On désire proposer une application qui devrait aider une secrétaire à
élaborer des factures, en spécifiant la liste des articles, leurs prix
unitaires, leurs quantités. Ainsi, l’application devrait calculer le prix total
de chaque article, ainsi que le prix total que devrait payer le client. La
date de la facture peut aussi être choisie depuis l’interface.
22/02/2020 36137
Editeur de factures (2)
Il faudrait proposer à l’utilisateur la possibilité de supprimer une ligne
depuis le tableau. Ainsi, un bouton permet de supprimer la ligne
sélectionnée sur la tableau. Si jamais aucun ligne n’a été sélectionnée,
une boite de dialogue demande à l’utilisateur de saisir l’indice d’une
ligne, et de la supprimer depuis le tableau.
2
Factures: signature et impression (3)
22/02/2020 36137