Académique Documents
Professionnel Documents
Culture Documents
Redouane EZZAHIR
red.ezzahir@gmail.com
utilisateurs d'interagir
avec des appareils
lectroniques travers
des icnes graphiques
et des indicateurs
visuels, par opposition
aux interfaces bases
sur le texte qui exigent
de taper des
commandes sur un
clavier.
Source de limage:
http://www.titou.net/tendance-ux-trop-interfacestue-interface-utilisateur/
OK
Cancel
App2
OK
App2 code:
Cancel
App1
event
loop
Window
System
input
device
event
loop
Quelle
app?
App2
event
loop
quel
callback?
OKbtn_click()
{
do stuff;
}
OKbtn_mouseover()
{
do more stuff;
}
CancelBtn_click()
{
do different stuff;
}
lvnement
Par exemple lcouteur du bouton Exit
1.
2.
1. addMouseListener( )
click
myMouseListener
JButton1
2. mouseClicked( )
Deux API
AWT(Abstract Window Toolkit, JDK 1.1)
Swing(JDK 1.2)
Swing et AWT font partie de JFC(Java
Lapproche de lAWT
Le plus petit dnominateur Commun
Si non disponible en natif sur lune des plate-forme
composants
Inconsistances dans les implmentations
Interfaage avec la plate-forme native => erreur
Lapproche de Swing
Ensemble plus Riche de Composants
Remplace lAWT
Ajoute des composants plus complexes
Modle-Vue-Contrleur
Sparation claire entre les donnes du programme et
Architecture Swing
Une application est compose de plusieurs Swing :
Un composant top-level
Composant de GUI
En Java:
Composant de GUI = class
Proprits
Mthodes
Evnements
JButton
Le composant JComponent
Tous les composants Swing hritent de
JComponent
Les composants ont des Tool Tips
Les composants ont des bordures
Entit graphique la plus abstraite
Top-Level
Swing propose 3 composants top-level:
JFrame, JDialog et JApplet
JWindow est aussi top-level mais il nest pas utilis
JInternalFrame ressemble un top-level mais il nen est pas un
Une application graphique doit avoir un composant
top-level comme composant racine (composant qui inclus tous les
autres composants)
Top-Level
Les composants top-level possdent un content pane qui contient tous les
composants visibles dun top-level
Un composant top-level peut contenir une barre de menu
JFrame
Une JFrame est une fentre avec un titre
et une bordure
Quelques mthodes :
public JFrame();
public JFrame(String name);
public Container getContentPane();
public void setJMenuBar(JMenuBar menu);
public void setTitle(String title);
public void setIconImage(Image image);
JDialog
Un JDialog est une fentre qui a pour but un change dinformation
Un JDialog dpend dune fentre, si celle-ci est dtruite, le JDialog lest aussi
Un JDilaog peut aussi tre modal, il bloque tout les inputs sur lui
Conteneur Intermdiaire
Les conteneur intermdiaire sont utiliss
Conteneur Intermdiaire
Swing propose plusieurs conteneurs intermdiaire:
JPanel
JScrollPane
JSplitPane
JTabbedPane
JToolBar
...
JPanel
Le JPanel est le conteneur intermdiaire le plus neutre
On ne peut que choisir la couleur de fond
JScrollPane
Un JScrollPane est un conteneur qui offre des ascenseurs, il
permet de visionner un composant plus grand que lui
Quelques mthodes:
public JScrollPane(Component comp);
public void setCorner(String key,Component comp);
JSplitPane
Un JSplitPane est un panel coup en deux par une barre de
sparation. Un JSplitPane accueil deux composants.
Quelques Mthodes :
public JSplitPane(int ori, Component comp, Component c);
public void setDividerLocation(double pourc);
JTabbedPane
Un JTabbedPane permet davoir des onglets
Quelques mthodes :
public JTabbedPane();
public void addTab(String s, Icon i, Component c, String s);
public Component getSelectedComponent();
JToolBar
Une JToolBar est une barre de menu
Quelques Mthodes :
public JToolBar();
public Component add(Component c);
public void addSeparator();
JRootPane
En principe, un JRootPane est obtenu partir dun top-level ou dune
JInternalFrame
JLayeredPane
Un JLayeredPane permet de positionner les composants
dans un espace trois dimensions
JInternaleFrame
Un JInternaleFrame permet davoir des petites fentres
dans une fentre.
Une JInternaleFrame ressemble trs fortement une
JFrame mais ce nest pas un container Top-Level
Les boutons
Java propose diffrent type de boutons:
Le bouton classique est un JBouton.
JCheckBox pour les case cocher
JRadioBouton pour un ensemble de bouton
JMenutItem pour un bouton dans un menu
JCheckBoxMenuItem
JRadioButtonMenuItem
JToggleButton Super Classe de CheckBox et Radio
JComboBox
Un JComboBox est un composant permettant de faire un
choix parmi plusieurs propositions.
Quelques mthodes:
public JComboBox(Vector v);
public JComboBox(ComboBoxModel c);
Object getSelectedItem();
void addItem(Object o);
JList
Une JList propose plusieurs lments rangs en colonne.
Une JList peut proposer une slection simple ou multiple
Les JList sont souvent contenues dans un srolled pane
Quelques mthodes:
public JList(Vector v);
public JList( ListModel l);
Object[] getSelectedValues();
JSlider
Les JSlider permettent la saisie graphique dun nombre
Un JSlider doit contenir les bornes max et min
Quelques mthodes:
public JSlider(int min ,int max, int value);
public void setLabelTable(Dictionary d);
JTextField
Un JTextField est un composant qui permet dcrire du
texte.
Un JTextField a une seul ligne contrairement au JTextArea
Le JPasswordField permet de cacher ce qui est crit
Quelques mthodes:
public JTextField(String s);
public String getText();
JLabel
Un JLabel permet dafficher du texte ou une image.
Un JLabel peut contenir plusieurs lignes et il comprend les
tag HTML.
Quelques mthodes:
public JLabel(String s);
public JLabel(Icon i);
Les menu
Si on a une barre de menu JMenuBar, on ajoute des JMenu dans la
barre.
Les JMenu et le JPopupMenu ont le mme mode de fonctionnement,
crer des JMenuItem et les ajouter.
Ex:
JTree
Un JTree permet dafficher des informations sous forme darbre. Les nuds
de larbre sont des objets qui doivent implanter linterface MutableTreeNode.
Une classe de base est propose pour les nuds : DefaultMutableTreeNode.
Pour construire un arbre il est conseill de passer par la classe TreeModel qui est la
reprsentation abstraite de larbre.
JFileChooser
Un JFileChooser permet de slectionner un fichier en parcourant
larborescence du systme de fichier.
Ex :
JFileChooser fc = new JFileChooser();
int returnVal = fc.showOpenDialog(aFrame);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
}
JColorChooser
Un JColoChooser permet de choisir une couleur
Une mthode :
public static Color showDialog(Component c , String title , Color initialColor);
JProgressBar
Un JProgressBar permet dafficher une barre de
progression.
Quelques mthodes :
public JProgressBar();
public JProgressBar(int min, int max);
public void setValue(int i);
Configuration
Proprits:
Methods:
Lajout un panneau
panel.add(b);
Lobservation (coute-lui)
Evnements: couteurs (Listeners)
JButton
http://www.cs.duke.edu/csl/docs/java/demo/jfc/SwingSet2/
http://www-igm.univ-mlv.fr/~paumier/IG/GuiExampleViewer.jar
Structure interne
JFrame
JFrame
JPanel
conteneurs
JButton
JLabel
JPanel
JButton
JLabel
Lordre est
important
Configure-le
Ajoute-lui ses fils (si conteneur)
Ajoute-le son parent (si pas JFrame)
coute-lui
1. La cration:
1. Fentre (Frame)
2. Panneau (Panel)
JLabel
JButton
3. composants (Components)
4. couteurs (Listeners)
JPanel
JFrame
Code
JFrame f = new JFrame("title");
JPanel p = new JPanel( );
JButton b = new JButton(press me);
p.add(b);
f.setContentPane(p);
f.show();
Code de lApplication
public class hello {
public static void main(String[] args){
JFrame f = new JFrame("title");
JPanel p = new JPanel();
JButton b = new JButton("press me");
p.add(b);// add button to panel
f.setContentPane(p);
// add panel to frame
f.show();
}
}
Positionnement des
composants
Les layout manager
positionnement.
FlowLayout
none,
programmer
sets x,y,w,h
Left to right,
Top to bottom
BorderLayout
n
w
c
s
CardLayout
Un seul la fois
GridLayout
GridBagLayout
JButton
BorderLayout
Le BorderLayout spare un container en cinq zones: NORTH,
SOUTH, EAST, WEST et CENTER
Lorsque lon agrandit le container, le centre s'agrandit. Les autres zone
prennent uniquement lespace qui leur est ncessaire.
Ex :
Container contentPane = getContentPane();
contentPane.setLayout(new BorderLayout());
contentPane.add(new JButton("Button 1 (NORTH)"), BorderLayout.NORTH);
BoxLayout
Un BoxLayout permet dempiler les composants du container (soit de
verticalement, soit horizontalement)
Ce layout essaye de donner chaque composant la place quil
demande
Il est possible de rajouter des blocs invisible.
Il est possible de spcifier lalignement des composants (centre,
gauche, droite)
CardLayout
Un CardLayout permet davoir plusieurs conteneurs ; les
uns au dessus des autres (comme un jeux de cartes).
Ex :
JPanel cards;
final static String BUTTONPANEL = "JPanel with JButtons";
final static String TEXTPANEL = "JPanel with JTextField";
cards = new JPanel();
cards.setLayout(new CardLayout());
cards.add(p1,BUTTONPANEL);
cards.add(p2,TEXTPANEL);
FlowLayout
Un FlowLayout permet de ranger les composants dans une
ligne. Si lespace est trop petit, une autre ligne est cre.
Le FlowLayout est le layout par dfaut des JPanel
Ex :
Container contentPane = getContentPane();
contentPane.setLayout(new FlowLayout());
contentPane.add(new JButton("Button 1"));
contentPane.add(new JButton("2"));
contentPane.add(new JButton("Button 3"));
contentPane.add(new JButton("Long-Named Button 4"));
contentPane.add(new JButton("Button 5"));
GridLayout
Un GridLayout permet de positionner les composants sur
une grille.
Ex:
Container contentPane = getContentPane();
contentPane.setLayout(new GridLayout(0,2));
contentPane.add(new JButton("Button 1"));
contentPane.add(new JButton("2"));
contentPane.add(new JButton("Button 3"));
contentPane.add(new JButton("Long-Named Button 4"));
contentPane.add(new JButton("Button 5"));
GridBagLayout
Le GridBagLayout est le layout le plus complexe. Il place les composants sur une grille,
mais des composants peuvent tre contenus dans plusieurs cases.
Pour exprimer les proprits des composants dans la grille, on utilise un
GridBagConstraints.
Un GridBasConstraints possde :
gridx, gridy pour spcifier la position
gridwidth, gridheight pour spcifier la place
fill pour savoir comment se fait le remplissage
Ex :
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
JPanel pane = new JPanel();
pane.setLayout(gridbag);
gridbag.setConstraints(theComponent, c);
pane.add(theComponent);
Cration de Layout
Il est possible de construire son propre
Layout
Un layout doit implanter linterface
java.awt.LayoutManager ou
java.awt.LayoutManager2
Combinaisons
JButton JButton
JTextArea
Combinaisons
JButton
n
JFrame
JButton
JPanel: FlowLayout
JPanel: BorderLayout
c
JTextArea
press me
Code: FlowLayout
Affecter le layout managerr avant lajout
des components
JFrame f = new JFrame("title");
JPanel p = new JPanel();
JButton b = new JButton("press me");
FlowLayout L = new FlowLayout( );
JButton b1 = new JButton("press me");
JButton b2 = new JButton("then me");
p.setLayout(L);
p.add(b1);
p.add(b2);
f.setContentPane(p);
vous de jouer !
Applets
les applets sont charges partir d'une page
</APPLET>
Exemple :
<applet code="MyApplet.class" width=100 height=140>
</applet>
Applets
JApplet est comme un JFrame
JApplet
import javax.swing.*;
public class monApplet extends JApplet {
public void init(){
JButton b = new JButton("press me");
getContentPane().add(b);
}
}
contentPane
JButton
Applet Methods
Appeles par le browser:
init( ) - initialisation (lance au moment o
Application + Applet
public class helloApplet extends
JApplet {
public void init(){
// put my mainPanel in the Applet
mainPanel p = new mainPanel();
getContentPane().add(p);
}
}
// my main GUI is in here:
class mainPanel extends JPanel {
mainPanel(){
setLayout(new FlowLayout());
JButton b = new JButton("press me");
add(b);
}
}
Command line
Browser
JFrame ou
JApplet
contentPane
JPanel
JButton
client
De crer une connexion vers un ordinateur
autre que celui d'o vient l'applet
Dcouter, accepter des connexions d'un port
du systme local.
de crer une fentre "top-level" sans indique
qu'elle provient d'une applet.
la pratique
Ouf !
Par quoi vais-je commencer ?