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

Agents de placement/Fenêtres Java Discussion :

[Jdialog] Réajustement auto


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut [Jdialog] Réajustement auto
    Bonjour,
    Je suis en train de réaliser une boite de dialogue qui va contenir un nombre de composants non fixe(textField et jlabel) et je voudrais savoir si il y ' a un moyen d ' ajuster la taille du jdialog (en hauteur) selon le nombre de composants présent dans celui ci ?

    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    public class ConfigurationRequete extends JDialog implements ActionListener{
     
    	private Dimension dimLabel=new Dimension(200,20);
    	private Dimension dimbouton=new Dimension(100,20);
    	private ParsingXML parsing;
     
    	public ConfigurationRequete() throws JDOMException {
     
    		super();
    		initialize();
     
     
    	}
     
    	public void initialize()
    	{
    		this.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    		this.setTitle("Configuration fichier XML");
    		this.setLayout(new BorderLayout());
    		this.getContentPane().add(containerNord(),BorderLayout.NORTH);
    		this.getContentPane().add(containerSud(),BorderLayout.SOUTH);
    		this.getContentPane().add(containerCentre(),BorderLayout.CENTER);
    		this.setLocationRelativeTo(null);
    		this.setPreferredSize(new Dimension(400,600));
    		//this.setResizable(false);
    		this.pack();
    		this.setVisible(true);
     
    	}
     
    	public JPanel containerNord()
    	{
    		JPanel containerNord= new JPanel();// panneau graphique
    		JLabel label=new JLabel("Configuration du fichier XML",JLabel.CENTER);
    		//containerNord.setLayout(new BorderLayout());
    		containerNord.add(label);
    		return containerNord;
    	}
    	public JPanel containerCentre()
    	{
    		parsing=new ParsingXML();
    		JPanel container=new JPanel();
    		container.setLayout(new FlowLayout());
    		//container.setBorder(BorderFactory.createLineBorder(Color.BLACK));
    		List<String> parametresBody;
    		try {
    			parametresBody = parsing.afficherParametres();
    			List<String> tailleParametres=parsing.afficherTailleParametres();
    			JLabel label[]= new JLabel[parametresBody.size()];
    			JTextField champSaisie[]= new JTextField[parametresBody.size()];
     
     
    			for(int i=0;i<parametresBody.size();i++)
    			{
     
    				label[i]=new JLabel(parametresBody.get(i));
     
    				label[i].setPreferredSize(dimLabel);
    				label[i].setHorizontalAlignment(JLabel.LEFT);
    				label[i].setFont(new Font("Arial",Font.BOLD,15));
    				label[i].setToolTipText("sisi");
    				champSaisie[i]=new JTextField(new TextLimiter(Integer.parseInt(tailleParametres.get(i))), "", 15);
    				container.add(label[i]);
    				container.add(champSaisie[i]);
     
    			}
    		} catch (JDOMException e) {
    			 System.err.println("Erreur lors de la récupération du fichier JDOM " 
    						+ e.getMessage() );
    		}
     
    		return container;
    	}
     
    	public JPanel containerSud()
    	{
    		JPanel container=new JPanel();//disposition en flowlayout
    		Button valider=new Button("Valider");
    		valider.setPreferredSize(dimbouton);
    		valider.addActionListener(this);
    		Button quit=new Button("Quitter");
    		quit.setPreferredSize(dimbouton);
    		this.setLayout(new BorderLayout());
    		container.add(valider);
    		container.add(quit);
    		return container;
    	}
    Merci de votre aide

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Par défaut
    Utilise la méthode pack()

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut
    J 'ai déjà fait un pack() dans mon code ,ca ne change rien du tout.
    C ' est peut etre a cause du fait que ca ne soit qu un simple JDialog et non un Jpanel ?

    Merci

  4. #4
    Membre Expert
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 098
    Par défaut Peut-être
    Avez-vous essayé un setSize(int largeur, int hauteur) tout de suite après l'appel de la méthode initialize() de votre constructeur ?
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  5. #5
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    enlève l'appel à setPreferredSize qui est juste avant le pack...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 179
    Par défaut
    Salut,

    Merci de ton aide , oui désolé pour le setPreferredSize , c ' était juste pour tricher un peu en attendant de trouver une solution.
    Je voudrais en fait afficher mes jlabel et textfield par colonne comme l ' image ci dessous( que j ' obtiens en trichant avec le setPreferredSize)



    Et le résultant sans le preferredSize(normal mon gestionnaire est en flowLayout):




    Y ' a t il un layout qui me permet d ' arriver au premier resultat(sans tricher avec le preferredSize) et de calculer automatiquement la taille de la fenêtre en fonction du nombre de composant ?(borderLayout prend toute la taille de la fenêtre et flowLayout les dispose en alignement)

    Merci bien

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Par défaut
    Tu as plusieurs possibilités, celle que je te conseil serait d'utiliser un Boxlayout vertical qui contient des boxlayout horizontal.

  8. #8
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Quelques remarques :
    • Les parsings XML ne devrait pas être fait dans le code de création de l'interface...
    • La méthode initialize() doit être private, tout comme toutes les méthodes qui te crées tes composants (containerNord(), containerCentre(), etc.)
    • Dans ta boucle de traitement, les tableaux label[] et champSaisie[] sont inutile puisqu'ils ne servent plus après la boucle. Autant utiliser directement une variable locale dans la boucle (et ce sera plus lisible).
    • Le setLocationRelativeTo() est à placer après le pack() ou toute autre instruction modifiant la position de la fenêtre... sinon ca ne sert à rien.
    • Les Layouts sont à la base du positionnement des composants. Il ne faut pas "tricher" avec des setSize() ou autre mais bien choisir son Layout.

      Si tu veux un positionnement en colonne, pourquoi utilises-tu un FlowLayout qui positionne les éléments en ligne ????

      Un GridLayout me semble bien plus indiqué puisqu'il place les composants sur une grille, par exemple :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      JPanel container=new JPanel(new GridLayout(0, 2, 5, 5));
      0 => Nombre de lignes (0=nombre variable)
      2 => Nombre de colonnes
      5 => Espacement horizontal entre les éléments
      5 => Espacement vertical entre les éléments

      Et tu obtiendras déjà un meilleur résultat.

      Et pour des positionnements plus complexe, il existe plusieurs Layout non-standard assez complet (de tête MigLayout, TableLayout...)
    • Enfin il est préférable de placer ton container central dans un JScrollPane, juste au cas où ta fenêtre serait trop grande et diminué de taille...






    a++

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

Discussions similaires

  1. Récuperer les icons des JDialog
    Par Pro_Fete dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 17/04/2003, 14h00
  2. Pb d'auto-incrément sur une table v7
    Par Nivux dans le forum Paradox
    Réponses: 9
    Dernier message: 26/12/2002, 13h05
  3. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 01h10
  4. Un Sender peut-il s'auto-détruire lors d'un onClick?
    Par Flo. dans le forum C++Builder
    Réponses: 2
    Dernier message: 17/07/2002, 11h31
  5. Réponses: 8
    Dernier message: 17/05/2002, 10h08

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