26.16 Composants légers (Ligthweight)
Java possède plusieurs types de widgets:
- Button :
- un bouton à cliquer
Nous avons déjà rencontré ce type de widget; il s'agit d'un bouton
etiquetté. Un bouton émet le signal
lorsque l'utilisateur presse sur le bouton.
- Checkbox :
- bouton à cocher etiquetté.
- Choices :
- menu déroulant.
- List :
- menu défilant.
- MenuItem :
- items de la barre de menu.
- Canvas :
- zone vierge sur laquelle on peut dessiner
ou inclure d'autres
widgets.
- Scrollbar :
- Asscenceurs et glissières
- TextField :
- zone de texte sur une ligne
- TextArea :
- zone de texte multi lignes
- etc.
Avant d'examiner en détail chacun de ses widgets, voici un exemple,
provenant du tutorial de jdk , réunissant une certain nombre de widgets.
Tous les widgets que nous pouvons utiliser sont toutes dérivée de la classe
abstraite Component. Par exemple, la classe Button
est une classe dérivée de la classe Component.

Les composants graphiques sont généralement organisés de manière
hiérarchique: un composant principal contient d'autres composant
qui, à leur tout, peuvent contenir d'autres composants et ainsi de suite.
Parmis tous les composants graphiques, seuls les composants de
type Container sont susceptibles de contenir d'autres composants.
La classe Container est elle-même dérivée de la classe
Component comme le montre la figure 26.2
Un composant s'ajoute dans un container avec la méthode
add de la classe Component.
public Component add(Component comp)
public Component add(String name, Component comp)
public Component add(Component comp, int index)
public void add(Component comp, Object constraints)
public void add(Component comp, Object constraints, int index)
protected void addImpl(Component comp, Object constraints, int index)
|
En tant que classe abstraite, il n'est pas permis de créer
des instances de cette classe.
La classe Component factorise à un certain nombre
de propriétés et comportements communs à tous les widgets:
La posibilité de se dessiner à l'écran est une fonctionnalité commune à tous les composants.
Les composants des applications graphiques doivent pouvoir
se dessiner et se redessiner. Lorsqu'un composant nécessite
de se dessiner ou redessiner,
le composant principal commence par se dessiner. Puis, il
dessine un à un tous les composants qu'il contient et ce de
manière récursive et sans aucune interruption.
Nous consacrerons un chapitre complet aux problèmes liés à l'affichage.
La position et des dimensions d'un composant dans une fenêtre
sont généralement gérés par le gestionnaire de placement
(Layout Manager ).
Les méthodes getPreferredSize et getMinimumSize
informent ce gestionnaire des contraintes que l'on se fixe
sur la taille du composant.
En l'abscence de ces précisions, le gestionnaire décidera
tout seul de la configuration des composants.
Il existe plusieurs stratégie de placement possible; à chacune
d'elle correspond un gestionnaire particulier. Nous verrons ces
différents gestionnaire dans un chapitre suivant.
En attendant, dans les exemples à venir, on utilisera toujours
le gestionnaire FlowLayout.
Commençons une première applet qui contient un bouton pemettant
d'ouvrir une fenêtre dans laquelle se trouve trois boutons.
- création de l'applet avec un premier bouton
public class Exemple1 extends Applet implements ActionListener {
Button b;
DesBoutons fenetre;
|
- création du bouton pour ouvrir une nouvelle fenêtre
public void init() {
b = new Button("Cliquez ici pour ouvrir/fermer une fenetre");
add(b);
|
- création de la fenêtre dans laquelle se trouve trois boutons
fenetre = new DesBoutons("Des boutons");
|
- Attente du clic sur ce bouton
b.addActionListener(this);
}
|
- gestion du clic
public void actionPerformed(ActionEvent e) {
if (! fenetre.isShowing()) fenetre.setVisible(true);
else fenetre.setVisible(false);
}
}
|
- Définition de fenêtre avec les trois boutons
class DesBoutons extends Frame {
public DesBoutons(String s) {
super(s);
setLayout(new FlowLayout());
Button b[] = {new Button("Bouton 1"), new Button("Bouton 2"), new Button("Bouton 3")};
add(b[0]); add(b[1]); add(b[2]);
pack();
|
- Gestion de la fermeture de la fenêtre
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { setVisible(false); }
});
}
}
|
Comme nous l'avons déjà dit, une applet est une application
graphique et bien de initialisations nécessaires pour une
application graphique autonome sont faites par défaut dans
la classe Applet.
Voyons comment faire pour transformaer cette applet
en application autonome.
Ce qui nous manque c'est la fenêtre principale dans
laquelle s'inscrit notre applet. Ainsi, pour transformer notre
applet en application autonome, il nous faut créer cette fenêtre principale:
import java.awt.*;
import java.awt.event.*;
public class Appli extends Frame implements ActionListener {
DesBoutons fenetre;
public Appli() {
setLayout(new FlowLayout());
setTitle("Application Autonome");
Button b = new Button("Cliquez ici pour ouvrir/fermer une fenetre");
b.addActionListener(this);
add(b);
fenetre = new DesBoutons("Des boutons");
pack();
show();
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { System.exit(0); }
});
}
public static void main(String args[]) {
Appli window = new Appli();
}
public void actionPerformed(ActionEvent e) {
if (! fenetre.isShowing()) fenetre.setVisible(true);
else fenetre.setVisible(false);
}
}
|
Les composants de AWT (Abstract Window Toolkit) sont conçus
pour être indépendant des plateformes; i.e. le même code tourne
sur tous les plates formes. Un bouton AWT sun Windows ressemble à un
bouton Windows et ce même code exécuter sur un Macintosh donne au
bouton l'apparence d'un bouton Macintosh .
Autrement dit, si le code du programmeur reste le même quelque
soit la plate forme, l'implantation fournie pour AWT ne l'est
pas. Ainsi, à chaque composant AWT correspond un objet
natif spécifique à chaque plate forme. Ce dernier est désigné par
le terme de Peers et correspond à une classe Java .
A la classe des boutons Java (java.awt.Button) est associée
la classe (java.awt.peer.PeerButton) et il en va de même pour rous
les composants de AWT .

Implantation des composants \emph{AWT}
A priori, le programmeur n'a pas à se soucier des objets
Peer . Tout ceci est bien caché derrière la classe
java.awt.component. Mais la clarification du mécanisme
des objets Peer permet de comprendre certaines limitations
imposées dans AWT .
A la création d'un composant (un bouton par exemple), le
constructeur de la classe Component demande à la classe
Toolkit de créer l'objet natif correspondant.
La classe Toolkit est une espèce d'atelier qui se charge
de la gestion de la création des objets natifs. Cette classe
Toolkit sert en quelque sorte de barrière de séparation
entre le monde idylique de Java et le monde réel où beaucoup de
choses dépendent de l'architecture, du système d'exploitation,
du gestionnaire graphique etc.
Au moment d'afficher un container, tous les composants sont
crées (Java et Peer ). Si un nouveau composant est ajouté
au container après qu'il ait été rendu visible, il faut
explicitement faire appel à la méthode validate pour que
le composant Peer soit créé. On peut faire appel à la
méthode validate
- de la classe du composant que l'on veut
ajouter
- ou
de la classe Container qui
contient le composant.
public abstract class Component extends Object
implements ImageObserver, MenuContainer, Serializable {
public static final float TOP_ALIGNMENT
public static final float CENTER_ALIGNMENT
public static final float BOTTOM_ALIGNMENT
public static final float LEFT_ALIGNMENT
public static final float RIGHT_ALIGNMENT
protected Component()
public String getName()
public void setName(String name)
public Container getParent()
public void setDropTarget(DropTarget dt) throws IllegalArgumentException, SecurityException
public DropTarget getDropTarget()
public final Object getTreeLock()
public Toolkit getToolkit()
public boolean isValid()
public boolean isVisible()
public boolean isShowing()
public boolean isEnabled()
public void setEnabled(boolean b)
public void setVisible(boolean b)
public void setForeground(Color c)
public Color getBackground()
public void setBackground(Color c)
public Font getFont()
public void setFont(Font f)
public Locale getLocale()
public void setLocale(Locale l)
public ColorModel getColorModel()
public Point getLocation()
public Point getLocationOnScreen()
public void setLocation(int x, int y)
public void setLocation(Point p)
public Dimension getSize()
public void setSize(int width, int height)
public void resize(Dimension d)
public Rectangle getBounds()
public void setBounds(int x, int y, int width, int height)
public void setBounds(Rectangle r)
public Dimension getPreferredSize()
public Dimension getMinimumSize()
public Dimension getMaximumSize()
public float getAlignmentX()
public float getAlignmentY()
public void doLayout()
public void validate()
public void invalidate()
public Graphics getGraphics()
public FontMetrics getFontMetrics(Font font)
public void setCursor(Cursor cursor)
public Cursor getCursor()
public void paint(Graphics g)
public void update(Graphics g)
public void paintAll(Graphics g)
public void repaint()
public void repaint(long tm)
public void repaint(int x, int y, int width, int height)
public void repaint(long tm, int x, int y, int width, int height)
public void print(Graphics g)
public void printAll(Graphics g)
public boolean imageUpdate(Image img, int flags, int x, int y, int w, int h)
public Image createImage(ImageProducer producer)
public Image createImage(int width, int height)
public boolean prepareImage(Image image, ImageObserver observer)
public boolean prepareImage(Image image, int width, int height, ImageObserver observer)
public int checkImage(Image image, ImageObserver observer)
public int checkImage(Image image, int width, int height, ImageObserver observer)
public boolean contains(int x, int y)
public boolean contains(Point p)
public Component getComponentAt(int x, int y)
public Component getComponentAt(Point p)
public final void dispatchEvent(AWTEvent e)
public void addComponentListener(ComponentListener l)
public void removeComponentListener(ComponentListener l)
public void addFocusListener(FocusListener l)
public void removeFocusListener(FocusListener l)
public void addKeyListener(KeyListener l)
public void removeKeyListener(KeyListener l)
public void addMouseListener(MouseListener l)
public void removeMouseListener(MouseListener l)
public void addMouseMotionListener(MouseMotionListener l)
public void removeMouseMotionListener(MouseMotionListener l)
public void addInputMethodListener(InputMethodListener l)
public void removeInputMethodListener(InputMethodListener l)
public InputMethodRequests getInputMethodRequests()
public InputContext getInputContext()
protected final void enableEvents(long eventsToEnable)
protected final void disableEvents(long eventsToDisable)
protected void processEvent(AWTEvent e)
protected void processComponentEvent(ComponentEvent e)
protected void processFocusEvent(FocusEvent e)
protected void processKeyEvent(KeyEvent e)
protected void processMouseEvent(MouseEvent e)
protected void processMouseMotionEvent(MouseEvent e)
protected void processInputMethodEvent(InputMethodEvent e)
public void addNotify()
public void removeNotify()
public void requestFocus()
public void transferFocus()
public void add(PopupMenu popup)
public void remove(MenuComponent popup)
protected String paramString()
public String toString()
public void list()
public void list(PrintStream out)
public void list(PrintStream out, int indent)
public void list(PrintWriter out)
public void list(PrintWriter out, int indent)
public void addPropertyChangeListener(PropertyChangeListener listener)
public void removePropertyChangeListener(PropertyChangeListener listener)
public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener)
public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener)
protected void firePropertyChange(String propertyName, Object oldValue, Object newValue)
}
|
public abstract class Container extends Component {
protected Container()
public int getComponentCount()
public Component getComponent(int n)
public Component[] getComponents()
public Insets getInsets()
public Component add(Component comp)
public Component add(String name, Component comp)
public Component add(Component comp, int index)
public void add(Component comp, Object constraints)
public void add(Component comp, Object constraints, int index)
protected void addImpl(Component comp, Object constraints, int index)
public void remove(int index)
public void remove(Component comp)
public void removeAll()
public LayoutManager getLayout()
public void setLayout(LayoutManager mgr)
public void doLayout()
public void invalidate()
public void validate()
protected void validateTree()
public Dimension getPreferredSize()
public Dimension getMinimumSize()
public Dimension getMaximumSize()
public float getAlignmentX()
public float getAlignmentY()
public void paint(Graphics g)
public void update(Graphics g)
public void print(Graphics g)
public void paintComponents(Graphics g)
public void printComponents(Graphics g)
public void addContainerListener(ContainerListener l)
public void removeContainerListener(ContainerListener l)
protected void processEvent(AWTEvent e)
protected void processContainerEvent(ContainerEvent e)
public Component getComponentAt(int x, int y)
public Component getComponentAt(Point p)
public void addNotify()
public void removeNotify()
public boolean isAncestorOf(Component c)
protected String paramString()
public void list(PrintStream out, int indent)
public void list(PrintWriter out, int indent)
}
|
A terminer
Nous avons déjà rencontré ce type de widget; il s'agit d'un bouton
etiquetté.
public class Button extends Component {
public Button()
public Button(String label)
public void addNotify()
public String getLabel()
public void setLabel(String label)
public void setActionCommand(String command)
public String getActionCommand()
public void addActionListener(ActionListener l)
public void removeActionListener(ActionListener l)
protected void processEvent(AWTEvent e)
protected void processActionEvent(ActionEvent e)
protected String paramString()
}
|
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class WBouton extends Applet implements ActionListener {
int milieu = 1;
Button b[] = { new Button("Desactiver bouton " + milieu ),
new Button("Tourner"),
new Button("Activer bouton " + milieu)
};
public void init() {
for (int i = 0; i < b.length; i++) b[i].addActionListener(this);
for (int i = 0; i < b.length; i++) add(b[i]);
b[milieu].setActionCommand("Tourner");
b[(milieu-1)%3].setActionCommand("Désactiver");
b[(milieu+1)%3].setActionCommand("Activer");
}
public void actionPerformed(ActionEvent e) {
String s;
System.out.println(((milieu-1)%3) + " " + milieu + " " + ((milieu+1)%3));
s = e.getActionCommand();
System.out.println(s);
if ("Désactiver".equals(s))
b[milieu].setEnabled(false);
else if ("Activer".equals(s))
b[milieu].setEnabled(true);
else {
milieu = (milieu+1)%3;
System.out.println(((milieu-1+3)%3) + " " + milieu + " " + ((milieu+1)%3));
b[milieu].setActionCommand("Tourner");
b[(milieu-1+3)%3].setActionCommand("Désactiver");
b[(milieu+1)%3].setActionCommand("Activer");
b[milieu].setLabel("Tourner");
b[(milieu-1+3)%3].setLabel("Desactiver bouton " + milieu);
b[(milieu+1)%3].setLabel("Activer bouton " + milieu);
doLayout();
}
}
public static void main(String[] args) {
Frame f = new Frame("Des boutons ...");
WBouton p = new WBouton();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { System.exit(0); }
});
p.init();
f.add(p);
f.setSize(350, 170);
f.pack();
f.show();
}
}
|
Les objets de la classe Frame sont des fenêtres graphiques que l'on
utilise dans les applets et les applications.
Comme nous l'avons déjà dit, toute application
graphique possède au moins un objet de type Frame.
public class Frame extends Window implements MenuContainer {
public Frame()
public Frame(String title)
public void addNotify()
public String getTitle()
public void setTitle(String title)
public Image getIconImage()
public void setIconImage(Image image)
public MenuBar getMenuBar()
public void setMenuBar(MenuBar mb)
public boolean isResizable()
public void setResizable(boolean resizable)
public void remove(MenuComponent m)
public void dispose()
protected String paramString()
}
|
Les objets de type Panel sont des containers.
Une applet est un Panel avec quelques
particularités pour pouvoir être exécutée dans
un Browser .
public class Panel extends Container {
public Panel()
public Panel(LayoutManager layout)
public void addNotify()
}
|
Par défaut, le gestion de placement FlowLayout
est associé aux Panel. On peut décider d'utiliser
un autre gestionnaire en le fournissant en argument du
constructeur ou en utilisant la méthode setLayout
de la classe Container.
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class WPanel extends Applet implements ActionListener {
Button b;
DesPanels fenetre;
public void init() {
b = new Button("Cliquez ici pour ouvrir/fermer une fenetre");
add(b);
b.addActionListener(this);
fenetre = new DesPanels("Des Panels");
}
public void actionPerformed(ActionEvent e) {
if (! fenetre.isShowing()) fenetre.setVisible(true);
else fenetre.setVisible(false);
}
public static void main(String[] args) {
Frame f = new Frame("Position et Dimensions");
WPanel p = new WPanel();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { System.exit(0); }
});
p.init();
f.add(p);
f.pack();
f.show();
}
}
class DesPanels extends Frame {
Dimension d = new Dimension(180, 150);
public DesPanels(String s) {
super(s);
setLayout(new FlowLayout());
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { setVisible(false); }
});
MesPanels [] p = new MesPanels[3];
Button b0 [] = {new Button("B1"), new Button("B2")};
Button b1 [] = {new Button("B3"), new Button("B4"), new Button("B5"), new Button("B6")};
Button b2 [] = {new Button("B7"), new Button("B8"), new Button("B9")};
p[0] = new MesPanels(b0, Color.red);
p[1] = new MesPanels(b1, Color.white);
p[2] = new MesPanels(b2, Color.cyan);
add(p[0]); add(p[1]); add(p[2]);
pack();
}
public Dimension getMinimumSize() {return d;}
public Dimension getPreferredSize() { return d;}
}
class MesPanels extends Panel {
Dimension d = new Dimension(150, 30);
public MesPanels(Button [] b, Color c) {
setBackground(c);
for (int i = 0; i<b.length; i++) add(b[i]);
}
public Dimension getMinimumSize() {return d;}
public Dimension getPreferredSize() { return d;}
}
|
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class WLabel extends Applet implements ActionListener {
Button b;
DesPanelsL fenetre;
public void init() {
b = new Button("Cliquez ici pour ouvrir/fermer une fenetre");
add(b);
b.addActionListener(this);
fenetre = new DesPanelsL("Des Panels");
}
public void actionPerformed(ActionEvent e) {
if (! fenetre.isShowing()) fenetre.setVisible(true);
else fenetre.setVisible(false);
}
public static void main(String[] args) {
Frame f = new Frame("Position et Dimensions");
WLabel p = new WLabel();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { System.exit(0); }
});
p.init();
f.add(p);
f.pack();
f.show();
}
}
class DesPanelsL extends Frame {
Dimension d = new Dimension(180, 150);
public DesPanelsL(String s) {
super(s);
setLayout(new FlowLayout());
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { setVisible(false); }
});
MesPanelsL [] p = new MesPanelsL[3];
Button b0 [] = {new Button("B1"), new Button("B2")};
Button b1 [] = {new Button("B3"), new Button("B4"), new Button("B5"), new Button("B6")};
Button b2 [] = {new Button("B7"), new Button("B8"), new Button("B9")};
p[0] = new MesPanelsL(b0, Color.red, "Rouge");
p[1] = new MesPanelsL(b1, Color.white, "Blanc");
p[2] = new MesPanelsL(b2, Color.cyan, "Turquoise");
add(p[0]); add(p[1]); add(p[2]);
pack();
}
public Dimension getMinimumSize() {return d;}
public Dimension getPreferredSize() { return d;}
}
class MesPanelsL extends Panel {
Dimension d = new Dimension(150, 30);
public MesPanelsL(Button [] b, Color c, String s) {
Label l;
setBackground(c);
add(l=new Label(s));
l.setAlignment(Label.RIGHT);
for (int i = 0; i<b.length; i++) add(b[i]);
}
public Dimension getMinimumSize() {return d;}
public Dimension getPreferredSize() { return d;}
}
|
zone de texte sur une ligne et multi ligne
public class TextComponent extends Component {
protected transient TextListener textListener
public void removeNotify()
public void setText(String t)
public String getText()
public String getSelectedText()
public boolean isEditable()
public void setEditable(boolean b)
public int getSelectionStart()
public void setSelectionStart(int selectionStart)
public int getSelectionEnd()
public void setSelectionEnd(int selectionEnd)
public void select(int selectionStart, int selectionEnd)
public void selectAll()
public void setCaretPosition(int position)
public int getCaretPosition()
public void addTextListener(TextListener l)
public void removeTextListener(TextListener l)
protected void processEvent(AWTEvent e)
protected void processTextEvent(TextEvent e)
protected String paramString()
}
|
class TextField extends TextComponent {
public TextField()
public TextField(String text)
public TextField(int columns)
public TextField(String text, int columns)
public void addNotify()
public char getEchoChar()
public void setEchoChar(char c)
public boolean echoCharIsSet()
public int getColumns()
public void setColumns(int columns)
public Dimension getPreferredSize(int columns)
public Dimension getPreferredSize()
public Dimension getMinimumSize(int columns)
public Dimension getMinimumSize()
public void addActionListener(ActionListener l)
public void removeActionListener(ActionListener l)
protected void processEvent(AWTEvent e)
protected void processActionEvent(ActionEvent e)
protected String paramString()
}
|
public class TextArea extends TextComponent {
public static final int SCROLLBARS_BOTH
public static final int SCROLLBARS_VERTICAL_ONLY
public static final int SCROLLBARS_HORIZONTAL_ONLY
public static final int SCROLLBARS_NONE
public TextArea()
public TextArea(String text)
public TextArea(int rows, int columns)
public TextArea(String text, int rows, int columns)
public TextArea(String text, int rows, int columns, int scrollbars)
public void addNotify()
public void insert(String str, int pos)
public void append(String str)
public void replaceRange(String str, int start, int end)
public int getRows()
public void setRows(int rows)
public int getColumns()
public void setColumns(int columns)
public int getScrollbarVisibility()
public Dimension getPreferredSize(int rows, int columns)
public Dimension getPreferredSize()
public Dimension getMinimumSize(int rows, int columns)
public Dimension getMinimumSize()
protected String paramString()
}
|
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class WText extends Applet implements TextListener, ActionListener {
TextArea TA;
TextField TF;
String rc = System.getProperty("line.separator");
public void init() {
TA = new TextArea("", 10, 50, TextArea.SCROLLBARS_BOTH);
TA.setEditable(true);
add(TA);
TF = new TextField(10);
TF.setEditable(true);
TA.addTextListener(this);
TF.addTextListener(this);
TF.addActionListener(this);
add(new UnPanel(TF, TA));
}
public void textValueChanged(TextEvent e) {
TextComponent tc = (TextComponent)e.getSource();
String s = tc.getText();
}
public void actionPerformed(ActionEvent e) {
TextComponent tc = (TextComponent)e.getSource();
String s = tc.getText();
if (s.equals("gbm")) s = "Genie Bio Medical ";
else if (s.equals("es2i")) s = "Informatique ";
else if (s.equals("gbma")) s = "Genie Biologique et Micro Biologie appliquée ";
TA.append(s);
TA.setCaretPosition(2000);
TF.setText("");
}
public static void main(String[] args) {
Frame f = new Frame("Text");
WText p = new WText();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { System.exit(0); }
});
p.init();
f.add(p);
f.pack();
f.show();
}
}
class UnPanel extends Panel implements ActionListener {
TextField tf; TextArea ta;
String selection = "";
public UnPanel(TextField TF, TextArea TA) {
tf = TF; ta = TA;
add(tf);
Button copier = new Button("Copier");
add(copier);
Button coller = new Button("Coller");
add(coller);
Button effacer = new Button("Effacer");
add(effacer);
copier.addActionListener(this);
coller.addActionListener(this);
effacer.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
String tc = e.getActionCommand();
System.out.println(tc + " ... " + selection);
if (tc.equals("Coller")) { ta.insert(selection, ta.getCaretPosition()); }
else if (tc.equals("Copier")) selection = ta.getSelectedText();
else {
selection = ta.getSelectedText();
ta.replaceText("", ta.getCaretPosition() - selection.length(), ta.getCaretPosition() );
}
System.out.println(tc + " " + selection);
}
}
|
Bouton à cocher etiquetté.
public class Checkbox extends Component implements ItemSelectable {
public Checkbox()
public Checkbox(String label)
public Checkbox(String label, boolean state)
public Checkbox(String label, boolean state, CheckboxGroup group)
public Checkbox(String label, CheckboxGroup group, boolean state)
public void addNotify()
public String getLabel()
public void setLabel(String label)
public boolean getState()
public void setState(boolean state)
public Object[] getSelectedObjects()
public CheckboxGroup getCheckboxGroup()
public void setCheckboxGroup(CheckboxGroup g)
public void addItemListener(ItemListener l)
public void removeItemListener(ItemListener l)
protected void processEvent(AWTEvent e)
protected void processItemEvent(ItemEvent e)
protected String paramString()
}
|
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class WCheckbox extends Applet implements ActionListener, ItemListener {
TextArea textArea;
String rc = System.getProperty("line.separator");
Button b;
public void init() {
textArea = new TextArea(8, 50);
textArea.setEditable(false);
add(textArea);
Checkbox c1 = new Checkbox("Rouge", true);
Checkbox c2 = new Checkbox("Rose", false);
Checkbox c3 = new Checkbox("Blanc", false);
add(c1); add(c2); add(c3);
c1.addItemListener(this);
c2.addItemListener(this);
c3.addItemListener(this);
b = new Button("O.K."); b.addActionListener(this);
}
void afficher(String s) { textArea.append(s + rc); textArea.setCaretPosition(2000); }
public void actionPerformed(ActionEvent e) { afficher(e.toString()); }
public void itemStateChanged(ItemEvent e) {
String sel;
sel = (e.getStateChange()==e.SELECTED) ? "selectionne" : "deselectionne";
afficher("Vous avez " + sel +
" le checkbox " + e.getItem());
}
public static void main(String[] args) {
Frame f = new Frame("Des Checkbox");
WCheckbox p = new WCheckbox();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { System.exit(0); }
});
p.init();
f.add(p);
f.pack();
f.show();
}
}
|
public class CheckboxGroup implements Serializable {
public CheckboxGroup()
public Checkbox getSelectedCheckbox()
public void setSelectedCheckbox(Checkbox box)
public String toString()
}
|
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class WCheckboxGroup extends Applet implements ActionListener, ItemListener {
TextArea textArea;
String rc = System.getProperty("line.separator");
Button b;
public void init() {
textArea = new TextArea(8, 50);
textArea.setEditable(false);
add(textArea);
CheckboxGroup cbg = new CheckboxGroup();
Checkbox c1 = new Checkbox("Rouge", cbg, true);
Checkbox c2 = new Checkbox("Rose", cbg, false);
Checkbox c3 = new Checkbox("Blanc", cbg, false);
add(c1); add(c2); add(c3);
c1.addItemListener(this);
c2.addItemListener(this);
c3.addItemListener(this);
b = new Button("O.K."); b.addActionListener(this);
}
void afficher(String s) { textArea.append(s + rc); textArea.setCaretPosition(2000); }
public void actionPerformed(ActionEvent e) { afficher(e.toString()); }
public void itemStateChanged(ItemEvent e) {
String sel;
sel = (e.getStateChange()==e.SELECTED) ? "selectionne" : "deselectionne";
afficher("Vous avez " + sel +
" le checkbox " + e.getItem());
}
public static void main(String[] args) {
Frame f = new Frame("Un CheckboxGroup");
WCheckboxGroup p = new WCheckboxGroup();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { System.exit(0); }
});
p.init();
f.add(p);
f.pack();
f.show();
}
}
|
menu déroulant.
class Choice extends Component implements ItemSelectable {
public Choice()
public void addNotify()
public int getItemCount()
public String getItem(int index)
public void add(String item)
public void addItem(String item)
public void insert(String item, int index)
public void remove(String item)
public void remove(int position)
public void removeAll()
public String getSelectedItem()
public Object[] getSelectedObjects()
public int getSelectedIndex()
public void select(int pos)
public void select(String str)
public void addItemListener(ItemListener l)
public void removeItemListener(ItemListener l)
protected void processEvent(AWTEvent e)
protected void processItemEvent(ItemEvent e)
protected String paramString()
}
|
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class WChoice extends Applet implements ItemListener {
TextArea textArea;
String rc = System.getProperty("line.separator");
Choice meschoix;
public void init() {
textArea = new TextArea(8, 50);
textArea.setEditable(false);
add(textArea);
meschoix = new Choice();
meschoix.addItem("Bordeaux");
meschoix.addItem("Bourgogne");
meschoix.addItem("Alsace");
meschoix.addItem("Cotes du Rhones");
meschoix.addItemListener(this);
add(meschoix);
}
public void itemStateChanged(ItemEvent e) { afficher("itemStateChanged " + e.getItem()); }
void afficher(String s) { textArea.append(s + rc); textArea.setCaretPosition(2000); }
public static void main(String[] args) {
Frame f = new Frame("Choice");
WChoice p = new WChoice();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { System.exit(0); }
});
p.init();
f.add(p);
f.pack();
f.show();
}
}
|
menu défilant.
public class List extends Component implements ItemSelectable {
public List()
public List(int rows)
public List(int rows, boolean multipleMode)
public void addNotify()
public void removeNotify()
public int getItemCount()
public String getItem(int index)
public String[] getItems()
public void add(String item)
public void add(String item, int index)
public void replaceItem(String newValue, int index)
public void removeAll()
public void remove(String item)
public void remove(int position)
public int getSelectedIndex()
public int[] getSelectedIndexes()
public String getSelectedItem()
public String[] getSelectedItems()
public Object[] getSelectedObjects()
public void select(int index)
public void deselect(int index)
public boolean isIndexSelected(int index)
public int getRows()
public boolean isMultipleMode()
public void setMultipleMode(boolean b)
public int getVisibleIndex()
public void makeVisible(int index)
public Dimension getPreferredSize(int rows)
public Dimension getPreferredSize()
public Dimension getMinimumSize(int rows)
public Dimension getMinimumSize()
public void addItemListener(ItemListener l)
public void removeItemListener(ItemListener l)
public void addActionListener(ActionListener l)
public void removeActionListener(ActionListener l)
protected void processEvent(AWTEvent e)
protected void processItemEvent(ItemEvent e)
protected void processActionEvent(ActionEvent e)
protected String paramString()
}
|
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class WList extends Applet implements ItemListener {
TextArea textArea;
List l1, l2, l3;
String rc = System.getProperty("line.separator");
public void init() {
textArea = new TextArea(8, 50);
textArea.setEditable(false);
add(textArea);
l1 = new List(3, true);
l2 = new List(1, true);
l3 = new List(2, false);
add(l1); add(l2); add(l3);
l1.add("1991"); l1.add("1992"); l1.add("1993"); l1.add("1994"); l1.add("1995"); l1.add("1996");
l2.add("Rouge"); l2.add("Rose"); l2.add("Blanc");
l3.add("Bordeaux"); l3.add("Bourgogne"); l3.add("Alsace"); l3.add("Rhone");
l1.addItemListener(this);
l2.addItemListener(this);
l3.addItemListener(this);
}
public void itemStateChanged(ItemEvent e) {
List l = (List)(e.getSource());
String sl;
String s[];
if (l == l1) sl = "Annee";
else if (l == l2) sl = "Type";
else sl = "Region";
sl += "-> votre choix: ";
int i;
for (s=l.getSelectedItems(), i=0; i<s.length; sl += s[i++] + " ");
afficher(sl);
}
void afficher(String s) { textArea.append(s + rc); textArea.setCaretPosition(2000); }
public static void main(String[] args) {
Frame f = new Frame("List");
WList p = new WList();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { System.exit(0); }
});
p.init();
f.add(p);
f.pack();
f.show();
}
}
|
Zone vierge sur laquelle on peut insérer des dessins et des immages et
capturer les évènements utilisateur.
C'est, en particulier, utile pour implenter des composants non standard.
Par exemple, si l'on veut définir
un bouton ayant une image en fond, on utilisera un objet de type Canvas.
Nous verrons au chapitre 30 la manipulation des images.
public class Canvas extends Component {
public Canvas()
public void addNotify()
public void paint(Graphics g)
}
|
import java.awt.*;
import java.applet.Applet;
public class WCanvas extends Applet {
public void init() {
Image img1 = getImage(getCodeBase(), "tourai.gif");
MonCanvas mc = new MonCanvas(img1);
add(mc);
}
}
class MonCanvas extends Panel {
Image image;
Dimension size = new Dimension(150, 150);
public MonCanvas(Image image) { this.image = image; }
public Dimension getPreferredSize() { return getMinimumSize(); }
public Dimension getMinimumSize() { return size; }
public void paint (Graphics g) {
g.drawImage(image, 0, 0, this);
}
}
|
Menu.
public class Menu extends MenuItem implements MenuContainer {
public Menu()
public Menu(String label)
public Menu(String label, boolean tearOff)
public void addNotify()
public void removeNotify()
public boolean isTearOff()
public int getItemCount()
public MenuItem getItem(int index)
public MenuItem add(MenuItem mi)
public void add(String label)
public void insert(MenuItem menuitem, int index)
public void insert(String label, int index)
public void addSeparator()
public void insertSeparator(int index)
public void remove(int index)
public void remove(MenuComponent item)
public void removeAll()
public String paramString()
}
|
public class MenuItem extends MenuComponent {
public MenuItem()
public MenuItem(String label)
public MenuItem(String label, MenuShortcut s)
public void addNotify()
public String getLabel()
public void setLabel(String label)
public boolean isEnabled()
public void setEnabled(boolean b)
public MenuShortcut getShortcut()
public void setShortcut(MenuShortcut s)
public void deleteShortcut()
protected final void enableEvents(long eventsToEnable)
protected final void disableEvents(long eventsToDisable)
public void setActionCommand(String command)
public String getActionCommand()
public void addActionListener(ActionListener l)
public void removeActionListener(ActionListener l)
protected void processEvent(AWTEvent e)
protected void processActionEvent(ActionEvent e)
public String paramString()
}
|
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class WMenu extends Applet implements ActionListener {
Button b;
FenetreMenu fenetre;
public void init() {
b = new Button("Cliquez ici pour ouvrir/fermer une fenetre");
add(b);
b.addActionListener(this);
fenetre = new FenetreMenu(" Des Menus");
}
public void actionPerformed(ActionEvent e) {
if (! fenetre.isShowing())
fenetre.setVisible(true);
else
fenetre.setVisible(false);
}
public static void main(String[] args) {
Frame f = new Frame("Des menus");
WMenu p = new WMenu();
f.addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0); }
});
p.init();
f.add(p);
f.pack();
f.show();
}
}
class MonTextArea extends TextArea implements ActionListener {
PopupMenu popup;
String rc = System.getProperty("line.separator");
public MonTextArea(int l, int c) {
super(l,c);
setEditable(false);
popup = new PopupMenu("Un Popup Menu");
add(popup);
popup.add(new MenuItem("item 1"));
popup.add(new MenuItem("item 2"));
popup.addActionListener(this);
enableEvents(AWTEvent.MOUSE_EVENT_MASK);
}
public void processMouseEvent(MouseEvent e) {
if (e.isPopupTrigger()) {
popup.show(e.getComponent(), e.getX(), e.getY());
}
super.processMouseEvent(e);
}
public void actionPerformed(ActionEvent e) {
afficher(e.getActionCommand());
}
public void afficher(String s) {
append(s + rc);
setCaretPosition(2000);
}
}
class FenetreMenu extends Frame implements ActionListener {
MonTextArea textarea;
String rc = System.getProperty("line.separator");
public FenetreMenu(String s) {
super(s);
setSize(200, 150);
textarea = new MonTextArea(8, 50);
add(textarea);
MenuBar mb = new MenuBar();
setMenuBar(mb);
Menu file;
mb.add(file = new Menu("File"));
file.add(new MenuItem("Nouveau"));
file.add(new MenuItem("Ouvrir"));
file.add(new MenuItem("Enregistrer"));
file.addSeparator();
file.add(new MenuItem("Imprimer"));
file.add(new MenuItem("Quitter"));
file.addActionListener(this);
Menu edition;
mb.add(edition = new Menu("Edition"));
edition.add(new MenuItem("Copier"));
edition.add(new MenuItem("Couper"));
edition.add(new MenuItem("Coller"));
edition.addSeparator();
edition.add(new MenuItem("Fontes"));
edition.add(new MenuItem("Couleurs"));
edition.addActionListener(this);
Menu aide;
mb.add(aide = new Menu("Aide"));
mb.setHelpMenu(aide);
MenuItem ap;
aide.add(ap=new MenuItem("A propos"));
ap.setShortcut(new MenuShortcut(KeyEvent.VK_5));
aide.add(new MenuItem("Aide en ligne"));
aide.add(new MenuItem("Mise a jour"));
aide.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
afficher(e.getActionCommand());
}
void afficher(String s) {
textarea.append(s + rc);
textarea.setCaretPosition(2000);
}
}
|
Les Scrollbar servent dans deux cas de figure:
- comme glissière pour modifier une valeur graphiquement
public class Scrollbar extends Component implements Adjustable {
public static final int HORIZONTAL
public static final int VERTICAL
public Scrollbar()
public Scrollbar(int orientation)
public Scrollbar(int orientation, int value, int visible, int minimum, int maximum)
public void addNotify()
public int getOrientation()
public void setOrientation(int orientation)
public int getValue()
public void setValue(int newValue)
public int getMinimum()
public void setMinimum(int newMinimum)
public int getMaximum()
public void setMaximum(int newMaximum)
public int getVisibleAmount()
public void setVisibleAmount(int newAmount)
public void setUnitIncrement(int v)
public int getUnitIncrement()
public void setBlockIncrement(int v)
public int getBlockIncrement()
public void setValues(int value, int visible, int minimum, int maximum)
public void addAdjustmentListener(AdjustmentListener l)
public void removeAdjustmentListener(AdjustmentListener l)
protected void processEvent(AWTEvent e)
protected void processAdjustmentEvent(AdjustmentEvent e)
protected String paramString()
}
|
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class Adjustment extends Applet implements AdjustmentListener {
TextField tf;
SC scb;
public void init() {
scb = new SC();
tf = new TextField(3);
add(scb); add(tf);
scb.addAdjustmentListener(this);
tf.setEditable(false);
tf.setText("50");
}
public void adjustmentValueChanged(AdjustmentEvent e) { tf.setText(Integer.toString(e.getValue())); }
}
class SC extends Scrollbar {
Dimension minSize;
public SC() {
super(Scrollbar.HORIZONTAL, 50, 1, 0, 200);
minSize = new Dimension(150, 15);
}
public Dimension getPreferredSize() { return getMinimumSize(); }
public synchronized Dimension getMinimumSize() { return minSize; }
}
|
- comme ascenseurs pour contrôler la visiblité d'un composant (ScrollPane).
public class ScrollPane extends Container {
public static final int SCROLLBARS_AS_NEEDED
public static final int SCROLLBARS_ALWAYS
public static final int SCROLLBARS_NEVER
public ScrollPane()
public ScrollPane(int scrollbarDisplayPolicy)
protected final void addImpl(Component comp, Object constraints, int index)
public int getScrollbarDisplayPolicy()
public Dimension getViewportSize()
public int getHScrollbarHeight()
public int getVScrollbarWidth()
public Adjustable getVAdjustable()
public Adjustable getHAdjustable()
public void setScrollPosition(int x, int y)
public void setScrollPosition(Point p)
public Point getScrollPosition()
public final void setLayout(LayoutManager mgr)
public void doLayout()
public void printComponents(Graphics g)
public void addNotify()
public String paramString()
}
|
Les objets de type Dialog sont des fenêtres rattachées à une autre
fenêtre. Les fenêtres Dialog doivent s'iconifier et se fermer
en même temps que la fenêtre à laquelle elle est rattachée.
Par défaut, le gestionnaire de placement est le BorderLayout.
public class Dialog extends Window {
public Dialog(Frame owner)
public Dialog(Frame owner, boolean modal)
public Dialog(Frame owner, String title)
public Dialog(Frame owner, String title, boolean modal)
public Dialog(Dialog owner)
public Dialog(Dialog owner, String title)
public Dialog(Dialog owner, String title, boolean modal)
public void addNotify()
public boolean isModal()
public void setModal(boolean b)
public String getTitle()
public void setTitle(String title)
public void show()
public boolean isResizable()
public void setResizable(boolean resizable)
protected String paramString()
}
|
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class WDialog extends Applet implements ActionListener {
Button b;
DesDialogs fenetre;
public void init() {
b = new Button("Cliquez ici pour ouvrir/fermer une fenetre");
add(b);
b.addActionListener(this);
fenetre = new DesDialogs("Des boutons");
}
public void actionPerformed(ActionEvent e) {
if (! fenetre.isShowing()) fenetre.setVisible(true);
else fenetre.setVisible(false);
}
public static void main(String[] args) {
Frame f = new Frame("Des Dialog");
WDialog p = new WDialog();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { System.exit(0); }
});
p.init();
f.add(p);
f.setSize(350, 170);
f.pack();
f.show();
}
}
class DesDialogs extends Frame implements ActionListener {
Dialog d1, d2;
public DesDialogs(String s) {
super(s);
setLayout(new FlowLayout());
Button b = new Button("Fenetre modale");
b.addActionListener(this);
add(b);
setSize(200,200);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { setVisible(false); }
});
}
public void actionPerformed(ActionEvent e) {
if (d1 == null) {
d1 = new FModale(this, "Modal", true);
d1.setBounds(getLocationOnScreen().x, getLocationOnScreen().y, 400, 100);
}
d1.setVisible(true);
}
}
class FModale extends Dialog implements ActionListener {
public FModale(Frame owner, String title, boolean modal) {
super(owner, title, modal);
setLayout(new FlowLayout());
Button b;
add(new Label("Message d'alerte"));
add(b = new Button("O. K ? "));
b.addActionListener(this);
}
public void actionPerformed(ActionEvent e) { setVisible(false); }
}
|
public class FileDialog extends Dialog {
public static final int LOAD
public static final int SAVE
public FileDialog(Frame parent)
public FileDialog(Frame parent, String title)
public FileDialog(Frame parent, String title, int mode)
public void addNotify()
public int getMode()
public void setMode(int mode)
public String getDirectory()
public void setDirectory(String dir)
public String getFile()
public void setFile(String file)
public FilenameFilter getFilenameFilter()
public void setFilenameFilter(FilenameFilter filter)
protected String paramString()
}
|
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class WFileDialog extends Applet implements ActionListener {
Button b;
DesFDialogs fenetre;
public void init() {
b = new Button("Cliquez ici pour ouvrir/fermer une fenetre");
add(b);
b.addActionListener(this);
fenetre = new DesFDialogs("Des boutons");
}
public void actionPerformed(ActionEvent e) {
if (! fenetre.isShowing()) fenetre.setVisible(true);
else fenetre.setVisible(false);
}
public static void main(String[] args) {
Frame f = new Frame("Des FileDialog");
WFileDialog p = new WFileDialog();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { System.exit(0); }
});
p.init();
f.add(p);
f.setSize(350, 170);
f.pack();
f.show();
}
}
class DesFDialogs extends Frame implements ActionListener {
FileDialog d1, d2;
String rc = System.getProperty("line.separator");
TextArea ta;
public DesFDialogs(String s) {
super(s);
setLayout(new FlowLayout());
Button b = new Button("Choisir un fichier");
b.addActionListener(this);
add(b);
ta = new TextArea(5,50);
ta.setEditable(false);
add(ta);
pack();
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { setVisible(false); }
});
}
void afficher(String s) { ta.append(s + rc); ta.setCaretPosition(2000); }
public void actionPerformed(ActionEvent e) {
if (e.getSource() == d1)
System.out.println(e);
else {
if (d1 == null) d1 = new FileDialog(this, "File Dialog", FileDialog.LOAD);
d1.setDirectory("/tmp");
d1.setVisible(true);
afficher("Vous avez choisi le fichier \"" + d1.getFile() +
"\"\n dans le repertoire " + d1.getDirectory());
}
}
}
|
Lorsque l'on crée un nouveau composant, celui-ci est souvent
dérivé de Canvas ou Panel. Ces composants sont
intimement liés aux fenêtrex du système utilisé (fenêtres natives). Il en résulte:
- les fenêtres natives sont des composants lourds et il est
préférable de minimiser leur nombre.
- les fenêtres natives sont opaques et il n'est donc pas
possible de définir des composants qui utilisent la transparence
- les fenêtres natives se comportent parfois différemment selon
l'architecture du système utilisé.
Les composants légers ont été introduits pour pallier ces défauts.
Il s'agit d'objets dérivés directement de la classe Component
et Container. Il n'y donc pas de zone opaque associée à
ces composants. Ces composants gardent toutes les propriétés
classiques des composants: affichage, gestion de configuration
(layout) et gestion d'évènements. Ils ont en outre les avantage
suivants:
- La transparence est assurée par le fait de ne pas définir
une couleur pour le fond du composant
- Ces composants sont légers au sens où il ne nécessite pas
un objet peer.
- Ces composants sont entièrement programmés en Java et donc
parfaitement portables.
Par opposition aux composants légers, nous appellerons
composants lourds (Heavyweight Components ) les
composants classiques que nous avons décrit tout au long de ce
chapitre.
Une application peut faire cohabiter les composants légers et
lourds. Un container lourd peut contenir des composants légers,
un composant lourd peut être contenu dans un container léger.
La seule restriction est que le container racine soit un container
lourd.
L'affichage et la gestion des évènements des composants légers
se fait par l'intermédiaire d'un Container.
Pour gérer l'affichage, il suffit d'implanter correctement la méthode
paint. En effet, si le container est un objet dérivé de
la classe Container et que la méthode paint()
du container
est redéfinie, il ne faut surtout pas oublier de faire appel à la
méthode super.paint() sous peine de ne pas voir afficher
vos composants légers.
Comme vous le savez, à présent, les composants légers sont
affichés en les dessinant dans une méthode paint.
Aussi, nous retrouverons pour l'affichage des composants légers,
les mêmes problèmes que nous avons rencontré pour dessiner dans
une fenêtre graphique. Une bonne habitude de
programmation consiste à utiliser le double buffering
pour afficher les composants légers.
Voici l'exemple fourni dans la documentation officielle de
JDK :
public class DoubleBufferPanel extends Panel {
Image offscreen;
public void invalidate() {
super.invalidate();
offscreen = null;
}
public void update(Graphics g) { paint(g); }
public void paint(Graphics g) {
if(offscreen == null)
offscreen = createImage(getSize().width, getSize().height);
Graphics og = offscreen.getGraphics();
og.setClip(0,0,getSize().width, getSize().height);
super.paint(og);
g.drawImage(offscreen, 0, 0, null); og.dispose();
}
}
|
import java.lang.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
class LWButton extends Component {
String label;
protected boolean pressed = false;
public LWButton(String label) {
this.label = label;
enableEvents(AWTEvent.MOUSE_EVENT_MASK);
}
public void paint(Graphics g) {
FontMetrics fm = getFontMetrics(getFont());
int s = Math.min(getSize().width - 1, getSize().height - 1);
if(pressed) g.setColor(getBackground().darker().darker());
else g.setColor(getBackground());
g.fillRect(0, 0, fm.stringWidth(label), fm.getHeight() );
g.setColor(getBackground().darker().darker().darker());
g.drawRect(0, 0, fm.stringWidth(label), fm.getHeight() );
Font f = getFont();
if (f != null) {
fm = getFontMetrics(getFont());
g.setColor(getForeground());
g.drawString(label, s/2 - fm.stringWidth(label)/2, s/2 + fm.getMaxDescent());
}
}
public Dimension getPreferredSize() {
Font f = getFont();
if(f != null) {
FontMetrics fm = getFontMetrics(getFont());
int max = Math.max(fm.stringWidth(label) + 40, fm.getHeight() + 40);
// return new Dimension(max, max);
return new Dimension(fm.stringWidth(label) + 40, fm.getHeight() + 40);
}
else return new Dimension(100, 100);
}
public Dimension getMinimumSize() {
return new Dimension(100, 100);
}
public void processMouseEvent(MouseEvent e) {
Graphics g;
switch(e.getID()) {
case MouseEvent.MOUSE_PRESSED:
pressed = true;
repaint();
break;
case MouseEvent.MOUSE_RELEASED:
if(pressed == true) {
pressed = false;
repaint();
}
break;
/*
case MouseEvent.MOUSE_EXITED:
if(pressed == true) {
pressed = false;
repaint();
}
break;
*/
}
super.processMouseEvent(e);
}
}
public class Leger extends Applet {
public void init() {
add(new LWButton("ccccccccccccc"));
}
}
|
A TERMINER
Next: 27 Ranger les widgets
Up: Java: Programmation graphique
Previous: 25 Gestion des évènements
Touraivane
6/12/1998