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 :

la mise en forme des composant d'une fenetre


Sujet :

AWT/Swing Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 26
    Points : 9
    Points
    9
    Par défaut la mise en forme des composant d'une fenetre
    bonjour,
    je suis bloqué depuis une semaine. je voudrai realiser une fenetre contenant des champs, des boutons, une zone de texte avec ascenceur. j'ai donc opté pour l'utilisation de la methode setBounds pour la disposition des composants. malheureusement aucun composant ne s'affiche à l'interieur de la fenetre quand j'execute le programme. et quand je met en commentaire les lignes setLayout(null), les composants aparaissent mais sont tous alignés au lieu d'etre sous forme de grille, en plus ni la zone de texte ni meme l'ascenceur n'apparait.
    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
     
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.border.*;
     
    public class InterGraf extends JFrame {
     
        InterGraf(){
            this.setTitle("User Platform");
            this.setSize(350,500);
            Container contenu = this.getContentPane();
            JPanel panHaut = new JPanel();panHaut.setLayout(null);
            JPanel panBas = new JPanel();panBas.setLayout(null);
            JPanel panCentre = new JPanel();panCentre.setLayout(null);
            contenu.add(panHaut,BorderLayout.NORTH);
            contenu.add(panCentre,BorderLayout.CENTER);
            contenu.add(panBas,BorderLayout.SOUTH);
            JLabel l1 = new JLabel("Prenom"); l1.setBounds(0,20,10,50);
            JLabel l2 = new JLabel("Nom"); l2.setBounds(0,30,10,50);
            JLabel l3 = new JLabel("Solde"); l3.setBounds(0,40,10,50);
            JLabel l4 = new JLabel("Decouvert"); l4.setBounds(0,50,20,20);
            JLabel l5 = new JLabel("Numero Compte"); l5.setBounds(0,60,20,20);
            JTextField t1 = new JTextField(""); t1.setBounds(30,20,10,100);
            JTextField t2 = new JTextField(""); t2.setBounds(30,30,10,100);
            JTextField t3 = new JTextField(""); t1.setBounds(30,40,10,100);
            JTextField t4 = new JTextField(""); t1.setBounds(30,50,10,100);
            JTextField t5 = new JTextField(""); t1.setBounds(30,60,10,100);
            panHaut.add(l1); panHaut.add(t1);
            panHaut.add(l2); panHaut.add(t2);
            panHaut.add(l3); panHaut.add(t3);
            panHaut.add(l4); panHaut.add(t4);
            panHaut.add(l5); panHaut.add(t5);
            JButton b1 = new JButton("Creer compte"); b1.setBounds(new Rectangle(10,80,10,50));
            JButton b2 = new JButton("Historique du compte");b2.setBounds(new Rectangle(27,80,10,80));
            panHaut.add(b1); panHaut.add(b2);
            panHaut.setBorder(new TitledBorder("Ouverture de Compte Personnel"));
            JTextArea zone = new JTextArea(""); zone.setBounds(0,90,230,470);
            JScrollPane asc = new JScrollPane(zone);
            panCentre.add(asc);
            Border b = BorderFactory.createLineBorder (Color.blue .darker ( ) ,5);
            panCentre.setBorder(b);
            JLabel lb1 = new JLabel("Numero Compte"); lb1.setBounds(0,250,10,50);
            JLabel lb2 = new JLabel("Montant Retrait"); lb2.setBounds(0,260,10,50);
            JLabel lb3 = new JLabel("Montant Depot"); lb3.setBounds(0,270,10,50);
            JTextField tb1 = new JTextField(""); tb1.setBounds(30,250,10,100);
            JTextField tb2 = new JTextField(""); tb2.setBounds(30,260,10,100);
            JTextField tb3 = new JTextField(""); tb1.setBounds(30,270,10,100);
            panBas.add(lb1); panBas.add(tb1);
            panBas.add(lb2); panBas.add(tb2);
            panBas.add(lb3); panBas.add(tb3);
            JButton bb1 = new JButton("Depot"); bb1.setBounds(20,290,12,30);
            JButton bb2 = new JButton("Retrait");bb2.setBounds(30,290,12,30);
            panBas.add(bb1); panBas.add(bb2);
            panHaut.setBorder(new TitledBorder("Transaction sur le Solde"));
     
        }
        public static void main(String[] args) {
            new InterGraf().setVisible(true);
     
        }
     
    }
    quelqu'un a une idée de comment je peux modifier ce code afin que les composants s'affiche dans la fenetre comme je le veux ?

    merci d'avance à toute contribution

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    En utilisant un Layout digne de ce nom et pas du NullLayout qui ne vaut pas grand chose (elle va avoir une jolie tête ton appli quand les utilisateurs vont redimensionner la fenêtre ^^.

    Tout ce que tu peux réaliser en NullLayout tu pourrs l'obtenir en utilisant un GridBagLayout ou deu GroupLayout (cf Matisse, l'éditeur graphique d'applications Swing de Netbeans).

    ++
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 26
    Points : 9
    Points
    9
    Par défaut
    je suis d'accord pour essayer avec le GridLayout, mais pour ce qui de l'ascenceur avec la zone de texte, pourquoi l'ascenceur ne s'afiche pas ?
    meme en utilisant le GridLayout

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Ton champ texte se trouve bien dans un JScrollPane.
    Celà vient du fait que l'ascenseur ne s'affiche que s'il est nécessaire normalement (s'il y a du texte qui dépasse de l'espace disponible pour le champ texte).
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 26
    Points : 9
    Points
    9
    Par défaut
    ouai t'as raison l'ascenceur aparait automatiquement. merci beaucoup
    maintenant comment puis je faire pour changer la police de l'objet TitledBorder ?

    merci encore

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    C'est le genre de questions dont la réponse se trouve en deux deux dans la javadoc.
    Help yourself
    http://java.sun.com/javase/6/docs/ap...ledBorder.html
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  7. #7
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 26
    Points : 9
    Points
    9
    Par défaut
    j'ai eu du mal à le faire, mais finalement j'ai trouvé.
    pour ceux qui veulent savoir commment le faire, voici ce que j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Font f = new Font("Times New Roman",Font.ITALIC,12);
    TitledBorder t = new TitledBorder(new LineBorder(Color.gray,1),"Ouverture de Compte Personnel",TitledBorder.LEFT, TitledBorder.TOP,f); 
    conteneur.setBorder(t);
    voilà et ça marche

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Sinon tu avais la méthode
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  9. #9
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 26
    Points : 9
    Points
    9
    Par défaut
    merci pour l'info.
    bon je profite pour poser un autre problème, toujours lié à ma fenetre dont le code est ci-dessus(je signale que pour la mise en forme j'ai été obligé d'utilisé le GridLayout() pour les JPanel du haut et du bas):
    comment pui je faire pour que:

    1-aucun champ ne soit vide lors du remplissage, sinon une boîte de dialogue modale le signale

    2-les champs prenom et nom ne contiennent que des lettres alphabétiques, Autrement dit si ces deux zones de texte détiennent le curseur, seul le pavé alphabétique soit actif.

    3-le solde et le decouvert ne contiennent exclusivement que des chiffres, les lettres doivent être ignorées.

    4-le numéro de compte (NumeroCompte) soit un nombre de taille limitée

    c'est un peu beaucoup de questions à a fois, mais je veux juste une piste pour demarrer

    merci d'avance

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Diriges toi vers le JFormattedTextfield et des maskFotmatter, ou un DocumentListener placé sur el document de ton JTextfield (le contrôle est plus fin de cette façon).

    Ensuite pour la validation du remplissage de tes champs, bah faut tous les tester un parent et dès qu'un n'est pas remplis tu affiches un JOptionPane avec le message àdéquat (cf méthodes statiques showXXX de JOptionPane)
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  11. #11
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 26
    Points : 9
    Points
    9
    Par défaut
    salut,
    merci pour tes infos, je vais m'y mettre tout de suite et te ferai part de l'evolution des choses.
    bien à toi

  12. #12
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 26
    Points : 9
    Points
    9
    Par défaut
    j'ai pu resoudre les questions 1,3 et 4 en utilisant JFormattedTextField avec le format MaskFormatter pour le numero du compte qui devrait avoir une taille limitée, le format NumberFormat pour le solde et le decouvert qui ne doivent contenir que des chiffres. Pour la verification du remplissage des champs, j'ai fait comme tu me l'as conseillé en procedant à un control champ par champ et en utilisant la classe JOptionPane.

    maintenant je n'arrive pas à regler le problème des champs nom et prenom, qui ne doivent contenir que des caracteres, j'ai voulu utiliser le format MaskFormatter, mais avec ce dernier d'après ce que j'ai compris il faut imposer le nombre de caracteres à saisir, or on ne peut imaginer la taille de tous les noms qui existent.
    j'ai jeté un coup d'oeil sur le DocumentListener, mais franchement j'ai pas compris grand chose, peut etre un code en exemple pourai m'aider pour y comprendre.
    du coup je suis un peu bloqué à ce stade
    est ce que sinok peux m'aider avec ce code ? ou quelqu'un peut me proposer quelque chose ?
    excusez-moi pour mes long topics, mais c'est pour essayer d'etre plus clair
    merci !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/07/2007, 09h19
  2. Mise en forme des cellules d'une flexgrid
    Par ecarbill dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 30/08/2006, 10h57
  3. Forcer la mise en forme des champs d'une TABLE
    Par dunbar dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 11/08/2006, 01h07
  4. Réponses: 2
    Dernier message: 11/07/2006, 17h08
  5. Réponses: 6
    Dernier message: 16/06/2006, 14h20

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