45 votes

Quelle (s) mise (s) de Swing recommandez-vous?

Il y a 8 gestionnaires de disposition dans la bibliothèque Java seul, et puis il y a un tas de 3ème partie des produits ainsi.

L'autre jour, j'ai essayé d'utiliser SpringLayout et... eh bien, ce n'est pas pour moi. Voir mon autre question. Donc... si vous avez un Swing application à la conception, et vous voulez que votre mise en page seulement alors, quels sont vos préférés gestionnaires de disposition? Tout intéressante/utile expériences concernent?

Mise à jour: Ouais, bien sûr, je suis conscient que les différents LMs sont appropriés pour les différentes mises en page. Mais je préfère attendre que la plupart de vous les 1, 2 ou peut-être 3 pour la plupart tout ce que vous faites, ou vous jure que par un seul c'est si polyvalent vous n'avez jamais besoin de rien d'autre. Avec suffisamment de réponses, je m'attends à voir quelque chose comme une courbe en cloche, avec un pic sur le GridBagLayout ou MigLayout (par exemple) et une longue queue de quelques traînards à l'aide de (dis) BoxLayout ou FlowLayout.

Heureusement, la distribution des réponses révèle quelques tendances quant à ce que les gens utilisent le plus pour Obtenir des Trucs Fait


Mise à JOUR et le Résumé

OK, après presque 2 jours, MiGLayout est définitivement en avant! Ses fans seront heureux d'apprendre qu'il ressemble à cette présentation sera l'entrée "officielle" de la bibliothèque bientôt.

GroupLayout, FormsLayout et TableLayout sont relativement nouveaux et n'ont pas eu beaucoup d'exposition. Peut-être que d'autres seront tout aussi surpris de découvrir que j'étais.

67voto

Joonas Pulakka Points 20361

MiGLayout , sans doute. Honnêtement, c'est le seul gestionnaire de disposition Swing que je connaisse qui ait du sens.

Le simple fait qu'il y ait 8 gestionnaires de disposition dans le JDK principal est un bon signe que les créateurs de Swing n'avaient aucune idée de ce qu'ils essayaient de faire. Il ne s'agit pas de jeter le reste de Swing dans la corbeille, c'est une bonne boîte à outils pour l'interface graphique, à l'exception des gestionnaires de disposition.

23voto

Michael Borgwardt Points 181658

Tous d'entre eux, en combinaison. C'est l'ensemble de point. Chaque gestionnaire de présentation répond à des exigences différentes, et par l'imbrication des panneaux avec différents gestionnaires de disposition, vous pouvez obtenir presque n'importe quoi.

Le "tout faire en un seul panneau" disposition des gestionnaires comme GridBagLayout et GroupLayout (et beaucoup de 3ème partie) ont leur place, surtout quand vous avez besoin de composants dans différentes parties de la disposition à s'aligner, mais avec une grande mise en page, elles entraînent généralement un énorme, difficile à manipuler mess.

20voto

rob Points 3107

Cela dépend de quel type de graphique que vous créez. Vous pouvez utiliser un ou deux de la simple mise en page, ou vous pourriez avoir besoin à portée de main pour plus de mise en page avancée. Dans l'ensemble, mon layout manager utilisez ne serait probablement briser à quelque chose comme cela, bien que cela puisse varier selon le projet:

  • 65% GridBagLayout - une mise en page qui va le faire, peu importe ce que vous devez faire.
  • 15% Boîte/BoxLayout - Idéal pour rapidement et facilement collant un couple de tous les composants.
  • 12% BorderLayout - Bon pour la fixation d'un panneau de boutons ou de panneau d'information pour un panneau de contenu. J'ai presque toujours l'utiliser pour ajouter du contenu à une JFrame.
  • 3% FlowLayout - Utile pour le bouton de panneaux, mais pas beaucoup d'autre.
  • 3% CardLayout - Surtout utile dans les programmes qui affichent des différents panneaux de contenu pour différents modes de fonctionnement.
  • 2% Autres mises - Il est très rare que j'ai besoin de rien d'autre, mais de temps en temps l'un de l'autre, les mises en page est très pratique.

Une fois que vous obtenez le coup de GridBagLayout, il n'est pas si mal à écrire au début, mais c'est toujours pas assez pour travailler avec, et à déboguer plus tard. J'ai essayé MiGLayout pour quelque chose récemment et a été déçu de constater que le MiGLayout fait a fini par être plus compliqué à utiliser que le GridBagLayout, dans ce cas particulier.

Certaines personnes tentent d'éviter le GridBagLayout comme de la peste; mais la vérité est, il ya certaines choses que aucune combinaison de simple mise en page doit être en mesure de gérer. C'est bien beau de fractionner un GUI en panneaux de sections logiques différentes, mais je pense que si vous êtes en train de créer tout un tas d'inutiles supplémentaires les panneaux imbriqués dans le but d'éléments de positionnement, vous avez clairement besoin d'apprendre comment utiliser un GridBagLayout (ou d'autres de même mise en page avancée, comme MiGLayout). Vous pouvez obtenir de votre interface pour regarder bien avec un affreux désordre de imbriquée BorderLayouts et GridLayouts et BoxLayouts, mais dès que quelqu'un commence le redimensionnement de votre application windows et de boîtes de dialogue soit plus petit ou plus grand que vous avez initialement conçu, votre GUI sera probablement l'air horrible et vos clients vont commencer à se former une opinion négative au sujet de votre produit car vous ne pourriez pas obtenir une chose toute simple droite.

Mise à jour: j'ai été en utilisant WindowBuilder dans Eclipse pour un certain temps maintenant, et il simplifie grandement le travail avec de nombreuses mises en page, en particulier le GridBagLayout. J'ai l'habitude de passer beaucoup de temps à écrire des mises en page à la main, mais avec WindowBuilder ou probablement tout de même avancé visual editor, vous pouvez créer des mises en page en beaucoup moins de temps.

15voto

mantrid Points 1923

DesignGridLayout deux ont fière allure et sont faciles à utiliser grâce à une interface fluide .

il suffit de regarder exemple:

entrez la description de l'image ici

avec seulement quelques lignes de code propre:

     layout.row().grid(label("Last Name"))   .add(lastNameField) .grid(label("First Name"))  .add(firstNameField);
    layout.row().grid(label("Phone"))       .add(phoneField)    .grid(label("Email"))       .add(emailField);
    layout.row().grid(label("Address 1"))   .add(address1Field);
    layout.row().grid(label("Address 2"))   .add(address2Field);
    layout.row().grid(label("City"), 1)     .add(cityField);
    layout.row().grid(label("State"))       .add(stateField)    .grid(label("Postal Code")) .add(postalField);
    layout.row().grid(label("Country"), 1)  .add(countryField);
    layout.emptyRow();
    layout.row().center().add(newButton).add(deleteButton).add(editButton).add(saveButton).add(cancelButton);
 

12voto

Jack Points 61503

Ça dépend du type de modèle que vous avez besoin, c'est pourquoi vous avez 8 d'entre eux:

  1. BorderLayout, simple et très utile pour la conception normale cadres de contenu (avec le principal contenu dans le milieu et les aides sur les côtés).
  2. GridLayout, c'est utile lorsque vous disposez d'une grille d'objets qui doivent être de la même taille (boutons? textfields?).
  3. GridBagLayout, très souple, a besoin de quelques ajustements pour être bien et il est assez bavard (mais je raccomend si vous voulez faire les choses bien).
  4. FlowLayout, ce qui est inutile.. pas très mise en page: il suffit de placer le point un à côté de l'autre.
  5. CardLayout, utile pour les onglets ou les sous-vues qui doit être sous tension.
  6. BoxLayout, jamais utilisé trop.. il devrait être une sorte de renforcement de la FlowLayout mais il n'est pas assez flexible pour être utilisé de manière intensive.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X