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

2D Java Discussion :

[Swing]Insertion JComponent perso dans JPanel impossible


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut [Swing]Insertion JComponent perso dans JPanel impossible
    Bonjour tout le monde, je cherche à créer un JComponent, que j'ai appelé "TraceCourbe" qui m'affiche des lignes et des points, histoire d'afficher des trajectoires.
    Et je rencontre actuellement un problème bizarre, c'est-à-dire que si j'insère une instance de ce JComponent directement dans une JFrame, ça marche nickel, par contre pas moyen de le faire apparaître dans un JPanel... or c'est là que j'en aurais besoin !

    Je vous donne le code, vraiment basique :
    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
     
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import javax.swing.JComponent;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    public class TraceCourbe extends JComponent
    {
    	private HistPositions liste;
    	private Color couleur;
     
     
        public TraceCourbe (HistPositions list,Color couleur)
        {
            super();
            liste = list;
            this.couleur=couleur;
     
        }
        protected void paintComponent (Graphics g)
        {
            // Appel de la méthode dans la classe mère
            super.paintComponent (g);     
            // On peut tracer les points
            g.setColor (couleur);
            Position pos = liste.getFirst();
            int lati1,longi1,lati2,longi2;
            while(pos.getNext()!=null)
            {
                lati1 = (int)(pos.getVal()[0]);
                longi1 =(int)( pos.getVal()[1]);
                pos=pos.getNext();
                lati2= (int)(pos.getVal()[0]);
                longi2 = (int)(pos.getVal()[1]);
                g.fillOval(lati1, longi1, 16, 16);
                g.drawLine ( (lati1),  (longi1),  (lati2),  (longi2));
                g.fillOval(lati2, longi2, 16, 16);
            }
        }
        public static void main (String[] args)
        {
    // J'ai mis ici un jeu de test, avec juste trois positions
     
        	Position pos1 = new Position (100,100);
        	Position pos2 = new Position (200,200);
        	Position pos3 = new Position (150,200);
        	HistPositions ListPos = new HistPositions();
        	ListPos.insertFirst(pos1);
        	ListPos.insertFirst(pos2);
        	ListPos.insertFirst(pos3);
        	TraceCourbe tr= new TraceCourbe(ListPos, Color.black);
        	JFrame frame = new JFrame ("TraceCourbe");
        	frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        	frame.setSize (new Dimension (500, 500));
      // Insertion du TraceCourbe :
        	frame.getContentPane().add(tr);
        	// => ça marche
        	JPanel pane = new JPanel();
        	frame.add(pane);
        	pane.setLocation(0,0);
        	pane.setSize(new Dimension(300,300));
        	pane.add (tr);
        	// =>ça ne marche pas
        	frame.setVisible (true);
     
        }
    }
    Je vous serais vraiment reconnaissant de me dire ce qui cloche dans ce code !
    Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Ton composant n'a pas de taille -_-'
    Dans ton premier cas tu utilises la partie centrale d'un BorderLayout et dans le second cas un FlowLayout.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci pour votre réponse !
    Le fait de rajouter une taille à mon composant n'a rien changé, ça ne le fait pas apparaître. En revanche, j'ai mis un border layout dans mon JPanel, et là, mon composant apparaît ! J'ai rajouté deux lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    JPanel pane = new JPanel();
        	frame.add(pane);
        	pane.setLocation(0,0);
        	pane.setSize(new Dimension(300,300));
        	BorderLayout layout1 = new BorderLayout();
        	pane.setLayout(layout1);
        	pane.add(tr);
    Bon je me suis rendu compte que si je mettais un GroupLayout, ce que je vais utiliser dans mon interface finale, mon composant apparaît aussi.
    Cependant dans mon interface finale il n'apparaît pas.
    C'est du à quoi réellement le fait que selon les layout il apparait ou pas ?
    Merci !

  4. #4
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Les layout règlent la position (location) et la taille (dimension) - ou les limites (bounds) - des composants - et parfois du conteneur lui-même - en fonction de contraintes.
    Pour les conteneurs, le layout est utilisé pour connaitre la taille minimale, maximale et préferrée quand elle ne sont pas spécifiées explicitement.

    Certains layout comme le FlowLayout ne calcule pas de taille et utilise la taille par préférre et positiones les composants les uns après les autres dans la limite de la largeur disponible, revient ensuite à la ligne.
    Le BorderLayout lui découpe l'espace en six (les quatre coins, les quatre bords et le centre). En gros le centre prend le plus de place possible, les bords latéraux prennent toute la hauteur avec une largeur réduite et les deux bords prennent toute la largeur avec une hauteur réduite et pour les coins il utilise la place qui reste (hauteur/largeur déterminé par les bords).

    Dans ton exemple tu set uniquement la taille du conteneur et pas celle de ton composant. De toutes façon le border layout est plus adapté à ton besoin.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  5. #5
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 43
    Par défaut
    bonjour,

    j'ai un probleme analogue au tient j'aurai une question concernant ta structure de données: j'ai l'impression que ta classe HisPositions doit etre la liste des positions latitudes longitudes et j'ai l 'impression que t as utilisé une liste comment fais tu dans ce cas pour distinguer les latitudes des longitudes si t as beaucoup de données? puis je voir ta classe? merci

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/11/2013, 13h44
  2. Insertion des composants dans une JPanel
    Par altaro dans le forum Débuter
    Réponses: 3
    Dernier message: 11/05/2009, 19h25
  3. Problem d'insertion d'image dans un Jpanel
    Par taouja dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 27/04/2007, 11h42
  4. [SWING] JFrame dans JPanel = possible?
    Par rprom1 dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 22/03/2006, 16h03
  5. Problème avec l'insertion d'une image dans JPanel
    Par anutka dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 16/03/2006, 10h02

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