import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Line2D; import java.awt.image.BufferedImage; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class Test extends JFrame { private JLabel labels [] = new JLabel[7]; public Test() { JPanel content = new JPanel(); content.setLayout(null); createLabels(content); // ajout des labels moveLabels(content); // place les labels setContentPane(content); setGlassPane(new GlassPane()); getGlassPane().setVisible(true); setSize(800, 600); setLocationRelativeTo(null); setDefaultCloseOperation(EXIT_ON_CLOSE); } private void createLabels(JPanel panel) { for (int i = 0; i < labels.length; i++) { labels[i] = new JLabel("label" + i); labels[i].setOpaque(true); labels[i].setBackground(Color.white); panel.add(labels[i]); } } private void moveLabels(JPanel panel) { /* * dans l'exemple le panel ne contient pas d'autres composants que des labels * du coup pas besoin de passer la références du tableau de labels, * il suffit juste de lister les composants attachés au panel. */ for(int i = 0; i < panel.getComponentCount(); i++) panel.getComponent(i).setBounds(0, i*100-10, 70, 30); } private class GlassPane extends JPanel { private BufferedImage grid = null; public GlassPane() { setOpaque(false); } public void paintComponent(Graphics g) { super.paintComponent(g); /* comme tu n'utilises pas la taille de la fenêtre pas besoin de *toujours* redessiner les lignes */ if(grid == null) { int max = 10; grid = new BufferedImage(80, max * 100, BufferedImage.TYPE_INT_ARGB); Graphics2D g2 = grid.createGraphics(); g2.setColor(new Color(0, 0, 0, 50)); for (int i = 0; i < max; i++) g2.draw(new Line2D.Double(30, i*100, 70, i*100)); } /* dessine l'image */ g.drawImage(grid, 0, 0, this); } } public static void main(String[] args) { new Test().setVisible(true); } }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question