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] Ajouter un scroll quand on n'utilise pas de Layout


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut [JDialog] Ajouter un scroll quand on n'utilise pas de Layout
    Salut !!

    Actuellement, je développe une application, et dedans il y a un JDialog.

    J'ai choisi de ne pas utiliser de Layout pour organiser mes composants, cependant je suis confronté à un problème : je n'arrive pas à ajouter un scroll.

    Si j'essaie d'utiliser un JScrollPane, je ne peux pas mettre le layout de ce JScrollPane à null pour agencer mes éléments comme je veux, et donc ils ne se mettent pas bien.

    Comment faire ?

    Voici 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
     
    		title=new JLabel(getTitleString());
    		Font f=title.getFont().deriveFont(Font.BOLD,30);
    		title.setFont(f);
     
    		title.setBounds(640/2 - getFontMetrics(f).stringWidth(getTitleString())/2 ,2,getFontMetrics(f).stringWidth(getTitleString()),35);
     
    		(company=new JLabel(LanguageManager.getLocalizedText("billedCompany"))).setBounds(20,50,100,20);
    		(companyField=new JFormattedTextField(NumberFormat.getNumberInstance())).setBounds(125,50,20,20);
    		companyField.setEditable(false);
    		(searchCompany=new JButton(LanguageManager.getLocalizedText("..."))).setBounds(150,50,20,20);
    		searchCompany.addActionListener(new SearchCompany(this,true));
     
    		(companyThatPays=new JLabel("payingCompany")).setBounds(20,75,100,20);;
    		(companyThatPaysField=new JFormattedTextField(NumberFormat.getNumberInstance())).setBounds(125,75,20,20);
    		companyThatPaysField.setEditable(false);
    		(searchPayingCompany=new JButton(LanguageManager.getLocalizedText("..."))).setBounds(150,75,20,20);
    		searchPayingCompany.addActionListener(new SearchCompany(this,false));
     
    		(payementTerm=new JLabel(LanguageManager.getLocalizedText("payementTerm"))).setBounds(300,50,100,20);
    		(payementTermField=new JTextField()).setBounds(405,50,190,20);
    		payementTermField.setEditable(false);
    		(searchPayement=new JButton(LanguageManager.getLocalizedText("..."))).setBounds(600,50,20,20);
    		searchPayement.addActionListener(new SearchPayement(this));
     
     
    		billingDate=new JLabel(LanguageManager.getLocalizedText("billingDate"));
    		billingDate.setBounds(520-getFontMetrics(billingDate.getFont()).stringWidth(billingDate.getText()),75,getFontMetrics(billingDate.getFont()).stringWidth(billingDate.getText()),20);
    		dateChoose=new JDateChooser(Calendar.getInstance().getTime());
    		dateChoose.setLocale(LanguageManager.getCurrentLanguage());
    		dateChoose.setDateFormatString(dateFormat);
    		dateChoose.setBounds(520,75,100,20);
     
    		payementDate=new JLabel(LanguageManager.getLocalizedText("payementDate"));
    		payementDate.setBounds(520-getFontMetrics(payementDate.getFont()).stringWidth(payementDate.getText()),100,getFontMetrics(payementDate.getFont()).stringWidth(payementDate.getText()),20);
    		payementDateField=new JTextField();
    		payementDateField.setEditable(false);
    		payementDateField.setBounds(520,100,100,20);
    		(name=new JLabel(LanguageManager.getLocalizedText("companyName"))).setBounds(100,700,100,100); // 125
    		quantity=new JLabel(LanguageManager.getLocalizedText("quantity"));
    		unity=new JLabel(LanguageManager.getLocalizedText("unity"));
    		unitPrice=new JLabel(LanguageManager.getLocalizedText("periodicityText"));
    		periodicity=new JLabel(LanguageManager.getLocalizedText("unitPrice"));
    		totalHT=new JLabel(LanguageManager.getLocalizedText("totalHT"));
     
    		//this.setContentPane(new JScrollPane());
     
    		JPanel jp=new JPanel();
    		jp.setLayout(null);
     
    		Container c=this.getContentPane();
     
    		jp.add(title);
     
    		jp.add(payementTerm);
    		jp.add(payementTermField);
    		jp.add(searchPayement);
     
    		jp.add(company);
    		jp.add(companyField);
    		jp.add(searchCompany);
     
     
    		jp.add(companyThatPays);
    		jp.add(companyThatPaysField);
    		jp.add(searchPayingCompany);
     
    		jp.add(billingDate);
    		jp.add(dateChoose);
     
    		jp.add(payementDate);
    		jp.add(payementDateField);
     
    		jp.add(name);
     
    		JScrollPane jsp=new JScrollPane(jp);
    		this.add(jsp);
    J'ai volontairement mis les bounds de name en dehors de la taille de la fenetre (700, la taille de la fenetre étant de 480).
    Or c'est comme si je ne mettais pas de JScrollPane. Je ne comprends pas trop comment m'y prendre.

    Merci

    Fred

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


    Le Layout null c'est le mal



    Plus sérieusement tu dois refaire tout le travail du LayoutManager, en particulier :
    • Définir la position et la taille de tous les composants que tu ajoutes dans ton panel au Layout null (ce que tu fais via les setBounds()).
    • Calculer la preferredSize du panel avec le "layout null". En effet par défaut cela renvoit (0,0).


    Le JScrollPane considère donc que le Panel a suffisamment de place pour s'afficher (puisque sa taille préféré est de 0x0), et ne met pas en place les scrollbars...

    En calculant correctement la preferredSize de ton panel, le JScrollPane pourra s'adapter correctement et afficher les scrollbar lorsque c'est nécessaire (c'est à dire lorsque la preferredSize du panel est plus grande que la taille visible du JScrollPane)


    a++

  3. #3
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    Ok niquel j'avais oublié la gestion du preferredSize.

    Je n'utilise pas de layout car si je devais en utiliser un, ce serait le gridbag mais j'ai vraiment du mal à saisir comment il fonctionne alors je fais tout à la main

    Ceci étant dit, c'est pas si compliqué ni long que ça ^^

    Merci beaucoup !!

    Fred

  4. #4
    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
    Citation Envoyé par mavina Voir le message
    Ceci étant dit, c'est pas si compliqué ni long que ça ^^
    Non... mais cela s'adapte très mal aux changements quel qu'ils soient (changement de LnF, de taille de police, ...)

    a++

  5. #5
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    En fait le souci c'est que j'ai une facture à afficher et l'utilisateur peut ajouter autant de produits qu'il veut, donc autant de lignes sur la facture.
    Déjà qu'avec un gridbag j'arrive pas à afficher ce que je veux comme je veux, afficher un gridbag dynamique, ca me fait penser à un doux rêve :s

    J'ai toujours pas compris comment ca marche, et quels qu'aient été mes essais, ils se sont tous révélés être un échec cuisant :s

    F.

  6. #6
    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
    Tu n'es pas obligé d'utiliser le GridBag non plus, il existe des layouts à la fois plus flexibles, simples et permissifs tels que le FormLayout, le MigLayout, le DesignGridLayout, le ZoneLayout et autres

  7. #7
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    AH je ne les connaissais pas !!

    Super merci pour les liens, j'y penserai pour mes prochains projets !!

    F.

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

Discussions similaires

  1. Quand soit on utiliser une strcture au lieu d'une classe
    Par wodel dans le forum Windows Forms
    Réponses: 5
    Dernier message: 10/01/2007, 09h15
  2. [C#] Quand et où utiliser les exceptions ?
    Par wiLL_ dans le forum C#
    Réponses: 3
    Dernier message: 12/02/2006, 17h34
  3. Réponses: 5
    Dernier message: 20/10/2005, 10h42
  4. Quand il faut utiliser TTAble et un TQuery
    Par denza1 dans le forum Bases de données
    Réponses: 3
    Dernier message: 06/06/2004, 18h29
  5. ajout d'index en cours d'utilisation
    Par jbat dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 10/11/2003, 10h12

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