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 :

Polygone avec JPanel


Sujet :

AWT/Swing Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 82
    Par défaut Polygone avec JPanel
    Bonjour,

    je fais une application qui doit m'afficher un polygone. j'ai une classe qui me créer ce polygone et elle fonctionne bien. Le problème c'est que je n'arrive pas à mettre des composants à coté de ce polygone (boutons, bordures, images,..)

    voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    public class Polygon extends JPanel {
     
    	// Déclarer 2 tableaux pour les coordonnées
    		int x[], y[];
    		public void init()
    		{
    			// Définir la couleur de fond 
    			setBackground(Color.gray);
    			// Définir les coordonnées de chaque point du polygone
    			x = new int[8];
    			y = new int[8];
     
    			x[0] = 20;  y[0] = 100;
    			x[1] = 60;  y[1] = 50;
    			x[2] = 130; y[2] = 50;
    			x[3] = 170; y[3] = 100;
    			x[4] = 170; y[4] = 150;
    			x[5] = 130; y[5] = 200;
    			x[6] = 60;  y[6] = 200;
    			x[7] = 20;  y[7] = 150;
     
    		}
     
    		public void paint(Graphics g)
    		{
    			init();
    			// Tracer un polygone, basé sur les tableaux de coordonnées x[] et y[]
    			g.setColor(Color.red);
    			g.drawPolygon(x, y, x.length);
    		}
     
    		public static void main(String[] args) {
    			JFrame fen = new JFrame();
    			Polygon p = new Polygon();
    			p.setBorder(BorderFactory.createTitledBorder("Poste[]"));
    			p.add(new JButton("Difficile"));
    			fen.add(p);
    			fen.setSize(500,500);
    			fen.setVisible(true);
    		}
    }
    Par exemple, dans ce code j'essaie de mettre une bordure et un bouton dans mon polygone, qui est en faite un jpanel, mais sa m'affiche juste le polygone et rien d'autres.

    j'ai essayé en ajoutant un deuxieme 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
     
    public static void main(String[] args) {
    			JFrame fen = new JFrame();
     
    			Polygon p = new Polygon();		
    			JPanel d = new JPanel(); 
     
    			d.setBorder(BorderFactory.createTitledBorder("Poste[]"));
    			d.add(new JButton("Difficile"));
    			fen.add(p);
    			fen.add(d);
     
    			fen.setSize(500,500);
    			fen.setVisible(true);
    }
    et la sa ne m'affiche que le JPanel "d".
    En faite, c'est que le dernier composant que j'ajoute à ma fenêtre (ici fen.add(d)) qui est affiché.

    Comment je peux faire pour voir le polygone et mes autres composants dans ma fenêtre?

    Merci pour vos réponses.

  2. #2
    Membre éprouvé Avatar de Satch
    Homme Profil pro
    Hypnothérapeute - Magicien
    Inscrit en
    Mars 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Suisse

    Informations professionnelles :
    Activité : Hypnothérapeute - Magicien

    Informations forums :
    Inscription : Mars 2004
    Messages : 498
    Par défaut
    Par défaut, une JFrame utilise un BorderLayout, qui ne peut afficher qu'un composant par position (NORTH, SOUTH, EAST, WEST, et CENTER)

    quand tu fais un add sans rien spécifier, il est ajouté au CENTER (en remplaçant le précédent).
    Tu ne vois donc que le dernier composant ajouté.

    Pour pouvoir afficher plusieurs composants dans ta fenêtre, il faut utiliser un autre layout (GridBagLayout, FlowLayout, BoxLayout, etc...) avec un ptit myFrame.setLayout(tonLayout).

    Dans tous les cas, il faut bien garder à l'esprit que la disposition des composants dans une application Swing est gérée par les layouts. A toi de voir lequel correspond à ton besoin.

    https://docs.oracle.com/javase/tutor...ut/visual.html

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Et tu as un autre problème, c'est que ton composant Polygone n'a pas de taille, donc swing ne saura pas combien d'espace il devra lui attribuer. Tant qu'il lui donnait toute la fenêtre, tout allait bien, mais maintenant qu'il faut partager, comme il a une taille minimum de 0, il ne lui restera que les miettes.

    Tu dosi surcharger les méthode getMinimumSize() et getPreferredSize() pour qu'elles retournent des valeurs cohérentes.

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 82
    Par défaut
    Merci pour vos réponses.
    J'ai réussis à avoir tous mes composant. Par contre, j'ai un problème d'affichage de mon polygone. Il ne s'affiche pas en entier.

    Voici le main que j'ai modifié pour vous montrer mon 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
     
    	public static void main(String[] args) {
    			JFrame fen = new JFrame();
     
    			Polygon pol = new Polygon();
    			JPanel p1 = new JPanel(); 
    			JPanel p2 = new JPanel();
    			JPanel p3 =new JPanel();
     
    			//p3
    			JLabel image = new JLabel( new ImageIcon( "ressources/images/oui.png"));
    			image.setOpaque(true);
    			image.setBackground(Color.GREEN);
    			p3.add(image);
     
    			//p1
    			p1.add(new JButton("btn"));
     
    			//pol
    			pol.setMinimumSize(new Dimension(500, 300));
     
    			//p2
    			p2.setLayout(new GridLayout(1, 2));
    			p2.setBorder(BorderFactory.createTitledBorder("p2"));
    			p2.add(pol);
    			p2.add(p1);
    			p2.add(p3);
    			fen.add(p2);
     
    			//s
    			JPanel s = new JPanel();
    			s.add(new JButton("mon bouton"));
    			s.setBorder(BorderFactory.createTitledBorder("s"));
    			fen.add(s);
     
    			//fenetre
    			fen.setLayout(new GridLayout(1, 2));
    			fen.setSize(700,400);
    			fen.setVisible(true);
    	}
    et voici le résultat:
    Nom : Sans titre.png
Affichages : 389
Taille : 7,3 Ko

    j'ai l'impression que le setMinimumSize n'est pas pris en compte.
    Qu'est ce que je dois faire pour avoir le polygone en entier sans modifier la taille de ma fenêtre?

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    commence par essayer ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    			pol.setMinimumSize(new Dimension(500, 300));
    			pol.setPreferredSize(new Dimension(500, 300));
    Le preferredSize, quand il est applicable a priorité sur le minimumsize.

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 82
    Par défaut
    j'ai essayé mais sa ne change rien au résultat

  7. #7
    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 : 55
    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
    Billets dans le blog
    2
    Par défaut
    L'organisation de tes layouts font que tu as 2 colonnes (2 même largeur) qui contient à gauche un panel avec 3 colonnes de même largeur, dont la première contient le panel qui dessine le polygone.

    Un GridLayout occupe la place qu'on lui donne et la répartit de manière égale entre toutes les colonnes en horizontal (et entre toutes les lignes en verticale). Agrandis ta fenêtre et tu verras ton polygone apparaître en entier.

    Tu peux voir exactement la place que prend ton panel Polygone en lui donnant un background visible (genre Color.YELLOW) et en veillant à bien appeller super.paint(Graphics) dans la méthode paint de Polygon.

    Ou essaye de faire des GridLayout à une seule colonne et plusieurs lignes (inverser les deux paramètres par exemple) : tu verras qu'ils prennent tous toute la largeur disponible dans la JFrame.

    En fait, il faut que tu revoies tous l'agencement. Déjà, un GridLayout, soit tu donnes le nombre de lignes, soit tu donnes le nombre de colonnes : si tu donnes les deux, les colonnes sont ignorées) : c'est pour ça que tu as trois colonnes, alors que tu as dit que tu en voulais 2 (comme tu as dis que tu voulais 1 ligne, tu as une seule ligne, et le troisième composant ne passe pas en dessous).
    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.

  8. #8
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 82
    Par défaut
    J'ai enfin réussi à avoir ce que je voulais.

    J'ai laissais tomber gridLayout, j'utilise BorderLayout et sa marche nickel.

    Merci pour votre aide.

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

Discussions similaires

  1. problème avec JPanel
    Par sky88 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 04/08/2008, 15h04
  2. Débuts laborieux avec JPanel
    Par Foxynoux dans le forum AWT/Swing
    Réponses: 10
    Dernier message: 09/06/2008, 11h52
  3. Envellope d'un polygone avec anneau
    Par Graffito dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 08/01/2008, 15h23
  4. Réponses: 2
    Dernier message: 06/08/2007, 16h28
  5. JDialog avec JPanel variable
    Par Orian dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 26/03/2007, 20h27

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