Bonjour, bonjour je suis tout nouveau et j'espère que la question que je vais poser n'a pas déjà été posée.
Si c'est le cas, veuillez m'excuser et par la même occasion me fournir un lien vers la solution à mon problème.
Je travaille actuellement sur une application un peu grosse et afin de réaliser ce projet, j'ai crée un petite application à part pour comprendre le mécanisme des JLayeredPane, pour pouvoir ensuite l'appliquer a mon application.
J'ai ainsi crée une classe dérivant de JApplet qui contient un JPanel et une classe - Board - dérivant de JPanel.
Ces deux éléments sont disposés sur le JLayerdPane de ma classe principale.
Board étant sur une couche plus basse que le JPanel, et ce dernier assez petit pour ne pas recouvrir tout les board.
Board est une classe qui a un fond blanc et qui dès que je clique une fois dessus dessine un rond orange et accessoirement efface tout lorsque je double clique.
Le problème est que je voudrais que lorsque je clique au dessus du boutton et bien que rien ne soit dessiné sur le Panel, mais en dessous sur mon Board, or ce n'est pas le cas.
Par exemple si mon boutton était transparent je voudrais pouvoir voir le rond en dessous.
La seule méthode que j'ai trouvé pour le moment, mais qui ne me satisfait pas, c'est de repaindre le bouton sur la zone sale - celle ou le rond a été ajouté - á chaque fois que je clique sur le Board.
De plus ayant un Panel transparent je ne vois pas quand même le cercle en dessous.
voici le code de ma petit appli :
- Classe principale Whiteboard :
- Classe JPanel : Board
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 import javax.swing.*; import java.awt.*; public class Whiteboard extends JApplet { public JPanel top; public Board board; public void init () { JLayeredPane lp = this.getLayeredPane (); Dimension dim; dim = new Dimension(500, 500); lp.setPreferredSize( dim ); lp.setMinimumSize( dim ); lp.setBounds( new Rectangle( dim ) ); top = new JPanel (); top.setBackground (new Color(50,50,210,50)); top.setBounds (0, 0, 50, 50); board = new Board(this); board.setBounds(0, 0, 500, 500); lp.add (board, JLayeredPane.DEFAULT_LAYER); lp.add (top, JLayeredPane.PALETTE_LAYER); } }
Merci d'avance si vous avez une solution.
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 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Board extends JPanel { Whiteboard white; /** Creates a new instance of Board */ public Board (Whiteboard w) { super (); this.enableEvents (AWTEvent.MOUSE_EVENT_MASK); this.requestFocus (); // Ask for keyboard focus so we get key events this.setBackground (Color.black); white = w; } /** * Invoked when a mouse event of some type occurs * @param e the MouseEvent */ public void processMouseEvent (MouseEvent e) { if (e.getID () == MouseEvent.MOUSE_RELEASED) { Graphics g = getGraphics (); if(e.getClickCount () < 2) { g.setColor (Color.orange); g.drawOval (e.getX (), e.getY (), 5, 5); g.dispose (); white.top.repaint(); } else { repaint (); } } }
J'ai oublié de dire que je suis nouveau avec SWING.
Partager