Cours programmation par objets et Java (Les composants d’interfaces), tutoriel & guide de travaux pratiques en pdf.
Les composants d’interfaces
Principes
On place des composants dans des containers (Panel, Window, Frame, etc..). On les déclare dans les containers et on les ajoute avec la méthode add(Component) qui les place en fonction du layoutManager (voir plus loin).
Les composants savent s’afficher et recevoir des événements (voir plus loin).
Tous ces composants héritent de Component.
Hiérarchie des composants d’interface
Attention, il y a de nouveau composants d’interface, plus complets, les Swing (on les développera ensuite).
Component
Classe abstraite qui est responsable des comportements génériques de l’ensemble de l’interface. Elle fournit:
Ce qu’apportent les composants (les sous-classes donc de Component):
• Un support graphique: paint(), update(), repaint()
• Gestion d’événements (par transfert vers un listener)
• L’apparence: fontes (get, set the current font) et couleur
(setForeground(Color), getForeground(), setBackground(Color), and
getBackground(). The foreground color is the color used for all text in the component, as well as for any custom drawing the component performs. The background color is the color behind the text or graphics. For the sake of readability, the background color should contrast with the foreground color.
• Taille et position (géré par l’intermédiaire du Layout, cf. plus loin). preferredSize() and minimumSize() methods allow a component to inform layout managers of the component’s preferred and minimum sizes.
Component also provides methods that get or set (subject to layout manager oversight) the component’s current size and location.
Button
Bouton traditionnel. Sur lequel on clique normalement. Principe général on utilise le modèle événementiel, en indiquant la commande qui peut être utilisée.
Voici un bout de code qui « enable » un bouton (exemple tiré du tutoriel de Sun):
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.applet.Applet;
public class ButtonDemo extends Applet
implements ActionListener {
Button b1, b2, b3;
static final String DISABLE = « disable »; static final String ENABLE = « enable »;
public void init() {
b1 = new Button();
b1.setLabel(« Disable middle button »);
b1.setActionCommand(« disable »);
b2 = new Button(« Middle button »);
b3 = new Button(« Enable middle button »);
b3.setEnabled(false);
b3.setActionCommand(« enable »);
//Listen for actions on buttons 1 and 3.
b1.addActionListener(this);
b3.addActionListener(this);
//Add Components to the Applet, using the default FlowLayout.
add(b1);
add(b2);
add(b3);
}
public void actionPerformed(ActionEvent e) { String command = e.getActionCommand();
if (command == DISABLE) { //They clicked « Disable middle button » b2.setEnabled(false);
b1.setEnabled(false);
b3.setEnabled(true);
} else { //They clicked « Enable middle button » b2.setEnabled(true);
b1.setEnabled(true);
b3.setEnabled(false);
}
}
}
Checkbox
Permet de valider ou non une propriété. Si on veut qu’ils soient mutuellement exclusifs, on les place dans un checkboxGroup, et ils on alors l’apparence d’un « bouton radio ».
Exemple du tutoriel de Sun:
import java.awt.*;
import java.applet.Applet;
public class CheckboxDemo extends Applet {
public void init() {
Panel p1, p2;
Checkbox cb1, cb2, cb3; //independent checkboxes
Checkbox cb4, cb5, cb6; //only one of these three can be selected CheckboxGroup cbg;
//Build first panel, which contains independent checkboxes
cb1 = new Checkbox();
cb1.setLabel(« Checkbox 1 »);
cb2 = new Checkbox(« Checkbox 2 »);
cb3 = new Checkbox(« Checkbox 3 »);
cb3.setState(true);
p1 = new Panel();
p1.setLayout(new FlowLayout());
//Using a GridLayout didn’t work–kept box and text too far
apart.
p1.add(cb1);
p1.add(cb2);
p1.add(cb3);
//Build second panel, which contains a checkbox group cbg = new CheckboxGroup();
cb4 = new Checkbox(« Checkbox 4 », cbg, false); cb5 = new Checkbox(« Checkbox 5 », cbg, false); cb6 = new Checkbox(« Checkbox 6 », cbg, false); p2 = new Panel();
p2.setLayout(new FlowLayout());
p2.add(cb4);
p2.add(cb5);
p2.add(cb6);
//Add panels to the Applet.
setLayout(new GridLayout(0, 2));
add(p1);
add(p2);
validate();
}
}
Choice
Fonctionne comme des « comboBox » de Windows.
• Ajout des items (qui doivent être des String) avec addItem(String).
• Récupération de l’index sélectionné par getSelectedIndex().
• Récupération de l’item (donc la chaîne sélectionnée) par getSelectedItem().
• int countItems() : retourne le nombre d’items dans le Choice.
• String getItem(int) : retourne la chaîne correspondant à l’index spécifié.
• void select(int) et void select(String): sélectionne l’item correspondant à l’index ou à la chaîne de caractère.
Exemple de Sun:
import java.awt.*;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
import java.applet.Applet;
public class ChoiceDemo extends Applet implements ItemListener {
Choice choice; //pop-up list of choices Label label;
public void init() {
choice = new Choice();
choice.addItem(« ichi »);
choice.addItem(« ni »);
choice.addItem(« san »);
choice.addItem(« yon »);
choice.addItemListener(this);
label = new Label(); setLabelText(choice.getSelectedIndex(),
choice.getSelectedItem());
//Add components to the Applet.
add(choice);
add(label);
}
void setLabelText(int num, String text) { label.setText(« Item # » + num + » selected. »
+ « Text = \ » » + text + « \ ». »);
}
public void itemStateChanged(ItemEvent e) { setLabelText(choice.getSelectedIndex(), choice.getSelectedItem());
}
}
Label
Les « labels » sont de simples chaînes de caractères qui ne peuvent pas être éditées.
Méthodes pratiques:
• setText(String) et getText() qui associe une chaîne à un label et qui retourne ce texte.
• getAlignment et setAlignment qui permettent de manipuler l’alignement du texte dans la chaîne (LEFT (par défaut), CENTER, RIGHT).
1. Graphisme en Java
1.1 Dessin « à la main »
2. Le nouveau modèle de gestion des événements
2.1 Table des gestionnaires d’événéments dans 1.1
3. Les composants d’interfaces
3.1 Principes
3.2 Hiérarchie des composants d’interface
3.3 Component
3.4 Button
3.5 Checkbox
3.6 Choice
3.7 Label
3.8 List
3.9 Panel et Applet
3.10 TextArea et TextField
3.11 Frame et Dialog
3.12 Canvas
3.13 Gestionnaires de présentation (layout managers)
3.14 Dialogues