Munir un conteneur d'ascenseurs

     

Observez le fonctionnement de cet applet. On peut cliquer avec la souris, on obtient des petits ronds. On remarque qu'on dispose d'ascenseurs, pour avoir un composant accessible plus grand que la partie visible.

alt : l'applet n'est pas visible par votre navigateur (dans le menu Outils, Modules complémentaires, activer le plugin Java(TM) Platform SE 6 U32 6.0.320.5 s'il est désactivé)

Notre application est quasiment identique à l'applet.

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;

class DisqueGraphique {
private int rayon, x, y;
Color couleur = Color.MAGENTA;

public DisqueGraphique(int rayon, int x, int y) {
this.rayon = rayon;
this.x = x;
this.y = y;
}
void dessiner(Graphics g) {
g.setColor(couleur);
g.fillOval(x - rayon, y - rayon, 2 * rayon, 2 * rayon);
}
}

class ArdoiseScroll extends JPanel {
ArrayList liste = new ArrayList();

ArdoiseScroll() {
setPreferredSize(new Dimension(400, 600));
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent evt)
{
liste.add(new DisqueGraphique(10, evt.getX(), evt.getY()));
repaint();
}
});
}

public void paintComponent(Graphics g) {
super.paintComponent(g);

for (DisqueGraphique disque : liste) disque.dessiner(g);
}
}


public class Scroll extends JFrame {
public Scroll() {
JScrollPane ascenseurs = new JScrollPane(new ArdoiseScroll());
ascenseurs.setPreferredSize(new Dimension(200, 200));
add(ascenseurs, BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocation(100, 100);
pack();
setVisible(true);
}
}

class EssaiScroll {
public static void main(String[] arg) {
new Scroll();
}
}
Vous pouvez obtenir :

  • le code de l'application ci-dessus.
  • le code de l'applet.
    ScrollPane ascenseurs = new JScrollPane(new ArdoiseScroll()); : on munit ainsi l"ardoise", qui est une instance de la classe JPanel, d'acenseurs. L'instance ascenseurs est composée des ascenseurs et de l'ardoise qu'elle contient. En général, les ascenseurs n'appparaissent pas si le composant contenu n'est pas plus grand que l'instance avec ascenseurs le contenant.
    Remarquons que si l'on utilise un gestionnaire de répartition de type FlowLayout, le composant avec ascenseurs reste de taille invariable quand on augmente la taille de la fenêtre de l'application. Au contraire, avec un BorderLayout, que nous avons par défaut dans cette application, le composant avec ascenseurs remplit la fenêtre de l'application que l'on augmente ou que l'on diminue celle-ci.

    setPreferredSize(new Dimension(400,600)); : remarquez que nous avons choisi une taille d'ardoise supérieure à la taille du composant avec ascenseurs contenant notre ardoise.
    ©Irène Charon, Télécom ParisTech 2011

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     ;