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 :

Problème avec getLocation: coordonnées d'un composant


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    65
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 65
    Par défaut Problème avec getLocation: coordonnées d'un composant
    Bonjour,

    J'utilise getLocation pour avoir les coordonnées d'un JTextField mais ça me renvoit toujours (0,0) !! Est ce que le layout (FlowLayout dans mon cas) à quelquechose à avoir la dedans ? Sinon comment récupérer les coordonnées d'un composant par rapport au composant qui le contient ?

    Merci.

  2. #2
    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
    getLocation renvoie les coordonnées du composant par rapport à son parent mais dans un layout ça n'a pas vraiment de signification car la position d'un composant dans son parent direct n'est pas très pertinente.

    Par contre j'utilise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rectangle coords = SwingUtilities.convertRectangle(comp, new Rectangle(0, 0, 0, 0), contentPane);
    Pour récupérer les coordonnées d'un composant dans un parent donné, ici le contentPane.

  3. #3
    Membre confirmé
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    65
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 65
    Par défaut
    Cela me donne toujours (0,0) pour les coordonnées

    Je pense que la méthode getLocation renvoi toujours (0,0) jusqu'à ce que l'on fait un appel à setLocation (à confirmer)

  4. #4
    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 restricteur Voir le message
    Cela me donne toujours (0,0) pour les coordonnées
    Dans un layout manager ça a peu de chances de renvoyer autre chose car le positionnement est géré par le layout. Utilise ma méthode pour avoir la position d'un composant par rapport à un conteneur.

  5. #5
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Citation Envoyé par natha Voir le message
    Dans un layout manager ça a peu de chances de renvoyer autre chose car le positionnement est géré par le layout.
    Justement, c'est le layout qui affecte la position et la taille des composants qu'il gère, grâce à la méthode setBounds() qu'il appelle sur chacun d'eux.

  6. #6
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Citation Envoyé par restricteur Voir le message
    Cela me donne toujours (0,0) pour les coordonnées

    Je pense que la méthode getLocation renvoi toujours (0,0) jusqu'à ce que l'on fait un appel à setLocation (à confirmer)
    Est ce que ta fenêtre est visible ?
    Poste un peu de code pour voir.

  7. #7
    Membre confirmé
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    65
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 65
    Par défaut
    Je crois que j'ai trouvé le problème voici du code qui facilitera la compréhension :

    Première classe

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    package test;
     
    import java.awt.FlowLayout;
    import java.awt.Rectangle;
    import javax.swing.SwingUtilities;
     
    public class Fenetre extends javax.swing.JFrame {
     
        /** Creates new form Fenetre */
        public Fenetre() {
            initComponents();
     
            FlowLayout fl = new FlowLayout(FlowLayout.CENTER);
     
            jPanel1.setLayout(fl);
     
            combo com = new combo(jPanel1);
     
            pack();
     
            //get location
            System.out.println("b1 : "+com.get(1).getLocation());
            System.out.println("b2 : "+com.get(2).getLocation());
            System.out.println("b3 : "+com.get(3).getLocation());
     
            //La méthode natha
            Rectangle coords = SwingUtilities.convertRectangle(com.get(1), new Rectangle(0, 0, 0, 0), jPanel1);
            System.out.println("b1*: "+coords);
            coords = SwingUtilities.convertRectangle(com.get(2), new Rectangle(0, 0, 0, 0), jPanel1);
            System.out.println("b2*: "+coords);
            coords = SwingUtilities.convertRectangle(com.get(3), new Rectangle(0, 0, 0, 0), jPanel1);
            System.out.println("b3*: "+coords);
     
            setVisible(true);
        }
     
        /** This method is called from within the constructor to
         * initialize the form.
         * WARNING: Do NOT modify this code. The content of this method is
         * always regenerated by the Form Editor.
         */
        // <editor-fold defaultstate="collapsed" desc="Generated Code">
        private void initComponents() {
     
            jPanel1 = new javax.swing.JPanel();
     
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
     
            org.jdesktop.layout.GroupLayout jPanel1Layout = new org.jdesktop.layout.GroupLayout(jPanel1);
            jPanel1.setLayout(jPanel1Layout);
            jPanel1Layout.setHorizontalGroup(
                jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(0, 380, Short.MAX_VALUE)
            );
            jPanel1Layout.setVerticalGroup(
                jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(0, 278, Short.MAX_VALUE)
            );
     
            org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(layout.createSequentialGroup()
                    .addContainerGap()
                    .add(jPanel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addContainerGap())
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
                .add(layout.createSequentialGroup()
                    .addContainerGap()
                    .add(jPanel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addContainerGap())
            );
     
            pack();
        }// </editor-fold>
     
        /**
         * @param args the command line arguments
         */
        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new Fenetre().setVisible(true);
                }
            });
        }
     
        // Variables declaration - do not modify
        private javax.swing.JPanel jPanel1;
        // End of variables declaration
     
    }
    La classe combo (comprend trois boutons)

    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
     
    package test;
     
    import javax.swing.JButton;
    import javax.swing.JPanel;
     
    public class combo {
     
        public combo(JPanel jp)
        {
            b1 =new JButton("b1");
            b2 =new JButton("b2");
            b3 =new JButton("b3");
     
            jp.add(b1);
            jp.add(b2);
            jp.add(b3);
     
            System.out.println("b1 dans  combo "+b1.getLocation());
            System.out.println("b2 dans  combo "+b2.getLocation());
            System.out.println("b3 dans  combo "+b3.getLocation());
     
        }
     
        JButton get(int i)
        {
            if(i==1)    return b1;
            if(i==2)    return b2;
            if(i==3)    return b3;
            return      null;
        }
        private JButton b1 =new JButton("b1");
        private JButton b2 =new JButton("b2");
        private JButton b3 =new JButton("b3");
    }
    et finalement la classe main :

    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
     
    package test;
     
    public class Main {
     
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            // TODO code application logic here
     
            new Fenetre();
     
        }
     
    }
    Mon problème est que j'aimerai avoir la position de chaque bouton mais au sein même du constructeur de la classe combo, chose qui est impossible parce que la méthode pack() n'a pas encore été invoquée (d'ailleurs si vous l'enlevez du code de la classe fenetre alors toutes les méthodes retourneront des zéros).

    Merci pour m'avoir fais réfléchir sur cela

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/12/2006, 23h02
  2. Problème avec la création d'un composant
    Par jeromelef dans le forum Composants VCL
    Réponses: 6
    Dernier message: 01/10/2005, 00h51
  3. [CONCEPTION MCD] Problème avec les clés composées
    Par fabriceMerc dans le forum Schéma
    Réponses: 3
    Dernier message: 14/02/2005, 09h43
  4. Problème avec des composants non déclarés
    Par vbcasimir dans le forum Bases de données
    Réponses: 1
    Dernier message: 20/01/2005, 11h17
  5. [Creation composant visuel] Problème avec le focus
    Par Ingham dans le forum Composants VCL
    Réponses: 9
    Dernier message: 23/09/2004, 16h59

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