IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

dessiner sur JLayeredPane


Sujet :

AWT/Swing Java

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut dessiner sur JLayeredPane
    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 :
    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);
        }  
    }
    - 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
    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 ();
                }
            }
        }
    Merci d'avance si vous avez une solution.

    J'ai oublié de dire que je suis nouveau avec SWING.

  2. #2
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Points : 114
    Points
    114
    Par défaut
    Quelques idées qui peuvent t'aider :

    - tu dois mettre ton panel du dessus non opaque (setOpaque(false)),
    - le dessin dans les JPanel se fait généralement dans paint() ou paintComponent() (En fait tu captes tes évènements et tu stoques par exemple les coordonnées des éléments à dessiner dans ta classe et tu appelle un repaint() => dessin de tes éléments stoqués),
    - si tu veux un boutton transparent, tu peux aller voir la FAQ (http://java.developpez.com/faq/gui/?...tonTransparent),
    - si tu veux que rien ne se mélange niveau affichage, le mieux est d'appeler un repaint sur ta JLayeredPane (=> repaint des couches contenues).

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci pour toutes ces suggestions, mais en fait mon problème est un peu plus compliqué que ca.
    Je n'ai pas voulu rentrer dans les détails du véritable travail que je dois réaliser mais je crois qu'il va falloir que je le fasse.

    Donc en fait, je travaille sur un projet de tableau blanc coopératif.
    En gros, cette application permet à plusieurs personnes de pouvoir dessiner à leur convenance sur un tableau blanc commun, qu'il partage sur internet.
    Toutes les informations passent donc par un serveur et sont renvoyées ensuite aux clients.

    Ce qu'il se passe c'est que si par exemple un client veut dessiner un rectangle.
    Il clique une fois (et maintient le bouton enfoncé) avec la souris sur le tableau et se déplace à son gré pour choisir la forme de son rectangle.
    Dans ce cas, il va voir s'afficher temporairement chaque nouveau rectangle à chaque nouveau mouvement de la souris.
    Seul ce client peut voir le rectangle temporaire.
    Ensuite une fois qu'il aura choisi definitivement la forme de son rectangle, il lachera le bouton de la souris et un message sera envoyé au serveur pour dire à tous les clients d'afficher le nouveau rectangle.
    J'espère que ce que je raconte est compréhensible.

    Pour réaliser cela, la methode PaintComponent() de mon tableau Blanc, donc ici ce serait de ma classe Board, a déjà été redéfinie pour afficher uniquement les figures définitives, mais pas les temporaires.
    Donc mon souci se porte surtout lorsque je réalise les dessins temporaire, liés à un seul et unique client.
    N'y a t'il donc pas moyen de faire comme si mon JPanel dans l'exemple était HeavyWeight, et que rien ne soit dessiné par dessus lorsque je dessine mes cercles, sans utiliser repaint.

Discussions similaires

  1. [MFC] Dessiner sur un Owner Draw
    Par gwendo dans le forum MFC
    Réponses: 1
    Dernier message: 27/04/2005, 11h21
  2. Comment dessiner sur un Bitmap sans scintillement ?
    Par TOTO32 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 10/01/2005, 10h11
  3. [Servlet] [Image] Dessiner sur une image
    Par gaia_dev dans le forum 2D
    Réponses: 5
    Dernier message: 01/09/2004, 17h11
  4. [Transparent] - Comment dessiner sur 2 TImage ?
    Par TOTO32 dans le forum Langage
    Réponses: 15
    Dernier message: 08/08/2004, 01h06
  5. Dessiner sur un Tbutton
    Par rvzip64 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 02/06/2004, 09h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo