Interface graphique
⇑Les fenêtres
⇑Superpositions
JFrame définit une une fenetre
qui contiendra des panneaux JPanel panneau=new JPanel() qui contiendront
des boutons JButton, des champs textuels JTextField, et sur lesquels on pourra dessiner.
Les disposition seront gérées par les layout manager spécialisés.
⇑Fenêtre
Définition : JFrame fenetre=new JFrame();
Taille : fenetre.setSize(400,100);
redimensionnable par cliquer tirer : fenetre.setResizable(false);
Fermeture propre : fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
rendre visible fenetre.setVisible(true);
Tous les contenus de la fenetre sont posés sur le contentPan.
Pour y accéder : fenetre.getContentPane();
Pour y attacher un panneau donné : fenetre.setContentPane(panneau) où
JPanel panneau=new JPanel() a été défini par ailleurs.
⇑Panneau
On définit un panneau JPanel panneau=new JPanel()
sur lequel on peut poser différents objets par panneau.add(objet);.
Leur disposition est gérée par les layout
⇑Disposition
A la suite les un des autres (passage à la ligne automatique) :
FlowLayout disposition = new FlowLayout();
panneau.setLayout(disposition);
ou panneau.setLayout( new FlowLayout());
En grille (régulière) GridLayout disposition = new GridLayout(lignes,colonnes,ecartLignes,ecartColonne);
les cases de la grille étant remplies ligne par par ligne
Bords (North, South, East, West) et centre (Center)
BorderLayout disposition = new BorderLayout();
panneau.setLayout(disposition);
JButon bouton = new JButon("+");
this.add("North", bouton);
BoxLayout (présentation en lignes ou colonnes)
CardLayout (présentation en pile)
GridBagLayout (présentation en grille composite)
SpringLayout (présentation avec ressorts)
et l'on peut combiner les différentes disposition en combinant différents panneaux
exemple :
public class Panneau extends JPanel{
public Panneau() {
BorderLayout disposition = new BorderLayout();
this.setLayout(disposition);
// définition d'une zone texte au nord
JPanel zoneTexte = new JPanel();
zoneTexte.setLayout(new FlowLayout());
JLabel titre = new JLabel("leTitre :");
JTextField entree = new JTextField(10);
zoneTexte.add(titre);
zoneTexte.add(entree);
this.add("North", zoneTexte);
//définition d'une zone de boutons au centre
JPanel zoneBoutons = new JPanel();
zoneBoutons.setLayout(new GridLayout(3,3,5,5));
JButton[] boutons = new JButton[9];
for (int i=0;i<9;i++){
boutons[i]=new JButton(""+i);
zoneBoutons.add(boutons[i]);
}
this.add("Center", zoneBoutons);
}
}
ce qui donne :
Enfin, pour gérer soi même dimension et placement :
JPanel panneau= new JPanel();
panneau.setBounds(x,y,w,h);
⇑Les objets
Boutons : JButton
Zone de texte : JTextField
Titres JLabel ou icones.
etc ... Références
⇑graphiques
- Un Graphics est une classe qui permet de dessiner "sur quelque chose". L'implémentation dépendra du "quelque chose" (l'écran, une image de type BufferedImage, un raster SVG, etc)
- l'instance de Graphics sera passée en paramètre à la méthode paintComponent
(c'est la JFrame en réalité qui fournira le graphics, qui proviendra du windows manager système de ton OS)
- Tout les JComponent on une méthode paintComponent. Mais tout dépend de "sur quoi" vous désirez dessiner pour savoir comment le récupérer .
public class Cadre extends JPanel {
public void paintComponent(Graphics g){
g.setColor(Color.RED);
Rectangle r=g.getClipBounds();
g.fillRect(0,0,r.width,r.height);
g.setColor(Color.BLACK);
g.drawString("HelloWord",10,10);
for (int i=1;i<3;i++){
g.drawLine(i*r.width/3,0,i*r.width/3,r.height);
g.drawLine(0,i*r.height/3,r.width,i*r.height/3);
}
}
}
dessine un cadrillage sur un panneau définit par Cadre panneau=new Cadre()
⇑Evénements
⇑Contexte
Pour qu'un objet puisse capter un événement, il faut lui implanter des écouteurs.
Les actions à produire peuvent être définies
dans la classe de l'objet lui même
public class Beeper ... implements ActionListener {
...
//where initialization occurs:
button.addActionListener(this);
...
public void actionPerformed(ActionEvent e) {
...//Make a beep sound...
}
}
ou dans une classe propre.
Les méthodes associés à l'écouteur devront alors être implantées.
⇑ActionListener
Une seule méthode est à implanter : actionPerformed(ActionEvent evt)
Pour connaître la source de l'action : Object source = evt.getSource();
Pour connaître le type de la source if (source instanceof JButton){...}
Pour accèder à l'objet dans le bon format : boutonClique = (JButton) source;
Pour avoir le texte d'un bouton ou d'une zone de texte :boutonClique.getText();
Pour produire l'action défnie dans la classe Actions au clic sur la source
Actions aFaire = new Actions();
...
boutons[i].addActionListener(aFaire);
la classe Actions pouvant spécifier les action à produire suivant la source.
Pour récupérer la source du clic :Object source = evt.getSource();
la classe Actions :
public class Actions implements ActionListener {
public void actionPerformed(ActionEvent evt) {
JTextField champTexte= null;
JButton boutonClique = null;
Object source = evt.getSource();
if (source instanceof JButton) {
boutonClique = (JButton) source;
String texteBouton = boutonClique.getText();
JOptionPane.showConfirmDialog(null,
"clic sur "+texteBouton,
"Attention",
JOptionPane.PLAIN_MESSAGE);
}
else if (source instanceof JTextField) {
champTexte = (JTextField) source;
String texteBouton = champTexte.getText();
JOptionPane.showConfirmDialog(null,
"texte : "+texteBouton,
"Attention",
JOptionPane.PLAIN_MESSAGE);
}
}
}