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 :

[Swing] La taille et la psoition de mes éléments


Sujet :

AWT/Swing Java

  1. #1
    Membre régulier Avatar de YuGiOhJCJ
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 206
    Points : 114
    Points
    114
    Par défaut [Swing] La taille et la psoition de mes éléments
    Bonjour,
    je travail sur une interface :

    Mais le dernier élément de mon interface graphique devient incontrôlable quand je redimensionne ma fenêtre :

    Voici un bout de 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
    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
     
    /*-----------------------------------*
    		 | DECLARATION DES VARIABLES LOCALES |
    		 *-----------------------------------*/
    		//Résolution de la fenêtre
    		int res_x = 640;
    		int res_y = 480;
    		//Temps courrant
    		long temps_courrant;
    		//Temps de la dernière mise à jour
    		long temps_maj_affichage = 0;
     
    		/*------------------------*
    		 | CREATION DE LA FENETRE |
    		 *------------------------*/
    		final JFrame f = new JFrame("Centre Multimédia - Application de dépôt");
    		//Pour que l'application se quitte lors d'un clic sur la croix
    		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		//Dimensions de la fenêtre
    		f.setSize(res_x, res_y);
    		//Affichage de la fenêtre
    		f.setVisible(true);
     
    		/*----------------------*
    		 | CREATION DES TITRES  |
    		 *----------------------*/
    		JLabel centre_multimedia = new JLabel("Centre Multimédia - Application de dépôt");
    		centre_multimedia.setSize(res_x, res_y/10);
    		centre_multimedia.setLocation(res_x/3, 0);
    		final JLabel etat_fichier = new JLabel("Aucun fichier sélectionné.");
    		etat_fichier.setSize(res_x, res_y/10);
    		etat_fichier.setLocation(0, res_y/10);
    		final JLabel erreur = new JLabel("Aucune erreur détectée.");
    		erreur.setSize(res_x, res_y/10);
    		erreur.setLocation(0, (res_y/10*2));
     
    		/*-------------------*
    		 | CREATION DES LIST |
    		 *-------------------*/
    		JComboBox genre = new JComboBox();
    		genre.addItem("Musique");
    		genre.addItem("Photo");
    		genre.addItem("Vidéo");
    		genre.setSize(res_x/3, res_y/10);
    		genre.setLocation(0, (res_y/10*3));
     
    		/*----------------------*
    		 | CREATION DES BOUTONS |
    		 *----------------------*/
    		JButton bouton_browse = new JButton("Parcourir");
    		bouton_browse.setSize(res_x/3, res_y/10);
    		bouton_browse.setLocation(0, (res_y/10*4));
    		JButton bouton_send = new JButton("Envoyer");
    		bouton_send.setSize(res_x/3, res_y/10);
    		bouton_send.setLocation(0, (res_y/10*5));
    		f.add(centre_multimedia);
    		f.add(etat_fichier);
    		f.add(erreur);
    		f.add(bouton_browse);
    		f.add(bouton_send);
    		f.add(genre);
    		final JFileChooser browse = new JFileChooser();
    [...]
    	/*-------------------*
    		 | LA BOUCLE INFINIE |
    		 *-------------------*/
     
    		while(true){
    			//Récupération du temps courrant
    			temps_courrant = System.currentTimeMillis();
    			//Mise à jour de l'affichage toutes les 20ms
    			if(temps_courrant > (temps_maj_affichage + 20)){
    				//Récupération du nouveau temps
    				temps_maj_affichage = temps_courrant;
    				//Actualisation de la fenêtre
    				f.repaint();
    			}
    		}
    Quelle est la raison de ce problème?
    Merci.

  2. #2
    Membre éclairé
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Points : 756
    Points
    756
    Par défaut
    Salut,

    utilise des layouts pour structurer ton interface et placer tes composants, je peux te conseiller ici le GridLayout.

    Voici un bon lien pour débuter :

    How to use layout
    "Le calendrier, c'est la bureaucratie du temps." Quino

  3. #3
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Pense aussi à utiliser le contentPane :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    f.getContentPane().setLayout(...);
    f.getContentPane().add(...);
    f.getContentPane().add(...);
    // etc.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2007
    Messages : 37
    Points : 42
    Points
    42
    Par défaut
    Comme t'as calculer l'emplacement de tes elements tu peut donc te passer du layout manager(mais c'est deconseier)
    en instantiant ton JFame,la frame prend comme layout par defaut BorderLayout donc tu doit ajouter ceci

  5. #5
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Points : 1 078
    Points
    1 078
    Par défaut
    Je reprend un peu ce qui a été dit, mais je vois deux façon de faire :
    - soit tu restes avec ton idée de positionnement manuelle et tu fais setLayout(null). Dans ce cas, je tu peux soit empêcher le redimensionnement de la fenêtre (setResizable(false) il me semble), soit tu recalcules la position des composants à chaque changement de taille de la fenêtre.
    Je trouve ça sale, mais si tu tiens à les positionner avec précision, c'est comme ça qu'il faut faire.

    - soit tu te mets aux Layout, c'est l'option que je te conseille vivement. Et en fait.

    Après, y'a peut être une autre voie que j'hésite à explorer depuis quelques temps, c'est la création d'un Layout. ça permet de faire de manière plus propre les calculs à chaque changement de taille de fenêtre.


    Et surtout, comme l'a dit xavlours, passe par le contentPane.

  6. #6
    Membre régulier Avatar de YuGiOhJCJ
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 206
    Points : 114
    Points
    114
    Par défaut
    bilal_inf> Super je voulais justement ne pas me compliquer la vie avec les Layout. Je préfère moi même préciser l'emplacement en pixels pour l'instant.

    Ok j'ai donc ajouté la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [...]
    f.add(centre_multimedia);
    		f.add(etat_fichier);
    		f.add(erreur);
    		f.add(bouton_browse);
    		f.add(bouton_send);
    		f.add(genre);
    		f.setLayout(null);
    [...]
    Et maintenant les éléments restent à leur position quand je redimensionne la fenêtre.

    Seul chose étrange, voici ma JConboBox sans redimensionner ma fenêtre :

    Et la voici après que j'ai changé la taille de la fenêtre :


    Comme vous pouvez le voir sur la première photo, je n'avais pas la petite fleche à droite de la JComboBox et après redimensionnement de la fenêtre elle apparaît. Comment résoudre ce problème d'affichage?
    Merci.

  7. #7
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Points : 1 078
    Points
    1 078
    Par défaut
    Je pense que ça vient du fait que le setVisible(true) est placé avant l'ajout des composants.
    Essaie en le mettant après tous les add.

    Par contre, j'insiste une fois de plus, mais change les f.add et f.setLayout en f.getContentPane().add et f.getContentPane().setLayout.

    Dernière chose, il est plus logique de déclarer le layout avant de placer les composants

  8. #8
    Membre régulier Avatar de YuGiOhJCJ
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2005
    Messages : 206
    Points : 114
    Points
    114
    Par défaut
    Oui pour le Layout je l'ai déclaré avant de mettre les composants je trouvais ça plus logique moi aussi.
    Sinon tu avais raison. J'ai décalé le setVisible(true) après l'ajout des composants et problème résolu!
    Merci beaucoup ;-)

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

Discussions similaires

  1. Fest Swing NullPointer sur mes éléments
    Par nddvlp dans le forum Tests et Performance
    Réponses: 3
    Dernier message: 23/08/2012, 08h41
  2. [Débutant][Swing]Fenetres à taille variable
    Par zolotaya dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 05/07/2007, 12h13
  3. [SWING] JOptionPane + Taille
    Par rprom1 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 06/05/2006, 23h32
  4. [Swing][JTable]Tailles des colonnes du tableau
    Par LordBlaize dans le forum Composants
    Réponses: 6
    Dernier message: 20/02/2006, 17h46
  5. [SWING][JTable] Taille colonnes
    Par Antunes dans le forum Composants
    Réponses: 4
    Dernier message: 28/06/2004, 13h52

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