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

Agents de placement/Fenêtres Java Discussion :

[JPanel] superposer des JPanel


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 28
    Points : 22
    Points
    22
    Par défaut [JPanel] superposer des JPanel
    Bonjour ou bonsoir je ne sais plus quelle heure il est en France.
    Voilà mon problème.
    J'ai créé une classe qui étend JPanel : elle s'appelle Whiteboard.
    C'est caractéristiques sont les suivante :
    - Je peux dessiner des cercles, des points...
    - Je peux régler la transparence (rendre plus ou moins visible ce que je dessine).
    Ca pas de problème ca marche.

    J'ai une autre classe qui étend JPanel : elle s'apelle WBManager.
    Je créé disons trois objets Whiteboard dans cette dernière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Whiteboard wb1 = new Whiteboard();
    Whiteboard wb2 = new Whiteboard();
    Whiteboard wb3 = new Whiteboard();
    Ce que je voudrais faire c'est superposer ces trois composants et pouvoir les déplacer les uns ou dessus des autres sans perdre l'effet de transparence. Je dois aussi pouvoir dessiner sur celui qui est au-dessus des autres. Enfin, je dois pouvoir voir ce que j'ai dessiner sur chaqu'un lors de la supersposition.

    Bien sûr je peut faire le bourrin en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    MyWBManager.add(wb1);
    MyWBManager.add(wb2);
    MyWBManager.add(wb3);
    et créer une fonction permettant de faire des inversions mais je voudrais faire ca proprement.

    J'ai regardé du côté des Layered Panes et sur le forum mais je n'y arrive pas
    Est-ce que quelqu'un aurait une idée.[/code]

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Points : 393
    Points
    393
    Par défaut
    Welcome to the club de ce qui on des problèmes de superposition;

    la solution est dans JLayeredPane, le layout manager de base de tous les rootPane qui te permet de définir la position des components en profondeur et non simplement en frontale. Voir JFrame ou JRootPane dans le tutoriel.

    Courage

  3. #3
    Membre actif Avatar de @ldehan
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 215
    Points : 278
    Points
    278
    Par défaut
    Je ne sais pas pour la transparence mais est-ce qu'un OverlayLayout ne suffirait pas ?

    Cela dit je ne connais pas les JLayeredPane

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Ouais j'ai bien pensé au JLayeredPane mais je n'arrive pas à le faire fonctionner.
    Voici un bout de code :
    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
    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
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.image.*;
    import javax.swing.event.*;
    import java.awt.geom.*;
    import java.io.*;
    import java.util.*;
     
    public class Transparence3 extends JFrame implements ChangeListener {
     
    	private JSlider slider;
    	private MonContainer container;
     
    	public Transparence3 () {
     
    		this.setTitle("Transparence");
     
    		slider = new JSlider(JSlider.HORIZONTAL,0,100,100);
    		slider.setMajorTickSpacing(10);
    		slider.setMinorTickSpacing(5);
    		slider.setPaintTicks(true);
            slider.addChangeListener(this);
            container = new MonContainer(this.getLayeredPane());
            this.setContentPane(container);
     
    		this.pack();
    		this.setResizable(false);
    		this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
    		this.setVisible(true);
    		this.show();
     
    	}
     
    	public void stateChanged(ChangeEvent e)
    	{
     
    	}
     
    	public static void main (String args[]) {
     
    		try {
    			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    		    }
    		catch (Exception e) {}
    		new Transparence3();
     
    	}
     
    }
     
    class Dessin extends JPanel {
     
    	private float transparency = 1.0f;
    	private int x1 = 0;
    	private int x2 = 0;
    	private int y1 = 0;
    	private int y2 = 0;
     
    	public Dessin (int X1, int X2, int Y1, int Y2)
    	{
    		super();
    		this.setPreferredSize(new Dimension(400,400));
    		this.setOpaque(false);
    		x1 = X1;
    		x2 = X2;
    		y1 = Y1;
    		y2 = Y2;
    	}
     
    	public void setTransparency(float aTransparency)
    	{
    		transparency = aTransparency;
    	}
     
     
    	public void paint(Graphics g)
    	{
    		Graphics2D g2 = (Graphics2D) g;
    		g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,Math.min(transparency,1.0f)));
    	  	g2.draw(new Rectangle(x1,y1,x2,y2));
    	}
     
    }
     
    class MonContainer extends JPanel {
     
    	private JLayeredPane layeredPane;
    	private Dessin panel1;
    	private Dessin panel2;
     
    	public MonContainer (JLayeredPane aLayeredPane)
    	{
    		super(new GridLayout(1,1));
    		this.setPreferredSize(new Dimension(400,400));
    		this.setOpaque(true);
     
    		this.panel1 = new Dessin(50,50,30,30);
    		this.panel2 = new Dessin(60,60,20,20);
    		this.layeredPane = aLayeredPane;
    		this.layeredPane.add(panel1,new Integer(0));
    		this.layeredPane.add(panel2,new Integer(0));
    	}
    }
    Ca n'affiche rien, j'ai beau faire comme dit le tutorial mais il ne se passe rien
    Là j'ai vraiment besoin d'un coup de pouce....

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 28
    Points : 22
    Points
    22
    Par défaut
    Bon bein j'ai fini par trouver mais ce n'était pas si évident que ca.
    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
    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
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.image.*;
    import javax.swing.event.*;
    import java.awt.geom.*;
    import java.io.*;
    import java.util.*;
     
    public class Transparence3 extends JFrame implements ChangeListener {
     
    	private JSlider slider;
    	private MonContainer container;
     
    	public Transparence3 () {
     
    		super("Transparence");
     
    		slider = new JSlider(JSlider.HORIZONTAL,0,100,100);
    		slider.setMajorTickSpacing(10);
    		slider.setMinorTickSpacing(5);
    		slider.setPaintTicks(true);
            slider.addChangeListener(this);
            container = new MonContainer(this.getLayeredPane());
            this.setContentPane(container);
     
    		this.pack();
    		this.setResizable(false);
    		this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
    		this.show();
     
    	}
     
    	public void stateChanged(ChangeEvent e)
    	{
     
    	}
     
    	public static void main (String args[]) {
     
    		try {
    			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    		    }
    		catch (Exception e) {}
    		new Transparence3();
     
    	}
     
    }
     
    class Dessin extends JPanel {
     
    	private float transparency = 1.0f;
    	private int x1 = 0;
    	private int x2 = 0;
    	private int y1 = 0;
    	private int y2 = 0;
     
    	public Dessin (int X1, int X2, int Y1, int Y2)
    	{
    		super();
    		this.setBounds(0,0,400,400);
    		this.setOpaque(false);
    		x1 = X1;
    		x2 = X2;
    		y1 = Y1;
    		y2 = Y2;
    	}
     
    	public void setTransparency(float aTransparency)
    	{
    		transparency = aTransparency;
    	}
     
     
    	public void paint(Graphics g)
    	{
    		Graphics2D g2 = (Graphics2D) g;
    		g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,Math.min(transparency,1.0f)));
    	  	g2.draw(new Rectangle(x1,y1,x2,y2));
    	}
     
    }
     
    class MonContainer extends JPanel {
     
    	private JLayeredPane layeredPane;
    	private Dessin panel1;
    	private Dessin panel2;
     
    	public MonContainer (JLayeredPane aLayeredPane)
    	{
    		super();
    		this.setPreferredSize(new Dimension(400,400));
    		this.panel1 = new Dessin(50,50,30,30);
    		this.panel2 = new Dessin(60,60,20,20);
    		this.layeredPane = aLayeredPane;
    		this.layeredPane.add(panel1,new Integer(-3000));
    		this.layeredPane.add(panel2,new Integer(0));
        }
    }
    Il fallait juste que je rajoute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.setBounds(0,0,400,400);
    dans ma classe Dessin.
    Pb résolu.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/04/2014, 23h21
  2. [Swing] Superposer des JPanel dans une JFrame
    Par Babas007 dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 17/10/2011, 18h50
  3. Réponses: 3
    Dernier message: 08/03/2011, 21h53
  4. [JPanel] supprimer des JPanel enfants
    Par varfendell dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 11/07/2008, 15h18
  5. indicer des JPanels, est ce possible ?
    Par ceres02 dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 01/02/2006, 10h15

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