package proxy; import java.awt.*; import javax.swing.*; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.event.MouseEvent; import javax.swing.border.*; import java.util.Date; import java.util.*; // hérite de JPanel et implémente Runnable class ProxyDImage extends JPanel implements Runnable { private MediaTracker monTracker; private Image img; private int width; private int height; private String imageName; private Thread temporisateur; private JFrame maFrame; // la "Frame" dans laquelle on se trouve // 2 paramètres : le nom et la "Frame" utilisé public ProxyDImage(String monNom, JFrame tempFrame) { System.out.println("proxy créé"); // la "Frame" dans laquelle on est maFrame = tempFrame; // le nom de l'image imageName = monNom; setLayout(new GridBagLayout()); EmptyBorder eb = new EmptyBorder(5, 5, 5, 5); setBorder(new CompoundBorder(eb, new BevelBorder(BevelBorder.LOWERED))); Font font = new Font("serif", Font.PLAIN, 10); } public void start() { System.out.println("temporisateur demarre"); // nouveau temporisateur: un Thread temporisateur = new Thread(); // on le démarre temporisateur.start(); } public synchronized void stop() { if (temporisateur != null) { temporisateur.interrupt(); } temporisateur = null; notifyAll(); } public void run() { System.out.println("running"); // Dans la méthode run on initialise le MediaTracker monTracker = new MediaTracker(this); // on charge l'image (voir dans Toolkit, getDefaultToolkit la méthode // getImage() img = Toolkit.getDefaultToolkit().getImage(imageName); width = img.getWidth(this); height = img.getHeight(this); System.out.println("L'image est " + height); // on ajoute l'image au "MediaTracker" avec l'ID 0 monTracker.addImage(img, 0); try { // on attend le chargement de l'image monTracker.waitForID(0); } catch (InterruptedException e) { System.out.println("erreur"); } System.out.println("L'image est " + height); } public void paint(Graphics g) { System.out.println("painting"); if (monTracker.checkID(0)) { // on vérifie si l'image est complètement chargée // dans le MediaTracker System.out.println("L'image est chargée"); // mettre la couleur de fond en "lightGray" setBackground(Color.lightGray); // un rectangle grisé g.setColor(Color.black); g.drawRect(0, 0, width, height); // on dessine l'image g.drawImage(img, 0, 0, this); } else { // image est en attente System.out.println("L'image est en attente"); // Couleur Magenta g.setColor(Color.magenta); // Rectangle plein g.fillRect(0, 0, width, height); // rectangle rouge et deux lignes rouges en forme de croix g.setColor(Color.red); g.drawRect(5, 5, width - 10, height - 10); g.drawLine(5, 5, width - 5, height - 5); g.drawLine(5, height - 5, width - 5, 5); } } public void actionPerformed(ActionEvent e) { // System.out.println("action!"); // start(); } }