/* BoutonImage.java deux boutons affichant une image
Sur un click, l'image est cachée ou montrée; sur le bouton de droite
le fond du bouton est affichée, alors que sur celui de gauche,
c'est une autre image qui est affichée.
On utilise ici un Button de la bibliothèque AWT, sur lequel on place
une image.
Le fond de la fenêtre reçoit également une image.
Chargement de 3 images.
Classes:
BoutonImage: construction de fenêtre et programme principal
BtImage: extension de la classe java.awt.Button
Reflexe: action sur les boutons (cacher/montrer l'image)
*/
import java.awt.*;
import java.awt.event.*;
public class BoutonImage extends Frame {
Image fond,img1,img2;
public BoutonImage() {
// Charger deux images et un fond
fond=getToolkit().getImage("gif/fond.gif");
img1=getToolkit().getImage("gif/img1.gif");
img2=getToolkit().getImage("gif/img2.gif");
// Fenêtre avec deux boutons
BtnImage b1=new BtnImage(img1,fond),
b2=new BtnImage(img2,null);
this.setLayout(new GridLayout(1,2,20,10));
this.add(b1); this.add(b2);
// Actions sur bouton
Reflexe rfx=new Reflexe();
b1.addActionListener(rfx);
b2.addActionListener(rfx);
// Fermeture fenêtre
WindowAdapter pf = new WindowAdapter() {
public void windowClosing(WindowEvent e) { System.exit(0); };
};
this.addWindowListener(pf);
}
public void paint (Graphics g) {
// Trace une image en fond
Insets marge=this.getInsets(); // les marges internes du cadre
int x=marge.left, xx=this.getWidth()-marge.right,
y=marge.top, yy=this.getHeight()-y-marge.bottom;
g.drawImage(img1,x,y,xx,yy,Color.blue,this);
}
public static void main(String[] args) {
BoutonImage f = new BoutonImage();
f.setTitle("Boutons AWT");
f.setSize(170,140);
f.setLocation(50,100);
f.setVisible(true);
}
}
/** Images sur un bouton; sur un clic l'image est cachée ou inversement */
class BtnImage extends Button {
Image img, fond, active;
final int m=7; // marge entre l'image et le bord du bouton
BtnImage(Image i, Image f){ active=img=i; fond=f; }
public void paint (Graphics g) {
// Image avec un bandeau
if(active==null) g.clearRect(0,0,0,0);
else g.drawImage(active,m,m,this.getWidth()-2*m,this.getHeight()-2*m,
Color.white, this);
}
}
class Reflexe implements ActionListener {
Reflexe() {}
public void actionPerformed(ActionEvent e) {
BtnImage bi = (BtnImage)(e.getSource());
// basculer image/fond et afficher
if(bi.active==bi.fond) bi.active=bi.img; else bi.active=bi.fond;
bi.repaint();
}
}
// fin BoutonImage