Question

Quel gestionnaire de disposition d’interface graphique Java est-ce que tout le monde utilise? Dernièrement, j'utilisais MigLayout , qui comporte de puissants contrôles de composants. Je voulais juste voir ce que d’autres développeurs utilisent autre que ceux du JDK standard.

Était-ce utile?

La solution

MiGLayout est le gestionnaire de structure d'interface graphique largement utilisé par les développeurs Java.

Autres conseils

GridBagLayout est utilisable. Une fois que vous avez l'habitude de l'utiliser, cela fonctionne très bien. Je pense que les gestionnaires de disposition JDK standard sont assez puissants en eux-mêmes. De plus, vous réduisez au minimum la dépendance vis-à-vis des bibliothèques tierces.

MiG et FormLayout (JGoodies) sont excellents pour la mise en page manuelle (et presque toute la mise en page devient finalement manuelle). Mon principal conseil est de concevoir vos vues de sorte que vous puissiez complètement déchirer la mise en page et la ré-implémenter sans nuire à votre application (une bonne séparation des vues et du contrôleur est la clé ici).

Jetez un coup d'œil à l'approche PresentationModel de JGoodie pour la mise en œuvre de vues "stupides". J'utilise cette technique avec un générateur d'interface graphique (j'utilise GroupLayout avec le plug-in de générateur d'interface graphique Jigloo) pour lancer des prototypes rapides. Après 3 ou 4 itérations, cela passe généralement par la fenêtre et nous effectuons une nouvelle implémentation en utilisant MiG ou FormLayout.

EDIT: Depuis que j'ai écrit ceci, je suis passé à l’utilisation de MiG pour toutes mes mises en page, et je n’utilise plus de constructeur d’interfaces graphiques - c’est trop facile d’agrandir les choses avec MiG.

La dernière application Swing sur laquelle j'ai travaillé utilisait le FormsLayout de JGoodies.

J'utilise le GridBagLayout . Cela semble prendre beaucoup de code, mais cela donne de très belles mises en page.

J'aime également combiner BorderLayout . avec les panneaux GridBagLayout pour une grande personnalisation.

Je suis un grand partisan de l’utilisation de TableLayout au lieu de GridBagLayout. Tout est logique, alors que chaque fois que j'essaie d'utiliser GridBagLayout, mon âme est écrasée.

J'utilisais auparavant GridBagLayout pour le contrôle, mais depuis java1.6, je vais utiliser GroupLayout , c'est génial.

Voici une capture d’écran et un exemple de code à utiliser!.

texte de remplacement http://img145.imageshack.us/img145/7844/screenshot1dz8 .png

    private void layoutComponents(){
        JPanel panel = new JPanel();

        GroupLayout layout = new GroupLayout(panel);
        panel.setLayout(layout);

        layout.setAutoCreateGaps(true);

        layout.setAutoCreateContainerGaps(true);
        SequentialGroup hGroup = layout.createSequentialGroup();

        JLabel nameLbl  = new JLabel("Name");
        JLabel countLbl = new JLabel("Amount");
        JLabel dateLbl  = new JLabel("Date(dd/MM/yy)");
        hGroup.addGroup(layout.createParallelGroup().
                addComponent(nameLbl).
                addComponent(countLbl).
                addComponent(dateLbl).
                addComponent(go));

        hGroup.addGroup(layout.createParallelGroup().
                addComponent(name).
                addComponent(count).
                addComponent(date));

        layout.setHorizontalGroup(hGroup);

        SequentialGroup vGroup = layout.createSequentialGroup();

        vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(nameLbl).addComponent(name));
        vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(countLbl).addComponent(count));
        vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(dateLbl).addComponent(date));
        vGroup.addGroup(layout.createParallelGroup(Alignment.BASELINE).
                addComponent(go));
        layout.setVerticalGroup(vGroup);

        frame.add( panel , BorderLayout.NORTH );
        frame.add( new JScrollPane( textArea ) );
    }

J'utilise DesignGridLayout pour la plupart de mes panneaux.

Pour les rares panneaux que DesignGridLayout ne peut pas entièrement gérer, j'utilise un mélange de Borderlayout et DesignGridLayout .

Avec DesigngridLayout, vous pouvez coder manuellement vos modèles avec un nombre minimum de lignes de code, faciles à saisir et à lire:

DesignGridLayouut layout = new DesignGridLayout(myPanel);
layout.row().grid(lblFirstName).add(txfFirstName).grid(lblSurName).add(txfSurName);
layout.row().grid(lblAddress).add(txfAddress);
layout.row().center().add(btnOK, btnCancel);

Chaque ligne de la grille du panneau est définie par une ligne de code. Comme vous pouvez le constater, "dessin" votre panel est assez simple.

De plus, DesignGridLayout présente des caractéristiques uniques (telles que son " redimensionnement vertical intelligent ").

GridBagLayout est puissant mais assez primitif: le code qui relie la mise en page est très détaillé. Cette bibliothèque d’utilitaires (1 fichier jar contenant environ 10 classes) simplifie beaucoup de travaux: http : //code.google.com/p/punset-gridbag/ L'extrait suivant est tiré de la page d'accueil de ce site:

    PainlessGridBag gbl = new PainlessGridBag(getContentPane(), false);

    gbl.row().cell(lblFirstName).cell(txtFirstName).fillX()
             .cell(lblFamilyName).cell(txtFamilyName).fillX();
    gbl.row().cell(lblAddress).cellXRemainder(txtAddress).fillX();

    gbl.doneAndPushEverythingToTop();

De manière générale, vous trouverez peut-être utile un article que j’ai écrit il ya très longtemps au soleil. Ce n'est pas à jour avec les derniers gestionnaires de disposition, mais il se concentre sur l'imbrication efficace des gestionnaires de disposition, plutôt que d'essayer de tout faire avec une seule disposition.

Voir http://developer.java.sun.com/developer/ formation en ligne / interface utilisateur graphique / AWTLayoutMgr

J'ai constaté que, pour toute interface utilisateur graphique non triviale, j'utilisais plusieurs dispositions avec des sous-panneaux imbriqués, le panneau principal pouvant comporter un GridBagLayout et chaque sous-panneau (généralement sans bordure ni indication). que c’est un panneau) utilise une disposition plus simple dans la mesure du possible. J'utilise généralement BorderLayout , FlowLayout et BoxLayout pour des sous-panneaux plus petits et plus simples. En divisant de petites sections de l'interface graphique en sous-panneaux et en utilisant la disposition la plus simple possible pour contrôler cette section de l'interface graphique, vous pouvez créer des affichages complexes et bien agencés sans trop de problèmes avec les nombreuses options de GridBagLayout . De plus, en regroupant les mêmes fonctionnalités d’affichage dans un panneau, cela crée un code plus lisible.

Mise en page de printemps qui a été développée pour le mantissa gui builder qui fait partie de netbeans.

J'ai utilisé GroupLayout . ainsi que. Encore une fois, c’est un gestionnaire de disposition JDK standard à partir de Java6, mais vous pouvez également trouver la bibliothèque séparée.

J'ai toujours été un grand fan de GridBagLayout. Il ressemble beaucoup aux tableaux HTML, il est donc intuitif pour ces programmeurs Web.

J'ai commencé par utiliser différentes dispositions imbriquées, puis je suis passé à GridBagLayout (ce qui est assez frustrant). Depuis lors, j’ai essayé FormLayout (mais j’ai trouvé que ce n’était pas adapté aux formes) et j’ai décidé de miser sur TableLayout, dont je suis très heureux en général.

Depuis lors, j'ai découvert MiGLayout et, bien que je n'ai pas fait plus que jouer avec cela, il semble très capable, assez similaire à TableLayout et probablement un peu plus propre.

Le gros avantage pour moi est que MiGLayout est sur le point de faire partie du JDK. Je compte donc l'utiliser presque exclusivement quand il le fera.

L'autre chose à garder à l'esprit est que, quel que soit le LayoutManager le plus lourd sur lequel vous vous installiez, il y a toujours une place pour certains des gestionnaires de disposition plus simples tels que GridLayout. J'ai vu des choses horribles faites avec GridBagLayout qui auraient pu être faites beaucoup plus facilement avec un gestionnaire de disposition plus simple.

Je préfère minimiser les dépendances sur les bibliothèques tierces, c'est donc généralement BoxLayout pour les boîtes de dialogue et GridBagLayout pour "compliqué". mises en page. GridBagLayout est assez facile à comprendre, mais un peu difficile à configurer. J'ai moi-même écrit un outil pour créer le code à partir de dispositions HTML (espérons que cela aidera également les autres): http: //www.onyxbits. de / content / blog / patrick / java-gui-building-gridbaglayout-manager-made-easy

Le seul gestionnaire de mise en page que j'ai trouvé et que j'aime , c'est Gestionnaire de mise en page relative . Le gestionnaire de disposition relative fonctionne de manière cohérente avec la manière dont les boîtes de dialogue sont conceptuellement organisées. Un inconvénient est que tandis que ce gestionnaire de disposition traite des contraintes additives. Il ne semble pas traiter les contraintes de ratio. Heureusement, elle est très bien conçue et j'ai pu implémenter cette fonctionnalité.

Je suis un peu novice en Java.

J'ai essayé GridBagLayout, j'ai abandonné, puis BoxLayout, puis, puis ma propre Disposition personnalisée qui a fonctionné. Avec GridBag et Box, j'ai mis toutes les chances de mon côté et les moteurs de Layout ont décidé de faire quelque chose de différent, sans aucun moyen apparent de les déboguer.

Avec ma mise en page personnalisée, je pouvais imprimer les coordonnées, les largeurs et les hauteurs, afin de déterminer les erreurs. C'est un peu mathématique de placer des choses, mais vous avez toute la puissance de Java à utiliser plutôt que le vocabulaire limité de l'un des gestionnaires de présentation intégrés.

Bien sûr, c'était juste pour un projet à la maison, vous ne seriez jamais autorisé à le faire au travail.

J'utilise GridBagLayout pour les présentations de type formulaire, BorderLayout pour les présentations simples et FlowLayout pour le nombre d'icônes / de boutons horizontaux séparés par des espaces. Netbeans est également un bon générateur d’interface graphique qui peut vous éviter beaucoup de codages de présentation fastidieux et vous faire gagner du temps.

J'ai récemment commencé à utiliser Swing et j'utilise GridBagLayout.

J'en avais marre de tous ces gestionnaires de mise en page qui avaient besoin de beaucoup d’installation, de lisibilité ou d’épuisement, alors j’écrivais mon propre laoutmanager très simple qui utilise l’abstraction de deux photocorners maintenant chaque composant en place. Vous pouvez ajouter votre composant de la manière suivante: parent.add (enfant, "topleft (0, 0,5) bottomright (0.5,1.0)";;

Jetez un coup d'œil ici https://github.com/hageldave/UsefulStuff/blob /master/src/PhotoCornersLayout.java ;) vous êtes toutefois responsable d'une mise en page correcte, car elle ne vérifie pas les chevauchements ou autres inconvénients de votre mise en page.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top