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 :

Affichage JComponent dans un JPanel


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 13
    Points : 13
    Points
    13
    Par défaut Affichage JComponent dans un JPanel
    Bonjour,
    j'ai un petit problème surement tout bête, mais j'arrive pas à le résoudre.
    donc j'ai fait une classe Ligne qui est juste un drawline personnalisé.
    voila le 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
    public class Ligne extends JComponent{
     
    	/**
             * 
             */
    	private static final long serialVersionUID = -5366088572063284316L;
    	Point p1;
    	Point p2;
    	protected Color couleurTrait = Color.black;
     
    	Ligne(Point p1, Point p2){
    		super();
    		this.p1 = p1;
    		this.p2 = p2;
     
    	}
     
     
     
    	public void  paintComponent(Graphics g){
    		 super.paintComponent(g);
    		 g.setColor(couleurTrait);
     
    		 Graphics2D gr = (Graphics2D) g;
     
    		 gr.draw(new Line2D.Double(p1.getCX(),p1.getCY(),p2.getCX(),p2.getCY()));
    	   }
    et mon autre classe, qui fait office de fenêtre, avec un JPanel.
    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
     
    public class MapGraphique extends JFrame{
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 3230617590777220387L;
    	JPanel map;
     
     
     
    	public MapGraphique(){
    		this.setSize(500,500);
    		map = new JPanel();
    		this.setTitle("Simulation");
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		map.setSize(this.getHeight(), this.getWidth());
    		this.getContentPane().add(map);
    	}
     
     
     
    	void init(MapCalcul mapCalcul){
     
    		Point p1 = new Point(0,0);
    		Point p2 = new Point(500,500);
    		Ligne l = new Ligne(p1, p2);
    map.add(l);
    		map.setBackground(Color.white);
     
    		map.repaint();
    		map.setVisible(true);
    		this.setVisible(true);
     
     
     
    	}
     
     
    	public static void main(String args[]) {
    		MapGraphique mapGraphique = new MapGraphique();
    		MapCalcul mapCalcul = new MapCalcul();
    		mapGraphique.init(mapCalcul);
    	}
     
    }
    Le but de ce code, c'est d'afficher des lignes, pour dessiné une matrice, mais je remarque que la méthode paintComponent de ligne est bien appelé (si je met un Print dedans) , mais elle ne dessine pas les lignes.

    Pour quel raison? j'avoue que le Graphique en Java me prend un peu la tête.

    Merci de votre réponse.

    Edit : Resolu, il me fallait un map.setLayout(new BorderLayout());

  2. #2
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Ton composant Ligne ne définit pas de preferredSize (qui devrait être basée à minima sur l'espacement entre les points, plus une marge éventuelle autours).

    Or tu ajoute ce composant à un JPanel dont le layout par défaut est un FlowLayout.

    Si l'on regarde dans le tuto Oracle sur le FlowLayout, on trouve ça:
    The FlowLayout class puts components in a row, sized at their preferred size.
    Ton composant ayant un preferredSize de [0,0], il est normal que rien ne soit affiché.

    Donc, soit tu utilises un BorderLayout pour ton JPanel, et tu mets ton composant Ligne au centre (le BorderLayout donnant tout l'espace disponible au composant placé en son centre), soit tu redéfinis la méthode getPreferredSize de ton composant ligne pour qu'elle renvoie une taille appropriée pour ton composant (solution la plus propre, bien évidemment).

Discussions similaires

  1. Placement JComponent dans un JPanel
    Par Deign dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 10/05/2011, 00h05
  2. Affichage image dans un JPanel
    Par Revan dans le forum 2D
    Réponses: 2
    Dernier message: 02/01/2008, 21h52
  3. Ajouter un JComponent dans un JPanel est ce possible?
    Par jlassiramzy dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 23/04/2007, 21h02
  4. Affichage d'image dans un Jpanel
    Par vince351 dans le forum AWT/Swing
    Réponses: 13
    Dernier message: 22/03/2007, 11h27
  5. DrawString et affichage dans un JPanel
    Par Flophx dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 06/05/2006, 18h38

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