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

 Java Discussion :

Taille des composants entre eux ?


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    IT in outer space
    Inscrit en
    Novembre 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : IT in outer space

    Informations forums :
    Inscription : Novembre 2006
    Messages : 88
    Par défaut Taille des composants entre eux ?
    Bonjour,
    je m’essaie aux interfaces graphiques un peu plus complexes et je dois avouer que c'est pas tout à fait simple dans la pratique les Layout quand ont veut "fixer" l'aspect de la fenêtre.

    Alors voilà le petit projet d'interface graphique qui en principe est plutôt simple.

    Je voudrais faire en gros une sorte de petit analyseur d'expressions régulières. C'est un autre problème dont il n'est pas question ici mais dans ce but je vois mon interface comme suit :

    Tout en haut se trouve une zone de saisie allant de 1 à 8 lignes en fonction de la taille de la fenêtre (ou du texte saisi) et qui prend toute la largeur.
    En dessous il y a 2 colonnes :
    A gauche une zone de texte (JTextField) qui ne prend qu'une ligne de hauteur pour y écrire l'adresse vers un fichier et à son côté un bouton qui affichera un JFileChooser. En dessous un JTextArea.
    A droite un autre JTextArea pour le moment mais la colonne pourrait évoluer pour ressembler à la colonne de gauche.

    Les colonnes de gauche et de droite partagent équitablement la largeur de la fenêtre et disposent du reste de la hauteur.
    Aussi comment faire pour pouvoir redimensionner l'espace entre ces 2 colonnes selon son bon vouloir ?

    Pour ce que j'ai essayé. Pour l'histoire des colonnes j'ai d'abord pensé utiliser un BorderLayout avec les constantes BorderLayout.WEST et BorderLayout.EAST mais ça n'a pas trop marché. Ensuite un FlowLayout mais on ne voyait d'une zone de texte, puis j'ai voulu me tourner vers un GridBagLayout et j'ai trouvé ça fastidieux... xD ... d'autant plus que ça semblait aussi imposer un redimensionnement des contrôles vu que les lignes et les colonnes se distribuent équitablement l'espace.
    J'ai finalement opté pour un lot de BoxLayout et l'agencement des contrôle est bon mais par contre les tailles sont chaotiques. Il y a bien des méthodes comme setMaximumSize mais elles sont définies en pixel ce qui me pose problème sachant qu'on ne sait pas à quelle taille la fenêtre va être redimensionnée.
    En somme, comment pourrais-je réordonner les tailles de mes contrôles pour qu'ils ne bavent pas entre eux ?

    Merci...


    [Addendum]
    Vous remarquerez sans doute que tout ce qui est affiché pour le moment apparaît en faire depuis la case centrale d'un BorderLayout.
    L'idée que j'ai eu c'est que si je voulais ajouter un JMenu je pourrais alors utiliser la partie nord et de même pour des volets latéraux je pourrais utiliser les cases ouest et est. Est-ce que mon raisonnement est juste où la création de certaines ressources comme un menu ou une barre d'état gardent une place qui leur est dédiée dans la fenêtre ?

    Je vous met un lien vers une image pour vous montrer l'étendue des dégâts et aussi le code source.


    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
     
    import javax.swing.*;
    import java.awt.*;
    import java.util.regex.*;
     
    public class RegExp extends JFrame{
        //Constructeur
        public RegExp(){
            setTitle("Expression rationnelles");
            Dimension prefDim = new Dimension(800,600);
            //setPreferredSize(prefDim);
            setSize(800,600);
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            // Conteneur principal
            Container cont = getContentPane();
            JPanel mainPanel = new JPanel();
            cont.add(mainPanel);
            mainPanel.setLayout(new BorderLayout());
            Box bxVertical = Box.createVerticalBox();
     
            //mainPanel.add(, BorderLayout.NORTH);
            //mainPanel.add(, BorderLayout.SOUTH);
            //mainPanel.add(, BorderLayout.EAST);
            //mainPanel.add(, BorderLayout.WEST);
            mainPanel.add(bxVertical, BorderLayout.CENTER);
     
                // Configuration du Box Vertical
                JTextArea exp = new JTextArea("exp");    // Zone de texte pour la RegExp.        
                bxVertical.add(exp);
                Dimension dimexp = new Dimension(300,16);
                exp.setMaximumSize(dimexp);
                Box bxHorizontale = Box.createHorizontalBox();
                bxVertical.add(bxHorizontale);
                    // Configuration de bxHorizontale
                    Box bxColGauche = Box.createVerticalBox();
                    bxHorizontale.add(bxColGauche);
                        // Configuration de bxColgauche
                        Box bxSelFic = Box.createHorizontalBox();
                        JTextArea src = new JTextArea("src");    // Zone de texte pour le texte source.
                        bxColGauche.add(bxSelFic);
                        bxColGauche.add(src);
                            // Configuration de bxSelFic
                            JTextField jtfSelFic = new JTextField(20);
                            JButton btnSelFic = new JButton("...");
                            bxSelFic.add(jtfSelFic);
                            bxSelFic.add(btnSelFic);
     
                    JTextArea res = new JTextArea("res");    // Zone de texte pour le résultat.
                    bxHorizontale.add(res);
            //pack();        
            setVisible(true);
        }
     
        //Main
        public static void main(String args[]){
            //TODO
            RegExp re = new RegExp();
            // ([0-9]{2}-){2}[0-9]{4}
            // (\d{2}-){2}\d{4}
            //re.evalRegexp("\\Ga*b*","aaaaabaaaaabaaaaabaaaaabbaaaaabaaaaab aaaaabaaaaab");
            re.evalRegexp("(\\d{2}-){2}\\d{4}","Ceci est une date : 16-11-2010 et en voici une autre 24-11-2010");
            System.out.println("Fin du main");
        }
     
        // Pour le moment le type de sortie est mis à void mais la fonction
        // devra clairement renvoyer un tableau dont le type sera probablement
        // déterminé par le type renvoyé par matcher.
        public void evalRegexp (String expr, String src){
            Pattern motif;
            Matcher crsp;
            Boolean bIsRes;
     
            motif = Pattern.compile(expr);
            crsp = motif.matcher(src);
            bIsRes = crsp.matches();
     
            System.out.println(expr);
            System.out.println(src);
            System.out.println("Suspens !");
            //*
            if (bIsRes) {
            System.out.println("Trouvé !");
                for (int i=0; i <= crsp.groupCount(); i++){
                    // Remplissage d'un tableau mais pr le moment affichage
                    System.out.println(crsp.group(i));
                }
            }//DEBUG*/
            while (crsp.find()){
                System.out.println(crsp.group() +" Positions: ("+ crsp.start() + ", "+ crsp.end() + ")");
            }
     
            //return [tableau de sortie]
        }
    }

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    pour une séparation uniforme d'une zone, utiliser un GridLayout Il divise en zones d'égales dimensions (si c'est bien ça que vous chercher) Vous aurez donc


    *------*
    NORTH
    *------*
    CENTER
    *------*

    Et le centre divisé dans un Grid Layout

    et chaque coté du grid layout adapté à votre quise

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



    Perso je n'ai pas vraiment compris tes explications sur ton interface !!
    Une image de ce que tu souhaites obtenir ne serait pas inutile


    Maintenant les layouts standard ne sont pas toujours très aisé à utiliser. Tu peux peut-être envisagé de te tourner vers d'autres layouts plus aisé comme le MiGLayout ou le TableLayout...


    a++

  4. #4
    Membre confirmé
    Homme Profil pro
    IT in outer space
    Inscrit en
    Novembre 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : IT in outer space

    Informations forums :
    Inscription : Novembre 2006
    Messages : 88
    Par défaut
    Désolé de mon absence. Je vous prépares ça dès que je peux.
    Merci.

  5. #5
    Membre confirmé
    Homme Profil pro
    IT in outer space
    Inscrit en
    Novembre 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : IT in outer space

    Informations forums :
    Inscription : Novembre 2006
    Messages : 88
    Par défaut
    Voilà. Désolé pour la longue absence.
    Je ne savais pas trop avec quoi dessiner ça mais au final je me suis décidé à faire ça avec GIMP.
    Je vous renvoi à mon premier message pour la description et surtout l'image de ce que me donne le code source.
    Je rajoute ici l'image de ce à quoi je voudrais que ça ressemble.



    Je réitère mes explications en me basant sur cette nouvelle image.
    La première zone visible (1) devra contenir du texte et prendre toute la largeur de la fenêtre. Au départ j'aimerais qu'elle ne fasse qu'une ligne de hauteur mais si le texte devenait trop long je voudrais qu'elle se donne le droit d'afficher plusieurs lignes jusqu'à 8 lignes de hauteur, au-delà de quoi on passerait à un affichage avec une barre de défilement.
    En dessous de la zone 1 l'espace doit être équitablement réparti au démarrage de l'appli entre une partie gauche et droite qui comprennent toute deux 3 contrôle répartis sur deux lignes.
    Sur la première ligne de chaque partie (gauche et droite) on trouve une zone de texte (JTextField) et un Bouton (JButton).
    Sur la seconde ligne de chaque partie on aura une zone de texte (JTextArea) qui accueillera un texte qu'on aura éventuellement importé d'un fichier à l'aide des contrôle de la ligne du dessus.
    J'aimerais avoir la possibilité de redimensionner l'espace accordé entre les parties gauche et droite sachant que les boutons ne doivent pas changer de taille : seul la zone de texte augmente ou réduit sa longueur.
    Lors d'un redimensionnement de fenêtre le seul composant qui voit sa hauteur affectée est le JTextArea.
    D'ailleurs je vois qu'en l'état l'interface n'est pas finie parce qu'il faut bien rajouter de quoi exécuter les expressions mais pour le moment le problème n'est pas là.
    Dans l'image du premier message le JTextField et le bouton prennent plusieurs lignes de même pour le champ pour l'expression rationnelle et l'espace entre les deux zones (gauche droite) du bas n'est pas équitablement partagé.
    Voilà j'espère que c'est un peu plus clair maintenant.
    Merci pour votre disponibilité.

  6. #6
    Membre confirmé
    Homme Profil pro
    IT in outer space
    Inscrit en
    Novembre 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : IT in outer space

    Informations forums :
    Inscription : Novembre 2006
    Messages : 88
    Par défaut C'était tout bidon ! xD
    C'est bon j'ai réussi à faire à peu près ce que je voulais avec des JSplitPane. C'était tout simple.
    Comme d'hab' je me prend trop la tête et je cherche trop compliqué...
    Ça m'a pas pris trop longtemps à faire l'interface avec des JSplitPane. Le seul truc c'est que mon JTextArea est défini à 8 lignes avec setRows et qu'elles sont visibles tout de suite.
    Pour cette version d'essai les panneaux bas-gauche et bas-droit sont issue d'une fonction qui renvoi un JPanel (notez qu'ils sont identiques jusque dans le texte d'initialisation). Je crois que je vais en faire une classe pour implémenter certaines fonctionnalités et simplifier ma gestion du code. Du coup j'ai eu une autre idée pour la zone "Expression rationnelle".
    Status :

    Aperçu

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 01/03/2007, 11h28
  2. [Swing] Problème de placement et de taille des composants
    Par CrazySeb dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 22/04/2006, 14h56
  3. [Swing] Fixer la taille des composants
    Par Imladir dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 05/02/2006, 07h53
  4. Taille des champs entres dans un stringGrid
    Par gilles641 dans le forum Composants VCL
    Réponses: 15
    Dernier message: 11/07/2005, 10h38
  5. [netbeans][Interfaces] réglage taille des composants
    Par tsinapah dans le forum NetBeans
    Réponses: 3
    Dernier message: 22/04/2005, 18h11

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