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

Interfaces Graphiques en Java Discussion :

Modifier la taile d'un GridLayout


Sujet :

Interfaces Graphiques en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2012
    Messages : 56
    Par défaut Modifier la taile d'un GridLayout
    Je veux insérer un gridlayout dans un panel. le gridlayout est apparus mais avec une taille très petite comme un point. ce gridLayout content 4 panel.

    ci-joint 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
    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
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
     
    public class Move extends JPanel {
     
     
     
     
     
     
        /**
         * Creates new form Move
         * 
         * 
         * 
         */
        public Move() {
           // setLayout(new GridLayout(2,2));
           // setBorder(line);
     
            initComponents();
            ComponentMove listener = new ComponentMove(this);
            //JPanel Pan = new JPanel();
           // setLayout(new java.awt.GridLayout(2, 2));
     
            for(int i=0; i<4; i++) {
                add(createComponent(i+1));
            }
     
            addMouseListener(listener);
            addMouseMotionListener(listener);
     
        }
         private JComponent createComponent(int i) {
            JLabel component=new JLabel(); // ici on peut faire n'importe quel JComponent, JLabel, par exemple
            component.setLocation((int)(Math.random()*100), (int)(Math.random()*100)); // position aléatoire
            component.setSize(125, 125); // taille aléatoire
            component.setIcon(new javax.swing.ImageIcon("C:\\Users\\olfa\\Documents\\NetBeansProjects\\JavaApplication2\\img\\img"+i+".jpg"));
           // component.setEnabled(false); // les composants ne doivent pas intercepter la souris
            return component;
        }
     
         private static class ComponentMove extends MouseAdapter {
     
            private boolean move;
            private int relx;
            private JComponent component;
            private int rely;
            private Container container;
     
            public ComponentMove(Container container) {
                this.container=container;
            }
     
            @Override
            public void mousePressed(MouseEvent e) {
                if ( move ) {
                    move=false; // arrêt du mouvement
                    component.setBorder(null); // on  supprime la bordure noire
                    component=null;
                }
                else {
                    component = getComponent(e.getX(),e.getY()); // on mémorise le composant en déplacement
                    if ( component!=null ) {
                        container.setComponentZOrder(component,0); // place le composant le plus haut possible
                        relx = e.getX()-component.getX(); // on mémorise la position relative
                        rely = e.getY()-component.getY(); // on mémorise la position relative
                        move=true; // démarrage du mouvement
                        component.setBorder(BorderFactory.createLineBorder(Color.BLACK)); // on indique le composant sélectionné par une bordure noire
                    }
                }
            }
     
            private JComponent getComponent(int x, int y) {
                // on recherche le premier composant qui correspond aux coordonnées de la souris
                for(Component component : container.getComponents()) {
                    if ( component instanceof JComponent && component.getBounds().contains(x, y) ) {
                        return (JComponent)component;
                    }
                }
                return null;
            }
     
            @Override
            public void mouseMoved(MouseEvent e) {
                if ( move ) {
                    // si on déplace
                    component.setLocation(e.getX()-relx, e.getY()-rely);
                }
            }
     
        }
     
        public static void main(String[] args) {
     
              Border line = BorderFactory.createLineBorder(Color.BLACK);
     
            JFrame frame = new JFrame("exemple");
            JPanel pan = new JPanel();
            pan.setLayout(new GridLayout(2,2));
            pan.setBorder(line);
            pan.setSize(8000, 8011);
     
     
            JLabel lab1 = new JLabel();
            lab1.setBorder(line);
            lab1.setSize(124, 125);
            pan.add(lab1);
     
     
            JLabel lab2 = new JLabel();
            lab2.setBorder(line);
            lab2.setSize(124, 125);
            pan.add(lab2);
     
            JLabel lab3 = new JLabel();
            lab3.setBorder(line);
            lab3.setSize(124, 125);
            pan.add(lab3);
     
            JLabel lab4 = new JLabel();
            lab4.setBorder(line);
            lab4.setSize(124, 125);
            pan.add(lab4);
     
            frame.setSize(800,600);
            JLabel image = new JLabel( new ImageIcon("C:\\Users\\olfa\\Documents\\NetBeansProjects\\JavaApplication2\\img\\chat.jpg"));
            frame.setLayout(new FlowLayout());
            frame.add(new Move(),FlowLayout.LEFT);
            frame.add(image);
            frame.add(pan,FlowLayout.CENTER);
     
     
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
          // frame.setContentPane(new Move().setBorder(BorderFactory.createLineBorder(Color.yellow)));
     
     
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
     
        }

  2. #2
    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
    Salut,

    On ne peut pas mélanger du layouté et du pas layouté. La position et la taille des composants sont gérés respectivement par setX()/setY() (ou setLocation()) et setWidth()/setHeight() (ou setSize()). Un Layout Manager, comme le GridLayout, utilise ces méthodes pour donner une position et une taille à un composant, selon différentes règles.
    En bref les tailles que tu donnes aux JLabel par setSize() n'ont aucun effet : le GridLayout appelle ces méthodes pour donner aux JLabel la taille qu'il calcule par rapport à ses règles de layouting, contrainte par le fait que le composant lui-même est mis dans un FlowLayout. Un FlowLayout respect la taille préférentielle du composant, qui a un GridLayout qui utilise donc la taille préférentielle de ses composants, qui est de 0, par défaut.

    Remplace par exemple tous les appels de setSize( xxx, yyy) par setPreferredSize( new Dimension( xxx, yyy ) ) et ton panel avec GridLayout aura une taille.



    PS : quand tu nous montre du code où il y a un problème, montre-nous que le code où il y a le problème et enlève le superflu, parce que ça prend du temps de lire du code. Là, seule la méthode main est concernée par ta question, et tout le début ne sert à rien et n'est même jamais exécuté !
    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.

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/11/2002, 14h08
  2. [VB6] Modifier la clé d'un élément d'une collection
    Par Ricou13 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 21/11/2002, 14h49
  3. [VB6] [MDI] Modifier form en MDIform
    Par fikou dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 12/09/2002, 13h48
  4. Réponses: 5
    Dernier message: 06/08/2002, 20h08

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