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 :

Des JPanel dans un JPanel avec un BoxLayout dans un JScrollPane


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 26
    Points : 11
    Points
    11
    Par défaut Des JPanel dans un JPanel avec un BoxLayout dans un JScrollPane
    Bonjour à tous,

    Je me suis récemment mit à apprendre le Java. Pour m’entraîner, j'ai décidé de réaliser une sorte de mini-chat. Je suis en ce moment sur la GUI et j'ai un petit problème.

    J'aimerais avoir les messages du chat dans des JPanel, eux même mit dans un JPanel qui sert de "View" au JScrollPane. Les messages (donc les JPanel) sont centré horizontalement et chacun au dessus de l'autre, j'ai donc mit un BoxLayout dans le JPanel servant de "View" au JScrollPane. Les messages sont de taille variable, donc, les JPanel accueillant les messages sont de taille variable en hauteur, donc pas de setPreferredSize(). Voici schéma vous montrent le résultat final que je désirerait atteindre :
    Nom : helpSDZ.jpg
Affichages : 252
Taille : 19,4 Ko
    Pour le moment, voici mon code :

    CenterPanel (hérité de JScrollPane) :
    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
    import java.awt.Color;
     
    import javax.swing.Box;
    import javax.swing.BoxLayout;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.border.EmptyBorder;
     
     
    public class CenterPanel extends JScrollPane{
    	private JPanel view = new JPanel();
     
    	public CenterPanel()
    	{
    		super(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
     
    		setViewportView(view);
    		setBackground(Color.decode("#e9e9e9"));
    		view.setBackground(Color.decode("#e9e9e9"));
    		setBorder(new EmptyBorder(0, 3, 0, 3)); // Pour avoir des marges sur les côtés de la fenêtre
     
    		view.setLayout(new BoxLayout(view, BoxLayout.PAGE_AXIS));
    	}
     
     
    	public void addMessage(MessagePanel pMessage)
    	{
    		Box horizontalBox = Box.createHorizontalBox(); //Pour centrer les JPanel contenant les messages
    		horizontalBox.add(pMessage);
     
    		view.add(horizontalBox);
    	}
    }
    MessagePanel (JPanel qui contiendra les messages) :
    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
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.RenderingHints;
     
    import javax.swing.JPanel;
    import javax.swing.border.EmptyBorder;
     
     
    public class MessagePanel extends JPanel{
    	public MessagePanel()
    	{
    		setBorder(new EmptyBorder(0, 0, 5, 0)); // Pour avoir une marge de 5 pixels entre chaque message
    		//setPreferredSize(new Dimension(200, 50)); // Pour faire le test sur le JScrollPane pour voir si la scrollbar vertical s'affiche
    		setBackground(Color.WHITE);
    	}
    }
    Et une partie (la partie ou je créé et ajoute mon JScrollPane) de ma classe contenant ma fenêtre, MainWindow :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [...]
     
    CenterPanel centerPan = new CenterPanel();
        centerPan.addMessage(new MessagePanel());
        centerPan.addMessage(new MessagePanel());
        centerPan.addMessage(new MessagePanel());
        centerPan.addMessage(new MessagePanel());
        centerPan.addMessage(new MessagePanel());
        centerPan.addMessage(new MessagePanel());
        centerPan.addMessage(new MessagePanel());
     
    mainPan.add(centerPan, BorderLayout.CENTER);
     
    [...]
    Alors, déjà, quand je ne met pas de setPreferredSize() au JPanel de mes messages, la scrollbar vertical ne veux rien savoir, elle ne s'affiche pas. Par contre, quand je met des setPreferredSize() au JPanel de mes messages, la scrollbar s'affiche, mais premièrement, je ne souhaite et ne peux pas mettre de taille à met messages, car je ne connais pas la taille du messages que je vais recevoir (c'est un chat xD), et deuxièmement les marges ne se mettent même pas (marge réalisé par setBorder(new EmptyBorder(....)).

    Voilà, si vous auriez une idée pour m'aider, régler mon problème, même si il faut que je suivent un autre chemin, je suis preneur. Aide anglaise ou française, aucun problème

    Je vous remercie d'avance, et vous souhaites une bonne soirée, journée, ou nuit à vous (oui, j'aime faire dans le désordre, et alors).

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 26
    Points : 11
    Points
    11
    Par défaut
    Petit up ?

Discussions similaires

  1. Comment linker avec odbc32.lib dans le code ? (avec gcc)
    Par _Audrey_ dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 06/11/2008, 17h40
  2. Réponses: 6
    Dernier message: 20/05/2008, 12h57
  3. Réponses: 2
    Dernier message: 19/05/2008, 13h56
  4. Réponses: 1
    Dernier message: 04/05/2007, 14h31
  5. Réponses: 3
    Dernier message: 01/06/2006, 19h45

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