1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
public class EssaiScroll extends JFrame
{
private static int n = 0;
private JScrollPane jsp;
private JPanel jp;
private JLabel jl;
public EssaiScroll()
{
// prepare la JFrame
super("Essai de Scroll");
setSize(800, 600);
//on finit l'application en fermant la fenêtre
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu("Ajouter Label");
menuBar.add(menu);
menu.addMouseListener(new MouseAdapter()
{
public void mousePressed (MouseEvent evt)
{
clic();
}
});
jp = new JPanel();
jp.setLayout(null);
jp.setBackground(Color.BLUE);
jsp = new JScrollPane(jp);
//les deux barres de défilement sont toujours visibles
jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
add(jsp, BorderLayout.CENTER);
setJMenuBar(menuBar);
setVisible(true);
System.out.println(jp);
System.out.println(jp.getVisibleRect());
}
protected void clic()
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
//on retire l'ancien composant à chaque fois
if (jp.getComponentCount() > 0) jp.remove(0);
JViewport v = jsp.getViewport();
jl = new JLabel("label " + n++);
jl.setOpaque(true);
jl.setBackground(Color.GREEN);
jl.setBorder(BorderFactory.createLineBorder(Color.black,3));
int x = (int) (jp.getWidth()*Math.random());
int y = (int) (jp.getHeight()*Math.random());
jl.setBounds(x, y, 350, 350);
jp.add(jl);
int largeur = jp.getWidth(), hauteur = jp.getHeight();
int xVue = x + (350 - v.getWidth())/2,
yVue = y + (350 - v.getHeight())/2;
//un booléen pour indiquer qu'on doit redimensionner
boolean redim = false;
//on redimensionne si nécessaire
if ((x + 350)> largeur)
{
redim = true;
largeur = x + 350;
xVue = largeur;
}
if ((y + 350)> hauteur)
{
redim = true;
hauteur = y + 350;
yVue = hauteur;
}
if (redim)
{
//il faut les deux l'un pour le composant, l'autre pour le JViewport
jp.setPreferredSize(new Dimension(largeur, hauteur));
jp.setSize(new Dimension(largeur,hauteur));
}
if (xVue < 0) xVue = 0;
if (yVue < 0) yVue = 0;
v.setViewPosition(new Point(xVue,yVue));
}
private String ecrire(Rectangle r)
{
return "(gauche = " + r.x + ", haut = " + r.y + ", droite = " + (r.x+r.width)
+ ", bas = " + (r.y+r.height) + ")";
}
});
}
public static void main(String[] args)
{
new EssaiScroll();
}
} |
Partager