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 :

Utilisation de frame.add()


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 2
    Par défaut Utilisation de frame.add()
    Bonjour,

    je suis plutôt novice en Java, et je souhaite afficher plusieurs éléments (des petites croix rouges) dans une fenêtre. Malheureusement, seul le dernier de mes appels de frame.add() semble être pris en compte puisque seule la dernière croix s'affiche. Or, le code suivant affiche bien deux boutons, mais une seule des deux croix s'affiche.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    frame.add(new JButton("OK"),BorderLayout.NORTH);
    frame.add(new JButton("OK"),BorderLayout.SOUTH);
    frame.add(new JPoints(5,5))
    frame.add(new JPoints(10,5))
    Ma question est donc : pourquoi les deux boutons s'affichent-ils, alors qu'une seule des deux croix ne s'affiche? Et comment faire pour que les deux croix s'affichent? Je suppose que le problème vient de ma méconnaissance du fonctionnement de JFrame, et j'aimerais mieux le comprendre.

    Voici le code des trois classes principalement utilisées. Merci d'avance pour vos réponses !

    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
    import java.awt.BorderLayout;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
     
    public class Afficheur {
     
    	public static void main(String[] args) {
    		Carte excarte = new Carte();
    		excarte.noeuds.put("2", new Caracteristiques(20,30));
    		excarte.noeuds.put("1", new Caracteristiques(4,5));
    		int largeur = 300;
    		int hauteur = 300;
    		JFrame frame = new JFrame("Ma Carte");
    		frame.setSize(largeur,hauteur);
    		frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
     
    		for (int i = 1; i<=excarte.noeuds.size(); i++) {
    			frame.add(new JPoints(excarte.noeuds.get(String.valueOf(i)).lat,excarte.noeuds.get(String.valueOf(i)).lon));
    		}
    		frame.setVisible(true);
     
    	}
     
    }
    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 javax.swing.JComponent;
    import javax.swing.JFrame;
     
    public class JPoints extends JComponent {
    	private static final PointsUI UI = new PointsUI();
     
    	public JPoints(double x, double y) {
    		UI.x = (int)x;
    		UI.y = (int)y;
    		setUI(UI);
    		}
     
    	public static void display(JFrame frame, double x, double y) {
    	    frame.add(new JPoints(x,y));
    	    frame.setVisible(true);
    	  }	
    }
    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
    import java.awt.Color;
    import java.awt.Graphics;
     
    import javax.swing.JComponent;
    import javax.swing.plaf.ComponentUI;
     
     
    public class PointsUI extends ComponentUI {
    		  int x,y;
     
     
    		  @Override
    		  public void paint(Graphics g, JComponent compo) {
    		  JPoints c = (JPoints)compo;
    		  Color oldColor=g.getColor();
    		  g.setColor(Color.RED);
    		  g.drawLine(x-2,y-2,x+2, y+2);
    		  g.drawLine(x-2,y+2,x+2,y-2);
    		  g.setColor(oldColor);
    		  }
    }

  2. #2
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Bonjour, à mon avis c'est un problème de layout, je ne sais pas si c'est exactement ce que tu veux, mais tu devrais essayer essayer le FlowLayout.
    (index des layouts)

  3. #3
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Le layout par défaut de la frame est le BorderLayout, si tu ne spécifies pas d'emplacement BorderLayout.[position], par défaut ça prend CENTER. Si tu met 2 fois quelque chose dans CENTER, ça va ne conserver que le dernier (écrasement).
    D'où ton problème.

  4. #4
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 55
    Par défaut
    Bonjour à tous,
    question toute bête mais ne vaut il pas mieux ajouter les composants au contentPane plutôt que directement au Frame ?

  5. #5
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par CoZo Voir le message
    Bonjour à tous,
    question toute bête mais ne vaut il pas mieux ajouter les composants au contentPane plutôt que directement au Frame ?
    C'est pareil.
    La méthode JFrame#add(...) est un wrapper pour JFrame#getContentPane()#add(...).

  6. #6
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 2
    Par défaut
    Merci pour vos réponses.

    J'ai résolu mon problème, non pas en changeant de layout (puisque je veux pouvoir afficher mes petites croix n'importe où sur l'écran, éventuellement en les superposant, et non pas les unes à côté des autres), mais en intégrant ma boucle for directement dans PointsUI, et en remplaçant frame.add(...) par g.drawLine(...) .

    Cependant cette solution me chagrine un peu, puisque j'utilise un mélange d'AWT (java.awt.Graphics) et de Swing (javax.swing.JComponent entre autres), alors que je lis un peu partout que c'est à éviter. Auriez-vous des idées pour résoudre ce problème?

Discussions similaires

  1. [jsp] Utiliser des frames
    Par parasol007 dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 22/05/2006, 10h39
  2. [tuto]Utilisation de date_chooser Add in
    Par Nicko29 dans le forum Access
    Réponses: 5
    Dernier message: 02/04/2006, 10h00
  3. [débutant] Ne pas utiliser les frames ?
    Par Pigoulou dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 13/02/2006, 10h09
  4. Utilisation des frames
    Par bchass dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 08/01/2006, 23h13
  5. Utiliser les frames
    Par laury dans le forum Composants VCL
    Réponses: 5
    Dernier message: 10/05/2003, 10h14

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