Bonjour,
J'ai le problème suivant que je n'ai pas réussi à résoudre, après plusieurs heures d'essais infructueux et quelques exemples étudiés.
Je veux pouvoir dessiner :
1) un rectangle dont les dimensions vont s'adapter à la fenêtre,
2) un cercle qui doit exister dans la "même case" du conteneur parent (i.e. dans le getContentPane(... , BorderLayout.CENTER)) que le rectangle, éventuellement pouvoir se superposer avec.
J'ai créé deux JPanel pan (contenant le rectangle) et pan2 (contenant le cercle), et je les mets dans un JLayeredPane pour gérer la transparence (setOpaque).
J'arrive à avoir :
a) soit seulement le rectangle redimensionnable, en utilisant un "this.getWidth()" pour définir sa longueur quand je le dessine dans le JPanel, mais alors je n'arrive pas à combiner avec le cercle dans le JLayeredPane. En fait, pour que ça marche, il faut que je mette pan directement dans le getContentPane de la fenêtre...
b) soit le rectangle et le cercle, mais le rectangle est de taille fixe, car j'utilise un setBounds sur mes panels, et donc la taille est fixée.
...
Merci pour votre aide.
PS : Question complémentaire (je ne suis pas très avancé en Java) : dans le "this.getWidth()" que j'utilise dans le drawRect, à quoi (quel objet) fait référence exactement this ? Pourquoi est-ce que cette méthode ne marche pas quand j'utilise le "this.getWidth()" dans le setBounds ? (L'objet n'est visiblement plus le même...). J'ai vérifié que dans ce cas, this.getWidth() vaut 0 et donc on ne voit pas les objets...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 import javax.swing.*; import java.awt.*; public class totojava extends JFrame { private JLayeredPane lp ; private JPanel pan ; private JPanel pan2 ; public totojava() { // PREMIER PANEL : RECTANGLE pan = new JPanel() { public void paintComponent(Graphics g){ g.setColor(Color.black); g.drawRect(100, 100, this.getWidth()-150, 200) ; // ICI, THIS = ????? } }; // SECOND PANEL : CERCLE pan2 = new JPanel() { public void paintComponent(Graphics g){ g.setColor(Color.blue); g.fillOval(200, 50, 100, 100); g.drawLine(250, 100, 250, 50); } }; // SANS CES DEUX LIGNES, RIEN NE S'AFFICHE ! // pan.setBounds(50, 50, 600, 400) ; // pan2.setBounds(200, 50, 400, 200) ; pan.setBackground(Color.YELLOW) ; pan2.setBackground(Color.CYAN) ; lp = new JLayeredPane() ; lp.add(pan2, new Integer(2)) ; lp.add(pan, new Integer(1)) ; pan2.setOpaque(!pan.isOpaque()) ; // OPPOSE DE LA VALEUR PAR DEFAUT -> RENDRE LE FOND TRANSPARENT getContentPane().add(lp, BorderLayout.CENTER) ; } public static void main(String[] args) { JFrame f = new totojava(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setSize(800, 400); f.setLocationRelativeTo(null); f.setVisible(true); } }
Partager