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 :

[Swing] Problème de scrollbar (JScrollPane) qui apparaît en dessous de composants enfants


Sujet :

AWT/Swing Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 3
    Points : 7
    Points
    7
    Par défaut [Swing] Problème de scrollbar (JScrollPane) qui apparaît en dessous de composants enfants
    Bonjour a tous,

    Voila je suis en train de développer une application JAVA pour m'exercer.
    Je suis partis sur une application basique, la gestion d'un Planning.

    Mon objectif est tout simple, créer une IHM avec des composants rendez-vous dispatchés sur une grille par jours et par moment de l'événement.
    Evidement pour mettre un peu de piment et jouer avec SWING ces evènements sont redimensionnable pour simplement changer les délais enregistrés dans la classe métier héritée, et en bonus, Ma JFrame est elle aussi redimensionnable...


    Bon je n'ai aucun souci pour faire tout cela et gérer les héritages de dimensions.
    Mon soucis se situe dans le fait que mes composants evènements "enfant d'enfants ... " au JScrollPane, apparaissent en dessus des scrollbars du JScrollPane.


    Pour l'archi de l'ihm, j'ai :

    • Définit le getContentPane de ma JFrame en BorderLayout et y ai ajouté le JScrollPane au Centre, sans spécifier de dimensions
    • Ajouté au viewport du JScrollPane un JPanel (1) en BorderLayout, sans spécifier de dimensions
    • Ajouté au jPanel au Nord, Center et east 3 composents JPanel définis en BorderLayout sans spécifier de dimensions (sauf pour ceux encore vide histoire de les visualiser),
    • => le nord(=JPanel) contient donc bouton précédent/titre/suivant a l'ouest center et est respectivement
    • => east(=JPanel) ne contient rien pour le moment
    • => center(=JPanel) contient au nord un GridLayout(0,8) avec les jours, au centre un JPanel avec null en Layout dont je précise ici setPreferredSize afain d'avoir une hauteur et largeur minimum de ce composant, ce qui permet a la JScrollPane de prendre en compte le composant ainsi qu'un listener HierarchyBoundsListener pour assurer le suivit des proportions du composant.
    • Dans ce dernier, j'ai disposé les labels d'heures et les filets repaires correspondant ainsi qu'un JPanel en GridLayout(0,8) pour les jours, dont chaque colonnes de jours contient un JPanel définit à null en layout dans lequel je dispatche les evenements redimentionables, dont je calcule les tailles et positions, en fonction du container parent via un HierarchyBoundsListener une fois encore.



    Pour visualiser le soucis voici des ScreenShoots de l'IHM - ensuite le code du composent posant problème - un trace "raccourci" des héritages des composants.

    Donc si quelqu'un a une idée pour remédier a mon problème je suis tout ouie car je ne vois pas ou cela coince, et également pour éventuellement revoir mon archi de l'ihm, mais n'oubliez pas que mes événement sont redimentionnables et que mes repaires d'heures doivent bien être visible par transparence en dessous de ma grid layout.... et que cela ne peut (en l'état de mes connaissances) en être autrement....

    J'ai pensé, puisque le focus sur les scrollbar les replaces en dessus des composants incriminés de forcer la scrollbar a revenir au premier plan aprés un scroll mais c'est alambiqué, cela ne me pplait pas, et je ne sais pas encore si c'est jouable...




    ICI l'IHM en question :

    Nom : vue 1.JPG
Affichages : 462
Taille : 234,2 Ko



    ICI on vois sous la scrollbar un filet vert correspondant à un événement

    Nom : vue2.jpg
Affichages : 476
Taille : 151,8 Ko



    ICI on vois clairement la scrollbar passer en dessous l’événement

    Nom : vue3.jpg
Affichages : 457
Taille : 162,9 Ko


    Les Screenshots suivant démontrent que les composants parents sont bien en dessous de la scrollbar

    Nom : vue4.jpg
Affichages : 471
Taille : 157,9 Ko

    Nom : vue4b.jpg
Affichages : 437
Taille : 139,9 Ko

    Nom : vue6.jpg
Affichages : 447
Taille : 164,0 Ko

    Nom : vue6b.jpg
Affichages : 443
Taille : 109,7 Ko


    Le Screenshot suivant démontre que les composants parents sont bien en dessous de la scrollbar ET que les composent enfants, les événements apparaissent seul en dessus

    Nom : vue7.jpg
Affichages : 467
Taille : 369,6 Ko


    Enfin, ce Screenshot suivant démontre que lorsque la scrollbar obtient le focus elle repasse effectivement au-dessus

    Nom : vue7c.jpg
Affichages : 463
Taille : 326,8 Ko


    Le code de ma JFrame
    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
     
    public class MasterFrame extends JFrame {
    	private static final long serialVersionUID = 1L;
    	private Container contentPane;
    	private JScrollPane scrollPane;
     
     
    	// CONSTRUCTEUR
    	public MasterFrame(String title) {
    		super();
     
    		setTitle(title);
    		setBackground( Color.red );
    		setName("frame : "+DCalendar.getTimestamp());
     
    		setContentPane();// création du content Pane
    		setContentPaneCenter();// création de la zone scrollable
    		setScrollPaneContent();// affectation du contenu au content pane
     
     
        	pack();
        	setDefaultCloseOperation(EXIT_ON_CLOSE);
        	setVisible(true);
        	ComponentPattern.getContainerInfo(this,0);
     
    	}
     
    	public void setContentPane() {
    		// récupération et parametrage du JPanel primaire de la JFrame
    		contentPane = getContentPane();
    		contentPane.setName("contentPane : "+DCalendar.getTimestamp());
    		contentPane.setLayout(new BorderLayout());		
    	}
     
    	public void setContentPaneCenter() {
    		scrollPane = new JScrollPane();
    		scrollPane.setName("scrollPane : "+DCalendar.getTimestamp());
    		contentPane.add( scrollPane, BorderLayout.CENTER );
    	}
     
    	protected void setScrollPaneContent(){
    		// récupération du contener du scrollpane
    		JViewport viewport = scrollPane.getViewport();
     
    		//definit si le composant est vide
    		boolean wasEmpty = viewport.getComponentCount()==0;
     
    		// si le contener n'est pas vide on purge et on valide
    		if(!wasEmpty) {
    			viewport.removeAll();
    			viewport.validate();
    		}
     
    		// abonement du contenu au contener
    		viewport.add(new AgendaJPanel());
     
    		// si le contener n'etait pas vide on revalide et on repain
    		if(!wasEmpty) {
    			viewport.revalidate();
    			viewport.repaint();
    		}
    	}
     
     
    	static {
    		/*Toolkit.getDefaultToolkit().addAWTEventListener(
                new AWTEventListener() {
    				@Override
    				public void eventDispatched(AWTEvent e) {
    					System.out.println(e.getID()+" => "+e.paramString());
     
    				}
                },
                101
            );*/
     
    		try {
    			ToolTipManager.sharedInstance().setInitialDelay(0);//delais d'affichage des infos bulle
    			UIManager.put("ToolTip.border", BorderFactory.createLineBorder(new Color(150,150,150)));// redéfinition des bordures
    			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());//désactive les effet et apparences des elements
    		} catch (ClassNotFoundException e) {e.printStackTrace();}
            catch (InstantiationException e) {e.printStackTrace();}
            catch (IllegalAccessException e) {e.printStackTrace();}
            catch (UnsupportedLookAndFeelException e) {e.printStackTrace();}
        }
     
    	public static void main(String[] args) {
    		// initialisation des données
    		try {
    			SrvWb.initConnection();
    			Evenements.clearCollection();
    			SrvAdapter.get( Evenements.select(DCalendar.min,DCalendar.max));
    			Evenements.getCollection();
    		} catch (Exception e) {e.printStackTrace();}
     
    		// creation de la frame
    		new MasterFrame("Planning - default title - "+DCalendar.duAu());
    	}
     
     
    }

    Le code du composent générant le contenus du ScrollPane

    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
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
     
    public class AgendaJPanel extends JPanel {
    	private static final long serialVersionUID = 1L;
     
     
    	JPanel north,east,center;
    	public AgendaJPanel() {
    		super();
     
    		// création de la vue
    		setName("AgendaJPanel");
    		setLayout(new BorderLayout());
    		setOpaque(false);
     
    		north = north();
     
    		east = east();
    		east.setPreferredSize(new Dimension(Parameters.largeurAsside,0));
     
    		center = center();
     
    		add(north, BorderLayout.NORTH);
    		add(east, BorderLayout.EAST);
    		add(center, BorderLayout.CENTER);
     
    	}
     
    	// Conteners
     
     
    	public JPanel north() {
    		JPanel north = new JPanel(new BorderLayout());
    		north.setName("AgendaJPanel -> north");
    		JLabel northLabel = new JLabel(
    			"<html>"
    				+ "<body>"
    					+ "<h2 style=\"font-size:24px;padding-right:10px;color:"+Parameters.blueStr+";\">Planning</h2>"
    				+ "</body>"
    			+ "</html>",  
    			new ImageIcon(new ImageIcon("fichiers/logo.png").getImage().getScaledInstance( Parameters.tailleLogo, Parameters.tailleLogo, java.awt.Image.SCALE_SMOOTH )),
    			JLabel.RIGHT
    		);
    		northLabel.setName("AgendaJPanel -> north -> northLabel");
    		northLabel.setHorizontalTextPosition(JLabel.LEFT);
    		north.add(northLabel,BorderLayout.CENTER);
    		return north;
    	}
    	private JPanel east(){
    		JPanel east = new JPanel(new BorderLayout());
    		east.setName("AgendaJPanel -> east");
    		east.setBackground(new Color(255,255,255));				
    		return east;
    	}
     
     
    	JPanel acNorth,acCenter,acSouth;
    	private JPanel center() {
    		JPanel agendaCenter = new JPanel(new BorderLayout());
    		agendaCenter.setName("AgendaJPanel -> center");
     
    		acNorth = acNorth();
    		acNorth.setName("AgendaJPanel -> center -> north");
    		agendaCenter.add(acNorth, BorderLayout.NORTH);
     
    		acCenter = acCenter();
    		acCenter.setName("AgendaJPanel -> center -> center");
    		agendaCenter.add(acCenter, BorderLayout.CENTER);
     
    		acSouth = acSouth();
    		acSouth.setName("AgendaJPanel -> center -> south");
    		acSouth.setPreferredSize(new Dimension(0,Parameters.hauteurFooter));
    		agendaCenter.add(acSouth, BorderLayout.SOUTH);
     
     
    		return agendaCenter;
    	}
     
     
     
     
    	public JPanel acTitle;
    	private JPanel acNorth(){
    		JPanel acNorth = new JPanel(new BorderLayout());
     
    		JPanel westPanel = new JPanel(new BorderLayout());
    			JButton precedent = new JButton("<<");
    			precedent.setName("AgendaJPanel -> center -> north -> west -> precedent");
    			precedent.setBorderPainted(false);
    			precedent.setContentAreaFilled(false);
    			precedent.setBorder(new LineBorder(Color.BLACK));
    			precedent.addActionListener(new Precedent());
    		westPanel.add(precedent,BorderLayout.CENTER);
    		westPanel.setOpaque(false);
    		westPanel.setName("AgendaJPanel -> center -> north -> west");
     
    		JPanel eastPanel = new JPanel(new BorderLayout());
    			JButton suivant = new JButton(">>");
    			suivant.setName("AgendaJPanel -> center -> north -> east -> suivant");
    			suivant.addActionListener(new Suivant());
    			suivant.setBorderPainted(false);
    			suivant.setContentAreaFilled(false);
    			suivant.setBorder(new LineBorder(Color.BLACK));
    		eastPanel.add(suivant, BorderLayout.CENTER);
    		eastPanel.setOpaque(false);
    		eastPanel.setName("AgendaJPanel -> center -> north -> east");
     
    		acTitle = new JPanel(new BorderLayout());
    		acTitle.setName("AgendaJPanel -> center -> north -> center");
    			acTitle.add(acTitle(),BorderLayout.CENTER);
    		acTitle.setOpaque(false);
     
    		acNorth.add(westPanel,BorderLayout.WEST);
    		acNorth.add(eastPanel,BorderLayout.EAST);
    		acNorth.add(acTitle,BorderLayout.CENTER);
     
    		return acNorth;
    	}
    	public JLabel acTitle(){
    		JLabel label = new JLabel(
    				"<html>"
    						+ "<body>"
    							+ "<h2 style=\"color:"+Parameters.blueStr+";\">"+DCalendar.duAu()+"</h2>"
    						+ "</body>"
    					+ "</html>"
    				);
    		label.setName("AgendaJPanel -> center -> north -> center -> label");
    		return label;
    	}
    	private class Precedent implements ActionListener{
            public void actionPerformed (ActionEvent e){
            	DCalendar.actionPreviousWeek();
            	refrech();
            }
        }
    	private class Suivant implements ActionListener{
            public void actionPerformed (ActionEvent e){
            	DCalendar.actionNextWeek();
            	refrech();
            }
        }
     
     
     
     
    	private JPanel acSouth() {
    		JPanel acSouth = new JPanel(new BorderLayout());
    		acSouth.setBackground(Color.red);
    		return acSouth;
    	}
     
     
    	JPanel acCenterNorth,acCenterCenter;
     
     
    	private JPanel acCenter(){
    		JPanel acCenterContener = new JPanel(new BorderLayout());
     
    		//acCenterNorth
    		GridLayout grid = new GridLayout(0,Parameters.days.length);
    		setAcCenterNorth(new JPanel(grid));
    		for(int i=0; i<Parameters.days.length; i++) {
    			JLabel header = new JLabel(Parameters.days[i],JLabel.CENTER);
    			header.setName("AgendaJPanel -> center -> center -> north -> header  = "+Parameters.days[i]);
    			acCenterNorth.add(header);
    		}
     
     
    		//acCenterCenter
    		setAcCenterCenter(new GridHours());
     
     
    		acCenterContener.add(acCenterNorth,BorderLayout.NORTH);
    		acCenterContener.add(acCenterCenter,BorderLayout.CENTER);
     
    		return acCenterContener;
    	}
     
    	// getter and setter
    	public JPanel getAcCenterNorth() {
    		return acCenterNorth;
    	}
    	public void setAcCenterNorth(JPanel acCenterNorth) {
    		this.acCenterNorth = acCenterNorth;
    	}
    	public JPanel getAcCenterCenter() {
    		return acCenterCenter;
    	}
    	public void setAcCenterCenter(JPanel panel) {
    		this.acCenterCenter = panel;
    	}
     
     
    	//METHODE DE RAFRAICHISSEMENT DE L'OBJET
    	private void refrech() {
    		// TODO...
    	}
     
    }
    Le code du composent générant la grille et
    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
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
     
    public class GridHours extends JPanel {
    	private static final long serialVersionUID = 1L;
     
    	Map< String, Rectangle > elements = new HashMap< String, Rectangle >();
     
    	/**
             * Constructor
             * @param acCenterCenter
             */
    	public GridHours() {
     
    		setLayout(null);
    		setName("AgendaJPanel -> center -> center -> center -> GridHours");
    		setBackground(Color.white);
    		setPreferredSize(new Dimension(70*8,(int)(((Parameters.tailleHours+10)*2)*(Parameters.to-Parameters.from)+Parameters.tailleHours)));
     
    		// création de l'écouteur du composant
    		addHierarchyBoundsListener(new ParentListener());
     
    		/*EventQueue.invokeLater(new Runnable() {
    			@Override
                public void run() {*/
     
     
     
    				// création de la grille
    				createHoursElements();
     
    				// création des evenements
    				createEvenements();
    			/*}
    		});*/
     
     
    	}
     
    	/**
             * Methode d'initialisation  de la grille
             */
    	public void createHoursElements() {
     
    		for (int j=Parameters.from; j<=Parameters.to; j++) {
     
    				JPanel hoursFilet = new JPanel(null);
    				hoursFilet.setName("AgendaJPanel -> center -> center -> center -> GridHours -> hoursFilet : "+(j-Parameters.from));
    				hoursFilet.setBackground(Parameters.colorFilets);
     
    			add(hoursFilet);
     
    				JPanel hours = new JPanel(new BorderLayout());
    				hours.setOpaque(false);
    				hours.setName("AgendaJPanel -> center -> center -> center -> GridHours -> hoursJPanel : "+(j-Parameters.from));
    					JLabel labelHours = new JLabel(createTextHtml(j+"h",Parameters.cssHours),JLabel.RIGHT);
    					labelHours.setOpaque(false);
    				hours.add( labelHours, BorderLayout.CENTER );
     
    			add(hours);
     
     
    			if(j<Parameters.to) {
     
    					JPanel halfFilet = new JPanel(null);
    					halfFilet.setName("AgendaJPanel -> center -> center -> center -> GridHours -> alfHoursFilet : "+(j-Parameters.from));
    					halfFilet.setBackground(Parameters.colorFilets);
     
    				add(halfFilet);
     
    					JPanel half = new JPanel(new BorderLayout());
    					half.setOpaque(false);
    					half.setName("AgendaJPanel -> center -> center -> center -> GridHours -> alfHours : "+(j-Parameters.from));
    						JLabel labelHalf = new JLabel(createTextHtml(j+"h30",Parameters.cssHalf),JLabel.RIGHT);
    						labelHours.setOpaque(false);
    					half.add( labelHalf, BorderLayout.CENTER );
     
    				add(half);
     
    			}
    		}
     
    		setBounds();
     
    	}
     
    	/**
             * Cette methide permet de générer la grille
             */
    	public void createEvenements(){
    		JPanel pane = new JPanel(new GridLayout(0,Parameters.days.length));
    		pane.setName("AgendaJPanel -> center -> center -> center -> GridHours -> JPanel Evenement : " );
    		pane.setOpaque(false);
    		pane.setBounds(getEvenementsBounds());
     
     
    		Map<Integer, List<JPanel>> gc = getEvenementsMap(pane);
     
    		for(int i=0; i<Parameters.days.length; i++) {
     
    			JPanel cont = new JPanel(null);
     
    			cont.setName("AgendaJPanel -> center -> center -> center -> GridHours -> JPanel Evenement -> JPanel day : " + i);
    			cont.setOpaque(false);
    			for(JPanel el:gc.get(i)) cont.add(el);
     
    			pane.add(cont);
    		}
     
    		add(pane,0);
     
    	}
    	/**
             * Créé une Map des Evenements par columns
             * @param parent
             * @return
             */
    	private Map<Integer, List<JPanel>> getEvenementsMap(JPanel parent) {
     
    		// initialisation de la Map
    		Map<Integer, List<JPanel>> gc = new HashMap<Integer, List<JPanel>>();
    		for(int i=0; i<Parameters.days.length; i++) gc.put(i, new ArrayList<JPanel>());
     
     
    		//int largeur = parent.getWidth()/8;
    		//int hauteur = parent.getHeight();
    		for(Entry<Long, ? extends Job> event : Evenements.getCollection().entrySet()){
    			// récupération de la valeur
    			Evenements e = (Evenements) event.getValue();
     
    			// component creation 
    			EvenementsComponent p = new EvenementsComponent(e);
     
    	        // ajout du JPanel au tableau
    			gc.get(e.getIndex()).add(p);
    		}
    		return gc;
    	}
     
    	/**
             * Ecouteur du parent pour la mise a jour des dimentions de la grille si necessaire
             * @author germain
             *
             */
    	private class ParentListener implements HierarchyBoundsListener{
    		@Override
    		public void ancestorMoved(HierarchyEvent e) {}
    		@Override
    		public void ancestorResized(HierarchyEvent e) {
    			/*EventQueue.invokeLater(new Runnable() {
    	            @Override
    	            public void run() {*/
    	            	setBounds();
                	/*}
    	        });*/
    		}
    	}
     
    	/**
             * Cette methode permet de calculer la position d'un Evenements
             * @return
             */
    	public Rectangle getEvenementsBounds() {
    		return new Rectangle(0,Parameters.tailleHours/2,getWidth(),getHeight()-Parameters.tailleHours);
    	}
     
    	/**
             * Cette methode permet de calculer la position d'un element d'heure de la grille
             * @param i
             * @param half
             * @return
             */
    	public Rectangle getHBounds(int i,boolean half) {
    		long h =  getHeight()-Parameters.tailleHours;
    		int y = (int)((h*i+((half)?h*1/2:0))/(Parameters.to-Parameters.from));
    		return new Rectangle(0,y,getWidth()/8,Parameters.tailleHours);
    	}
     
    	/**
             * Cette methode permet de calculer la position d'un filet d'heure de la grille
             * @param i
             * @param half
             * @return
             */
    	public Rectangle getFBounds(int i,boolean half) {
    		long h =  getHeight()-Parameters.tailleHours;
    		int y = (int)((h*i+((half)?h*1/2:0))/(Parameters.to-Parameters.from))+(Parameters.tailleHours-Parameters.tailleFilets)/2;
    		return new Rectangle(getWidth()/8,y,getWidth()-getWidth()/8,Parameters.tailleFilets);
    	}
     
    	/**
             * Cette methode permet de définir les dimentions
             */
    	public void setBounds() {
    		Component[] g = getComponents();
    		for (Component child : g) {
    			String name = child.getName();
    			if(name!=null) {
    				if(name.contains("AgendaJPanel -> center -> center -> center -> GridHours -> alfHours : ")) {
     
    					if(hasToSetElement(name,getHBounds(Integer.parseInt(name.replace("AgendaJPanel -> center -> center -> center -> GridHours -> alfHours : ","")),true))){
    						child.setBounds(elements.get(name));
    						rr((Container) child);
    					}	
     
    				} else if(name.contains("AgendaJPanel -> center -> center -> center -> GridHours -> hoursJPanel:")) {
     
    					if(hasToSetElement(name,getHBounds(Integer.parseInt(name.replace("AgendaJPanel -> center -> center -> center -> GridHours -> hoursJPanel : ","")),false))){
    						child.setBounds(elements.get(name));
    						rr((Container) child);
    					}
     
    				} else if(name.contains("AgendaJPanel -> center -> center -> center -> GridHours -> hoursFilet:")) {
     
    					if(hasToSetElement(name,getFBounds(Integer.parseInt(name.replace("AgendaJPanel -> center -> center -> center -> GridHours -> hoursFilet : ","")),false))){
    						child.setBounds(elements.get(name));
    						rr((Container) child);
    					}
     
    				} else if(name.contains("AgendaJPanel -> center -> center -> center -> GridHours -> alfHoursFilet : ")) {
     
    					if(hasToSetElement(name,getFBounds(Integer.parseInt(name.replace("AgendaJPanel -> center -> center -> center -> GridHours -> alfHoursFilet : ","")),true))){
    						child.setBounds(elements.get(name));
    						rr((Container) child);
    					}
     
    				} else if(name.equals("AgendaJPanel -> center -> center -> center -> GridHours -> JPanel Evenement : " )) {
     
    					if(hasToSetElement(name,getEvenementsBounds())){
    						child.setBounds(elements.get(name));
     
    						int i = 0;
    						for(Component e:((Container) child).getComponents()) {
    							((JComponent) e).setOpaque(true);
    							e.setBackground(new Color(i*10,i*30,0,200));
    							rr((Container) e);
    							i++;
    						}
    						rr((Container) child);
    					}
     
    				}
    				rr((Container) this);
    			}
    		}
     
    		g = null;
     
    	}
     
    	/**
             * Cette mesthode permet de définir si l'éléments necessite d'être redimentionné
             * @param name
             * @param r
             * @return
             */
    	public boolean hasToSetElement(String name, Rectangle r) {
    		if(!elements.containsKey(name) || !elements.get(name).equals(r)) {
    			elements.put(name,r);
    			return true;
    		}
    		return false;
    	}
     
     
    }

    Le code du composent posant problème

    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
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
     
    public class EvenementsComponent extends JPanelPattern implements Border {
    	private static final long serialVersionUID = 1L;
     
    	private boolean componentWasOpaque;
     
    	private JPanel center;
    	private Evenements evenement;
     
    	private Color borderColor;
    	private Color borderColorEventColor;
    	private Color curentBorderColor;
     
    	private Color defaultBackgroundColor;
    	private Color backgroundColor;
    	private Color backgroundEventColor;
     
    	private int thickness;
    	private int radius;
     
    	public EvenementsComponent(Evenements e) {
        	super();
        	// définition du baground par default Imortant en premier
            this.defaultBackgroundColor = getBackground();
            componentWasOpaque = isOpaque();
     
            // enregistrement de la référence de l'element
        	this.evenement = e;
     
        	// préparation des parametres du contener
            setLayout(new BorderLayout());
            setOpaque(false);
            setBorder(this);
            setName("AgendaJPanel -> center -> center -> center -> GridHours -> JPanel Evenement -> JPanel day -> Evenement : "+this.evenement.getId());
    		setBackground(this.evenement.getColor());
    		setBackgroundEventColor(Color.red);
            setBorder(Color.white,2);
            setBorderEventColor(Color.green);
            setRadius(3);
            setVerticalResisable(true);
            setVerticalDraggable(true);	
     
            // création des elements interne
            /*EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {*/
                	builder();
            	/*}
            });*/
        	addHierarchyBoundsListener(new ParentListener());
        }
     
    	//buildComponent
        private void builder() {
        	int t = this.thickness>3?this.thickness:3;
        	//Color dragColor = Color.green;
     
        	JPanel resizerNorth = new JPanel(new BorderLayout());
    		resizerNorth.setName(getName()+" -> nord");
    		//resizerNorth.setBackground(dragColor);
    		resizerNorth.setPreferredSize(new Dimension(getWidth(),t));
    		resizerNorth.addMouseListener(new CenterListener());
    		resizerNorth.addMouseMotionListener(new CenterListenerDrag());
    		resizerNorth.setOpaque(false);
     
    		JPanel resizerSouth = new JPanel(new BorderLayout());
    		resizerSouth.setName(getName()+" -> sud");
    		//resizerSouth.setBackground(dragColor);
    		resizerSouth.setPreferredSize(new Dimension(getWidth(),t));
    		resizerSouth.addMouseListener(new CenterListener());
    		resizerSouth.addMouseMotionListener(new CenterListenerDrag());
    		resizerSouth.setOpaque(false);
     
    		JPanel resizerEast = new JPanel(new BorderLayout());
    		resizerEast.setName(getName()+" -> east");
    		//resizerEast.setBackground(dragColor);
    		resizerEast.addMouseListener(new CenterListener());
    		resizerEast.addMouseMotionListener(new CenterListenerDrag());
    		resizerEast.setPreferredSize(new Dimension(t,getHeight()));
    		resizerEast.setOpaque(false);
     
    		JPanel resizerWest = new JPanel(new BorderLayout());
    		resizerWest.setName(getName()+" -> west");
    		//resizerWest.setBackground(dragColor);
    		resizerWest.addMouseListener(new CenterListener());
    		resizerWest.addMouseMotionListener(new CenterListenerDrag());
    		resizerWest.setPreferredSize(new Dimension(t,getHeight()));
    		resizerWest.setOpaque(false);
     
    		center = new JPanel(new BorderLayout());
    		center.setName(getName()+" -> center");
    		//center.setBackground(getBackground());
    		center.setPreferredSize(new Dimension(getWidth(),getHeight()-t*2));
    		center.addMouseListener(new CenterListener());
    		center.addMouseMotionListener(new CenterListenerDrag());
    		center.setOpaque(false);
     
    		if(this.evenement!=null) {
    			JLabel l = new JLabel("<html><body><span style=\"font-size:10px;\">"+this.evenement.getText()+"</span></body></html>",JLabel.LEFT);
    			l.setName(getName()+" -> center -> JLabel");
    			l.setVerticalAlignment(JLabel.TOP);
    			center.add(l,BorderLayout.CENTER);
    		}
     
    		this.add(resizerNorth, BorderLayout.NORTH);
    		this.add(resizerEast, BorderLayout.EAST);
    		this.add(center, BorderLayout.CENTER);
    		this.add(resizerWest, BorderLayout.WEST);
    		this.add(resizerSouth, BorderLayout.SOUTH);
     
    		setBounds();
        }
     
    	// setters && getter && has
    	public void setBorder(Color color) {
    		this.borderColor = color;
    		setCurentBorderColor(this.borderColor);
    	}
    	public void setBorder(Color color, int thickness) {
    		this.borderColor = color;
    		setCurentBorderColor(this.borderColor);
    		this.thickness = thickness;
    	}
    	public void setBorderThickness(int thickness) {
    		this.thickness = thickness;
    	}
    	public void setRadius(int radius) {
    		this.radius = radius;
    	}
    	public Color getBackgroundEventColor() {
    		return backgroundEventColor;
    	}
    	public void setBackgroundEventColor(Color color) {
    		this.backgroundEventColor = color;
    	}
    	public boolean hasBackgroundEventColor() {
    		return getBackgroundEventColor()!=null;
    	}
    	public Color getBorderEventColor() {
    		return borderColorEventColor;
    	}
    	public void setBorderEventColor(Color color) {
    		this.borderColorEventColor = color;
    	}
    	public boolean hasBorderEventColor() {
    		return getBorderEventColor()!=null;
    	}
    	@Override
    	public void setBackground(Color background) {
    		if(background!=null && this.defaultBackgroundColor!=null && !background.equals(this.defaultBackgroundColor)) {
    			if(hasBackgroundEventColor() && !background.equals(getBackgroundEventColor())) {
    				if(this.backgroundColor==null) this.backgroundColor = background;
    			} else if(!hasBackgroundEventColor() && this.backgroundColor==null) {
    				this.backgroundColor = background;
    			}
    		}
    		if(background==null) background=this.defaultBackgroundColor;
    		super.setBackground(background);
    	}
    	private Color getCurentBorderColor() {
    		return curentBorderColor;
    	}
    	private void setCurentBorderColor(Color curentBorderColor) {
    		this.curentBorderColor = curentBorderColor;
    	}
     
    	/**
             * Ecouteur du parent pour la mise a jour des dimentions de la grille si necessaire
             * @author germain
             *
             */
    	private class ParentListener implements HierarchyBoundsListener{
    		@Override
    		public void ancestorMoved(HierarchyEvent e) {}
    		@Override
    		public void ancestorResized(HierarchyEvent e) {
    			/*EventQueue.invokeLater(new Runnable() {
    	            @Override
    	            public void run() {*/
    	            	setBounds();
                	/*}
    	        });*/
    		}
    	}
     
     
    	// graphics
    	@Override
        public void paint(Graphics g) {
            g.setClip(new RoundRectangle2D.Double(0, 0, getWidth(), getHeight(), this.radius, this.radius));
            super.paint(g);
            super.paintBorder(g);
        }
        @Override
        protected void paintComponent(Graphics g) {
            if (componentWasOpaque) {
                g.setColor(getBackground());
                g.fillRoundRect(0, 0, getWidth(), getHeight(), this.radius, this.radius);
            }
            super.paintComponent(g);
        }
        @Override
        public Insets getBorderInsets(Component c) {
    		//int p = this.thickness/2>this.radius/4?this.thickness/2:this.radius/4+this.thickness/2;
    		int p2=0;
            return new Insets(p2,p2,p2,p2);
        }
        @Override
        public boolean isBorderOpaque() {
            return false;
        }
        public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
            Graphics2D g2 = (Graphics2D) g;
            g2.setColor(getCurentBorderColor());
            g2.setStroke(new BasicStroke(this.thickness));
            g2.draw(new Area(new RoundRectangle2D.Double(0, 0, width, height, this.radius, this.radius)));
            g2.setClip(null);
        }
     
        // definition des redimentionements/déplacements
     
        private boolean isVerticalDraggable = false;
        private boolean isHorizontalDraggable = false;
        private boolean isVerticalResisable = false;
    	private boolean isHorizontalResisable = false;
    	public boolean isVerticalResisable() {
    		return isVerticalResisable;
    	}
    	public void setVerticalResisable(boolean isVerticalResisable) {
    		this.isVerticalResisable = isVerticalResisable;
    	}
    	public boolean isHorizontalResisable() {
    		return isHorizontalResisable;
    	}
    	public void setHorizontalResisable(boolean isHorizontalResisable) {
    		this.isHorizontalResisable = isHorizontalResisable;
    	}
    	public void setVerticalDraggable(boolean isVerticalDraggable) {
    		this.isVerticalDraggable = isVerticalDraggable;
    	}
    	public boolean isVerticalDraggable() {
    		return isVerticalDraggable;
    	}
    	public boolean isHorizontalDraggable() {
    		return isHorizontalDraggable;
    	}
    	public void setHorizontalDraggable(boolean isHorizontalDraggable) {
    		this.isHorizontalDraggable = isHorizontalDraggable;
    	}
    	public boolean isDraggable() {
    		return isHorizontalDraggable() || isVerticalDraggable();
    	}
    	public boolean isResisable() {
    		return isVerticalResisable || isHorizontalResisable;
    	}
    	private boolean helper(Component comp, String pos) {
    		switch(pos) {
    			case "center":
    				return comp.getName().equals(pos) && (isVerticalDraggable() || isHorizontalDraggable());
    			case "nord":
    			case "sud":
    				return comp.getName().equals(pos) && isVerticalResisable();
    			case "east":
    			case "west":
    				return comp.getName().equals(pos) && isHorizontalResisable();
    			default : return false;
    		}
        }
     
    	//listeners vars and methods
     
        private boolean dragging = false;
    	private Rectangle position;
    	private Rectangle startDrag;
     
        private final class CenterListener extends MouseAdapter {
        	@Override
        	public void mouseEntered(MouseEvent e) {
        		Component comp = e.getComponent();
    			if(helper(comp,comp.getName())) comp.setCursor(new Cursor(Cursor.HAND_CURSOR));
    			comp = null;
        		super.mouseEntered(e);
        	}
    		@Override
    		public void mouseReleased(MouseEvent e) {
    			Component comp = e.getComponent();
    			if(helper(comp,comp.getName())) {
    				if(hasBorderEventColor()) setCurentBorderColor(borderColor);
    				if(hasBackgroundEventColor()) setBackground(backgroundColor);
    				dragging = false;
    				position = null;
    				startDrag = null;
    			}
    			comp = null;
    			super.mouseReleased(e);
    		}
    		@Override
    		public void mousePressed(MouseEvent e) {
    			Component comp = e.getComponent();
    			if(helper(comp,comp.getName())) {
    				if(hasBorderEventColor()) setCurentBorderColor(getBorderEventColor());
    				if(hasBackgroundEventColor()) setBackground(getBackgroundEventColor());
    				position = comp.getParent().getBounds();
    				startDrag = new Rectangle(e.getXOnScreen(),e.getYOnScreen(),e.getX(),e.getY());
    				dragging = true;
    			}
    			comp = null;
    			super.mousePressed(e);
    		}
    	}
     
    	private final class CenterListenerDrag implements MouseMotionListener {
    		@Override
    		public void mouseMoved(MouseEvent e) {}
    		@Override
    		public void mouseDragged(MouseEvent e) {
    			Component comp = e.getComponent();
     
    			// valide si l'element est actif
    			if(dragging && helper(comp,comp.getName())) {
     
    				Container parent = comp.getParent();
    				Container source = parent.getParent();
    				source.setComponentZOrder(parent, 0);
     
    				double y = position.getY();
    				double x = position.getX();
    				double height = position.getHeight();
    				double width = position.getWidth();
     
    				int ymin = 0;
    				int xmin = 0;
    				int ymax = source.getHeight();
    				int xmax = source.getWidth();
     
    				// selectionne l'action courante
    				if(helper(comp,"center")) {
     
    					if(isVerticalDraggable()) {
    						y = position.getY()+(e.getYOnScreen()-startDrag.getY());
    						if(y<ymin) y = ymin;
    						else if(y+height>=ymax) y = ymax-height;
    					}
     
    					if(isHorizontalDraggable()) {
    						x = position.getX()+(e.getXOnScreen()-startDrag.getX());
    						if(x<xmin) x = xmin;
    						else if(x+width>=xmax) x = xmax-width;
    					}
     
    				} else if(helper(comp,"nord")) {
     
    					double agrandissement = e.getYOnScreen()-startDrag.getY();
    					do{
    						y = position.getY()+agrandissement;
    						height = position.getHeight()-agrandissement;
    						if(y<ymin) agrandissement++;
    					} while(y<ymin);
    					do{
    						y = position.getY()+agrandissement;
    						height = position.getHeight()-agrandissement;
    						if(y>position.getY()+position.getHeight()-comp.getHeight()*2) agrandissement--;
    					} while(y>position.getY()+position.getHeight()-comp.getHeight()*2);
     
    				} else if(helper(comp,"sud")) {
     
    					double agrandissement = e.getYOnScreen()-startDrag.getY();
    					do{
    						height = position.getHeight()+agrandissement;
    						if(y+height>ymax) agrandissement--;
    					} while(y+height>ymax);
    					do{
    						height = position.getHeight()+agrandissement;
    						if(y+height<y+comp.getHeight()*2) agrandissement++;
    					} while(y+height<y+comp.getHeight()*2);
     
    				} else if(helper(comp,"west")) {
     
    					double agrandissement = e.getXOnScreen()-startDrag.getX();
    					do{
    						x = position.getX()+agrandissement;
    						width = position.getWidth()-agrandissement;
    						if(x<xmin) agrandissement++;
    					} while(x<xmin);
    					do{
    						x = position.getX()+agrandissement;
    						width = position.getWidth()-agrandissement;
    						if(x>position.getX()+position.getWidth()-comp.getWidth()*2) agrandissement--;
    					} while(x>position.getX()+position.getWidth()-comp.getWidth()*2);
     
    				} else if(helper(comp,"east")) {
     
    					double agrandissement = e.getXOnScreen()-startDrag.getX();
    					do{
    						width = position.getWidth()+agrandissement;
    						if(x+width>xmax) agrandissement--;
    					} while(x+width>xmax);
    					do{
    						width = position.getWidth()+agrandissement;
    						if(x+width<x+comp.getWidth()*2) agrandissement++;
    					} while(x+width<x+comp.getWidth()*2);
     
    				}
     
    				// mise a jour des elements
    				parent.setBounds(new Rectangle( (int) x, (int) y, (int) width, (int) height ));
    				updateBounds();
     
    				rr((Container) comp);
    				rr((Container) parent);
    				rr((Container) source);
     
    				comp = null;
    				parent = null;
    				source = null;
     
    			}
    		}
    	}
     
    	public void setBounds() {
    		if(this.evenement!=null && getParent()!=null) {
    			Rectangle r = this.evenement.getBounds(getParent().getWidth(), getParent().getHeight());
    			if(r!=null){
    				setBounds(r);
    				setPreferredSize(new Dimension(getWidth(),getHeight()));
    			}
     
    		}
    	}
     
    	public void updateBounds() {
    		this.evenement.setH1(getParent().getHeight(),getY());
    		this.evenement.setH2(getParent().getHeight(),getY()+getHeight());
    	}
     
    }

    Enfin, un trace de la hierarchie de mes composants avec les informations comme le Layout, PreferedSize ...

    => pour info, a chaque tabulation l'on entre dans un composants, et les noms des composants indiquent ou ils sont places dans le layout ....
    Je sais c'est un peu de l'araméen mais tout est logique! mdr

    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
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
     
    - getClass : vues.MasterFrame
    - getLayout : class java.awt.BorderLayout
    - getName : frame : 1464628812805
    - getComponentCount : 1
    - getPreferredSize : width=java.awt.Dimension[width=918,height=741]
    - Dimensions de l'élement : getWidth=918 getHeight=741
     
    |	- getClass : javax.swing.JRootPane
    |	- getLayout : class javax.swing.JRootPane$RootLayout
    |	- getName : null
    |	- getComponentCount : 2
    |	- getPreferredSize : width=java.awt.Dimension[width=902,height=702]
    |	- Dimensions de l'élement : getWidth=902 getHeight=702
     
    	|	- getClass : javax.swing.JPanel
    	|	- getLayout : class java.awt.FlowLayout
    	|	- getName : null.glassPane
    	|	- getComponentCount : 0
    	|	- getPreferredSize : width=java.awt.Dimension[width=10,height=10]
    	|	- Dimensions de l'élement : getWidth=902 getHeight=702
    	|	- isShowing : false
     
    	|	- getClass : javax.swing.JLayeredPane
    	|	- getLayout : aucun layout (null) 
    	|	- getName : null.layeredPane
    	|	- getComponentCount : 1
    	|	- getPreferredSize : width=java.awt.Dimension[width=1,height=1]
    	|	- Dimensions de l'élement : getWidth=902 getHeight=702
     
    		|	- getClass : javax.swing.JPanel
    		|	- getLayout : class java.awt.BorderLayout
    		|	- getName : contentPane : 1464628812805
    		|	- getComponentCount : 1
    		|	- getPreferredSize : width=java.awt.Dimension[width=902,height=702]
    		|	- Dimensions de l'élement : getWidth=902 getHeight=702
     
    			|	- getClass : javax.swing.JScrollPane
    			|	- getLayout : class javax.swing.ScrollPaneLayout$UIResource
    			|	- getName : scrollPane : 1464628812805
    			|	- getComponentCount : 3
    			|	- getPreferredSize : width=java.awt.Dimension[width=902,height=702]
    			|	- Dimensions de l'élement : getWidth=902 getHeight=702
     
    				|	- getClass : javax.swing.JViewport
    				|	- getLayout : class javax.swing.ViewportLayout
    				|	- getName : null
    				|	- getComponentCount : 1
    				|	- getPreferredSize : width=java.awt.Dimension[width=900,height=700]
    				|	- Dimensions de l'élement : getWidth=900 getHeight=700
     
    					|	- getClass : vues.AgendaJPanel
    					|	- getLayout : class java.awt.BorderLayout
    					|	- getName : AgendaJPanel
    					|	- getComponentCount : 3
    					|	- getPreferredSize : width=java.awt.Dimension[width=900,height=700]
    					|	- Dimensions de l'élement : getWidth=900 getHeight=700
     
    						|	- getClass : javax.swing.JPanel
    						|	- getLayout : class java.awt.BorderLayout
    						|	- getName : AgendaJPanel -> north
    						|	- getComponentCount : 1
    						|	- getPreferredSize : width=java.awt.Dimension[width=194,height=58]
    						|	- Dimensions de l'élement : getWidth=900 getHeight=58
     
    							|	- getClass : javax.swing.JLabel
    							|	- getLayout : aucun layout (null) 
    							|	- getName : AgendaJPanel -> north -> northLabel
    							|	- getComponentCount : 0
    							|	- getPreferredSize : width=java.awt.Dimension[width=194,height=58]
    							|	- Dimensions de l'élement : getWidth=900 getHeight=58			
     
    						|	- getClass : javax.swing.JPanel
    						|	- getLayout : class java.awt.BorderLayout
    						|	- getName : AgendaJPanel -> east
    						|	- getComponentCount : 0
    						|	- getPreferredSize : width=java.awt.Dimension[width=140,height=0]
    						|	- Dimensions de l'élement : getWidth=140 getHeight=642
     
    						|	- getClass : javax.swing.JPanel
    						|	- getLayout : class java.awt.BorderLayout
    						|	- getName : AgendaJPanel -> center
    						|	- getComponentCount : 3
    						|	- getPreferredSize : width=java.awt.Dimension[width=560,height=836]
    						|	- Dimensions de l'élement : getWidth=760 getHeight=642
     
    							|	- getClass : javax.swing.JPanel
    							|	- getLayout : class java.awt.BorderLayout
    							|	- getName : AgendaJPanel -> center -> north
    							|	- getComponentCount : 3
    							|	- getPreferredSize : width=java.awt.Dimension[width=392,height=42]
    							|	- Dimensions de l'élement : getWidth=760 getHeight=42
     
    								|	- getClass : javax.swing.JPanel
    								|	- getLayout : class java.awt.BorderLayout
    								|	- getName : AgendaJPanel -> center -> north -> west
    								|	- getComponentCount : 1
    								|	- getPreferredSize : width=java.awt.Dimension[width=19,height=17]
    								|	- Dimensions de l'élement : getWidth=19 getHeight=42
     
    									|	- getClass : javax.swing.JButton
    									|	- getLayout : aucun layout (null) 
    									|	- getName : AgendaJPanel -> center -> north -> west -> precedent
    									|	- getComponentCount : 0
    									|	- getPreferredSize : width=java.awt.Dimension[width=19,height=17]
    									|	- Dimensions de l'élement : getWidth=19 getHeight=42					
     
    								|	- getClass : javax.swing.JPanel
    								|	- getLayout : class java.awt.BorderLayout
    								|	- getName : AgendaJPanel -> center -> north -> east
    								|	- getComponentCount : 1
    								|	- getPreferredSize : width=java.awt.Dimension[width=19,height=17]
    								|	- Dimensions de l'élement : getWidth=19 getHeight=42
     
    									|	- getClass : javax.swing.JButton
    									|	- getLayout : aucun layout (null) 
    									|	- getName : AgendaJPanel -> center -> north -> east -> suivant
    									|	- getComponentCount : 0
    									|	- getPreferredSize : width=java.awt.Dimension[width=19,height=17]
    									|	- Dimensions de l'élement : getWidth=19 getHeight=42					
     
    								|	- getClass : javax.swing.JPanel
    								|	- getLayout : class java.awt.BorderLayout
    								|	- getName : AgendaJPanel -> center -> north -> center
    								|	- getComponentCount : 1
    								|	- getPreferredSize : width=java.awt.Dimension[width=354,height=42]
    								|	- Dimensions de l'élement : getWidth=722 getHeight=42
     
    									|	- getClass : javax.swing.JLabel
    									|	- getLayout : aucun layout (null) 
    									|	- getName : AgendaJPanel -> center -> north -> center -> label
    									|	- getComponentCount : 0
    									|	- getPreferredSize : width=java.awt.Dimension[width=354,height=42]
    									|	- Dimensions de l'élement : getWidth=722 getHeight=42				
     
    							|	- getClass : javax.swing.JPanel
    							|	- getLayout : class java.awt.BorderLayout
    							|	- getName : AgendaJPanel -> center -> center
    							|	- getComponentCount : 2
    							|	- getPreferredSize : width=java.awt.Dimension[width=560,height=754]
    							|	- Dimensions de l'élement : getWidth=760 getHeight=560
     
    								|	- getClass : javax.swing.JPanel
    								|	- getLayout : class java.awt.GridLayout
    								|	- getName : null
    								|	- getComponentCount : 8
    								|	- getPreferredSize : width=java.awt.Dimension[width=368,height=14]
    								|	- Dimensions de l'élement : getWidth=760 getHeight=14
     
    									|	- getClass : javax.swing.JLabel
    									|	- getLayout : aucun layout (null) 
    									|	- getName : AgendaJPanel -> center -> center -> north -> header  = 
    									|	- getComponentCount : 0
    									|	- getPreferredSize : width=java.awt.Dimension[width=0,height=0]
    									|	- Dimensions de l'élement : getWidth=95 getHeight=14
     
    									|	- getClass : javax.swing.JLabel
    									|	- getLayout : aucun layout (null) 
    									|	- getName : AgendaJPanel -> center -> center -> north -> header  = Lundi
    									|	- getComponentCount : 0
    									|	- getPreferredSize : width=java.awt.Dimension[width=25,height=14]
    									|	- Dimensions de l'élement : getWidth=95 getHeight=14
     
     
     
    									(...)
     
     
     
     
    								|	- getClass : vues.GridHours
    								|	- getLayout : aucun layout (null) 
    								|	- getName : AgendaJPanel -> center -> center -> center -> GridHours
    								|	- getComponentCount : 51
    								|	- getPreferredSize : width=java.awt.Dimension[width=560,height=740]
    								|	- Dimensions de l'élement : getWidth=760 getHeight=546
     
    									|	- getClass : javax.swing.JPanel
    									|	- getLayout : class java.awt.GridLayout
    									|	- getName : AgendaJPanel -> center -> center -> center -> GridHours -> JPanel Evenement : 
    									|	- getComponentCount : 8
    									|	- getPreferredSize : width=java.awt.Dimension[width=8,height=1]
    									|	- Dimensions de l'élement : getWidth=760 getHeight=526
     
    										|	- getClass : javax.swing.JPanel
    										|	- getLayout : aucun layout (null) 
    										|	- getName : AgendaJPanel -> center -> center -> center -> GridHours -> JPanel Evenement -> JPanel day : 0
    										|	- getComponentCount : 0
    										|	- getPreferredSize : width=java.awt.Dimension[width=1,height=1]
    										|	- Dimensions de l'élement : getWidth=95 getHeight=526
     
     
    										|	- getClass : javax.swing.JPanel
    										|	- getLayout : aucun layout (null) 
    										|	- getName : AgendaJPanel -> center -> center -> center -> GridHours -> JPanel Evenement -> JPanel day : 1
    										|	- getComponentCount : 24
    										|	- getPreferredSize : width=java.awt.Dimension[width=1,height=1]
    										|	- Dimensions de l'élement : getWidth=95 getHeight=526
     
    											|	- getClass : vues.EvenementsComponent
    											|	- getLayout : class java.awt.BorderLayout
    											|	- getName : AgendaJPanel -> center -> center -> center -> GridHours -> JPanel Evenement -> JPanel day -> Evenement : 169
    											|	- getComponentCount : 5
    											|	- getPreferredSize : width=java.awt.Dimension[width=0,height=0]
    											|	- Dimensions de l'élement : getWidth=0 getHeight=0
     
    												|	- getClass : javax.swing.JPanel
    												|	- getLayout : class java.awt.BorderLayout
    												|	- getName : AgendaJPanel -> center -> center -> center -> GridHours -> JPanel Evenement -> JPanel day -> Evenement : 169 -> nord
    												|	- getComponentCount : 0
    												|	- getPreferredSize : width=java.awt.Dimension[width=0,height=3]
    												|	- Dimensions de l'élement : getWidth=0 getHeight=3
     
     
    												|	- getClass : javax.swing.JPanel
    												|	- getLayout : class java.awt.BorderLayout
    												|	- getName : AgendaJPanel -> center -> center -> center -> GridHours -> JPanel Evenement -> JPanel day -> Evenement : 169 -> east
    												|	- getComponentCount : 0
    												|	- getPreferredSize : width=java.awt.Dimension[width=3,height=0]
    												|	- Dimensions de l'élement : getWidth=3 getHeight=-6
     
     
    												|	- getClass : javax.swing.JPanel
    												|	- getLayout : class java.awt.BorderLayout
    												|	- getName : AgendaJPanel -> center -> center -> center -> GridHours -> JPanel Evenement -> JPanel day -> Evenement : 169 -> center
    												|	- getComponentCount : 1
    												|	- getPreferredSize : width=java.awt.Dimension[width=0,height=-6]
    												|	- Dimensions de l'élement : getWidth=-6 getHeight=-6
     
    													|	- getClass : javax.swing.JLabel
    													|	- getLayout : aucun layout (null) 
    													|	- getName : AgendaJPanel -> center -> center -> center -> GridHours -> JPanel Evenement -> JPanel day -> Evenement : 169 -> center -> JLabel
    													|	- getComponentCount : 0
    													|	- getPreferredSize : width=java.awt.Dimension[width=148,height=16]
    													|	- Dimensions de l'élement : getWidth=-6 getHeight=-6
     
     
     
    												|	- getClass : javax.swing.JPanel
    												|	- getLayout : class java.awt.BorderLayout
    												|	- getName : AgendaJPanel -> center -> center -> center -> GridHours -> JPanel Evenement -> JPanel day -> Evenement : 169 -> west
    												|	- getComponentCount : 0
    												|	- getPreferredSize : width=java.awt.Dimension[width=3,height=0]
    												|	- Dimensions de l'élement : getWidth=3 getHeight=-6
     
     
    												|	- getClass : javax.swing.JPanel
    												|	- getLayout : class java.awt.BorderLayout
    												|	- getName : AgendaJPanel -> center -> center -> center -> GridHours -> JPanel Evenement -> JPanel day -> Evenement : 169 -> sud
    												|	- getComponentCount : 0
    												|	- getPreferredSize : width=java.awt.Dimension[width=0,height=3]
    												|	- Dimensions de l'élement : getWidth=0 getHeight=3
     
     
     
     
    											(...)
     
     
     
     
     
    										(...)
     
     
    									|	- getClass : javax.swing.JPanel
    									|	- getLayout : aucun layout (null) 
    									|	- getName : AgendaJPanel -> center -> center -> center -> GridHours -> hoursFilet : 0
    									|	- getComponentCount : 0
    									|	- getPreferredSize : width=java.awt.Dimension[width=1,height=1]
    									|	- Dimensions de l'élement : getWidth=0 getHeight=0
     
     
    									|	- getClass : javax.swing.JPanel
    									|	- getLayout : class java.awt.BorderLayout
    									|	- getName : AgendaJPanel -> center -> center -> center -> GridHours -> hoursJPanel : 0
    									|	- getComponentCount : 1
    									|	- getPreferredSize : width=java.awt.Dimension[width=24,height=21]
    									|	- Dimensions de l'élement : getWidth=0 getHeight=0
     
    										|	- getClass : javax.swing.JLabel
    										|	- getLayout : aucun layout (null) 
    										|	- getName : null
    										|	- getComponentCount : 0
    										|	- getPreferredSize : width=java.awt.Dimension[width=24,height=21]
    										|	- Dimensions de l'élement : getWidth=0 getHeight=0
     
     
     
    									|	- getClass : javax.swing.JPanel
    									|	- getLayout : aucun layout (null) 
    									|	- getName : AgendaJPanel -> center -> center -> center -> GridHours -> alfHoursFilet : 0
    									|	- getComponentCount : 0
    									|	- getPreferredSize : width=java.awt.Dimension[width=1,height=1]
    									|	- Dimensions de l'élement : getWidth=665 getHeight=2
     
     
    									|	- getClass : javax.swing.JPanel
    									|	- getLayout : class java.awt.BorderLayout
    									|	- getName : AgendaJPanel -> center -> center -> center -> GridHours -> alfHours : 0
    									|	- getComponentCount : 1
    									|	- getPreferredSize : width=java.awt.Dimension[width=34,height=16]
    									|	- Dimensions de l'élement : getWidth=95 getHeight=20
     
    										|	- getClass : javax.swing.JLabel
    										|	- getLayout : aucun layout (null) 
    										|	- getName : null
    										|	- getComponentCount : 0
    										|	- getPreferredSize : width=java.awt.Dimension[width=34,height=16]
    										|	- Dimensions de l'élement : getWidth=95 getHeight=20
     
     
     
    									|	- getClass : javax.swing.JPanel
    									|	- getLayout : aucun layout (null) 
    									|	- getName : AgendaJPanel -> center -> center -> center -> GridHours -> hoursFilet : 1
    									|	- getComponentCount : 0
    									|	- getPreferredSize : width=java.awt.Dimension[width=1,height=1]
    									|	- Dimensions de l'élement : getWidth=0 getHeight=0
     
     
    									|	- getClass : javax.swing.JPanel
    									|	- getLayout : class java.awt.BorderLayout
    									|	- getName : AgendaJPanel -> center -> center -> center -> GridHours -> hoursJPanel : 1
    									|	- getComponentCount : 1
    									|	- getPreferredSize : width=java.awt.Dimension[width=24,height=21]
    									|	- Dimensions de l'élement : getWidth=0 getHeight=0
     
    										|	- getClass : javax.swing.JLabel
    										|	- getLayout : aucun layout (null) 
    										|	- getName : null
    										|	- getComponentCount : 0
    										|	- getPreferredSize : width=java.awt.Dimension[width=24,height=21]
    										|	- Dimensions de l'élement : getWidth=0 getHeight=0
     
     
     
    									(...)
     
     
     
    							|	- getClass : javax.swing.JPanel
    							|	- getLayout : class java.awt.BorderLayout
    							|	- getName : AgendaJPanel -> center -> south
    							|	- getComponentCount : 0
    							|	- getPreferredSize : width=java.awt.Dimension[width=0,height=40]
    							|	- Dimensions de l'élement : getWidth=760 getHeight=40
     
     
     
    				|	- getClass : javax.swing.JScrollPane$ScrollBar
    				|	- getLayout : class com.sun.java.swing.plaf.windows.WindowsScrollBarUI
    				|	- getName : null
    				|	- getComponentCount : 2
    				|	- getPreferredSize : width=java.awt.Dimension[width=17,height=48]
    				|	- Dimensions de l'élement : getWidth=0 getHeight=0
    				|	- isShowing : false
     
    					|	- getClass : com.sun.java.swing.plaf.windows.WindowsScrollBarUI$WindowsArrowButton
    					|	- getLayout : aucun layout (null) 
    					|	- getName : null
    					|	- getComponentCount : 0
    					|	- getPreferredSize : width=java.awt.Dimension[width=5,height=5]
    					|	- Dimensions de l'élement : getWidth=0 getHeight=0
    					|	- isShowing : false
     
     
    					|	- getClass : com.sun.java.swing.plaf.windows.WindowsScrollBarUI$WindowsArrowButton
    					|	- getLayout : aucun layout (null) 
    					|	- getName : null
    					|	- getComponentCount : 0
    					|	- getPreferredSize : width=java.awt.Dimension[width=5,height=5]
    					|	- Dimensions de l'élement : getWidth=0 getHeight=0
    					|	- isShowing : false
     
     
     
    				|	- getClass : javax.swing.JScrollPane$ScrollBar
    				|	- getLayout : class com.sun.java.swing.plaf.windows.WindowsScrollBarUI
    				|	- getName : null
    				|	- getComponentCount : 2
    				|	- getPreferredSize : width=java.awt.Dimension[width=48,height=17]
    				|	- Dimensions de l'élement : getWidth=0 getHeight=0
    				|	- isShowing : false
     
    					|	- getClass : com.sun.java.swing.plaf.windows.WindowsScrollBarUI$WindowsArrowButton
    					|	- getLayout : aucun layout (null) 
    					|	- getName : null
    					|	- getComponentCount : 0
    					|	- getPreferredSize : width=java.awt.Dimension[width=5,height=5]
    					|	- Dimensions de l'élement : getWidth=0 getHeight=0
    					|	- isShowing : false
     
     
    					|	- getClass : com.sun.java.swing.plaf.windows.WindowsScrollBarUI$WindowsArrowButton
    					|	- getLayout : aucun layout (null) 
    					|	- getName : null
    					|	- getComponentCount : 0
    					|	- getPreferredSize : width=java.awt.Dimension[width=5,height=5]
    					|	- Dimensions de l'élement : getWidth=0 getHeight=0
    					|	- isShowing : false
     
     
     
    		|	
    	|	
    |

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    C'est probablement le fait que tu interviennes sur le clipping qui cause ton problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g.setClip(new RoundRectangle2D.Double(0, 0, getWidth(), getHeight(), this.radius, this.radius));
    Au lieu de forcer un clipping à la largeur du composant, base toi sur le clipping courant, ou fait l'intersection du ton clipping et le clipping courant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g.setClip(g.getClipBounds().intersection(new RoundRectangle2D.Double(0, 0, getWidth(), getHeight(), this.radius, this.radius)));
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 3
    Points : 7
    Points
    7
    Par défaut
    Bonsoir,

    Merci de cette réponse qui m'aurait mis sur la bonne piste.
    J'ai finalement trouvé l’origine du problème après de bonnes heures de recherche et à optimiser mon code, et il se situe bien là ou tu met le doigts mais ce n'est pas tout a fait cela.

    En fait j'ai commis 2 erreurs.

    La première se situe dans la méthode paintComponent et dans la méthode paint. J'appelle les supers constructeurs des deux méthodes à la fin, ce qui génère ce problème.
    Du coup en corrigeant cela je me retrouve bien avec les composants en dessous de la Scrollbar, a l’exception de leur contenus. ici le texte.

    Et la seconde erreur dans la méthode paintBorder. j'ai bêtement définit le clipping (setClip) a null... ce qui là aussi provoque un bug, et en retirant cette ligne tout rentre dans l'ordre.



    Ps => J'en profite vite fait pour vous prévenir que comme je n'avais pas posté depuis longtemps ici, ben j'ai fait un double post, mille excuse j'avais spoilé le message prévenant d'une modération... fait nouveau non? je n'avais pas ce souveniir

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

Discussions similaires

  1. [Swing] JPanel avec sa JScrollBar qui scrolle toute seule
    Par chcoust dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 22/11/2006, 14h37
  2. [Swing] Problème d'affichage dans un JScrollPane
    Par Adrien22 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 05/04/2006, 14h36
  3. [Swing] Problème avec un bean et un arraylist
    Par kikoufr dans le forum AWT/Swing
    Réponses: 16
    Dernier message: 30/09/2004, 09h08
  4. [Swing] problème d'affichage
    Par l'obstiné dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 21/08/2004, 18h05
  5. [SWING] Problème de rafraichissement
    Par david71 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 24/05/2004, 15h38

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