Domanda

Quale gestore di layout della GUI Java utilizza tutti? Ultimamente ho usato MigLayout , che ha alcuni potenti controlli sui componenti. Volevo solo vedere cosa usano altri sviluppatori oltre a quelli standard di JDK.

È stato utile?

Soluzione

MiGLayout è il gestore di layout della GUI che è ampiamente utilizzato dagli sviluppatori Java.

Altri suggerimenti

GridBagLayout è utilizzabile. Una volta che ti sei abituato a usarlo, funziona benissimo. Penso che i gestori di layout JDK standard siano abbastanza potenti da soli. Inoltre, puoi minimizzare la dipendenza da librerie di terze parti.

MiG e FormLayout (JGoodies) sono entrambi eccellenti per il layout manuale (e quasi tutto il layout alla fine diventa manuale). Il mio consiglio più grande è quello di progettare le tue viste in modo da poter strappare completamente il layout e implementarlo di nuovo senza influire sull'applicazione (una buona separazione della vista e del controller è la chiave qui).

Dai sicuramente un'occhiata all'approccio PresentationModel di JGoodie per l'implementazione di viste "stupide". Uso questa tecnica con un builder GUI (utilizzo GroupLayout con il plug-in builder Jigloo GUI) per lanciare prototipi rapidi. Dopo 3 o 4 iterazioni, di solito esce dalla finestra e facciamo una reimplementazione usando MiG o FormLayout.

EDIT: da quando ho scritto questo, sono passato all'utilizzo di MiG per tutti i miei layout e non uso più un builder GUI - è semplicemente troppo facile esporre le cose usando MiG.

L'ultima applicazione Swing su cui ho lavorato ha usato JGoodies 'FormsLayout .

Uso GridBagLayout . Sembra prendere un sacco di codice, ma rende layout molto belli.

Mi piace anche combinare BorderLayout con i pannelli GridBagLayout per una grande personalizzazione.

Sono un grande fan dell'uso di TableLayout invece di GridBagLayout. Tutto ha un senso, mentre ogni volta che provo ad usare GridBagLayout mi schiaccia l'anima.

Uso GridBagLayout per il controllo, ma poiché java1.6 userò GroupLayout è fantastico.

Ecco uno screenshot e un codice di esempio per usarlo !.

alt text 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 ) );
    }

Uso DesignGridLayout per la maggior parte dei miei pannelli.

Per i rari pannelli che DesignGridLayout non è in grado di gestire completamente, utilizzo un mix di Borderlayout e DesignGridLayout .

Con DesigngridLayout è possibile codificare manualmente i layout con un numero minimo di righe di codice, facili da scrivere e da leggere:

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);

Ogni riga della griglia del pannello è definita da una riga di codice. Come puoi vedere, " disegno " il tuo pannello è abbastanza semplice.

Inoltre, trovo che DesignGridLayout abbia alcune caratteristiche uniche (come il suo " ridimensionamento verticale intelligente ").

GridBagLayout è potente ma piuttosto primitivo: il codice che collega il layout è molto dettagliato. Questa libreria di utilità (in realtà solo 1 file jar contenente circa 10 classi) semplifica molti lavori: http : //code.google.com/p/painless-gridbag/ il seguente frammento è citato dalla home page di quel sito:

    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();

Come panoramica generale, potresti trovare utile un articolo che ho scritto molto tempo fa a Sun. Non è aggiornato con i più recenti gestori di layout, ma si concentra sull'annidamento efficace dei gestori di layout, piuttosto che cercare di fare tutto con un solo layout.

Vedi http://developer.java.sun.com/developer/ onlineTraining / GUI / AWTLayoutMgr

Ho scoperto che per qualsiasi GUI non banale utilizzo più layout con sotto-pannelli nidificati in cui il pannello principale può avere un GridBagLayout e ogni sotto-pannello (in genere senza bordo o indicazione che è un pannello) utilizza un layout più semplice ove possibile. In genere userò BorderLayout , FlowLayout e BoxLayout per pannelli secondari più piccoli e semplici. Dividendo piccole sezioni della GUI in sotto-pannelli e usando il layout più semplice possibile per controllare quella sezione della GUI è possibile creare schermi complessi e ben organizzati senza troppi mal di testa dalle molte opzioni di GridBagLayout . Inoltre, raggruppando come funzionalità di visualizzazione in un pannello, crea un codice più leggibile.

Layout a molla sviluppato per mantissa gui builder che fa parte dei netbeans.

Ho usato GroupLayout anche. Ancora una volta, è un gestore di layout JDK standard a partire da Java6, ma puoi trovare anche la libreria separata.

Sono sempre stato un grande fan di GridBagLayout. Assomiglia molto alle tabelle HTML, quindi è intuitivo per quei programmatori web.

Ho iniziato usando vari layout nidificati, poi sono passato a GridBagLayout (che è piuttosto frustrante). Da allora ho provato FormLayout (ma ho scoperto che non era adatto a nient'altro che ai moduli) e mi sono fissato saldamente su TableLayout, che nel complesso sono molto contento.

Da allora ho scoperto MiGLayout e sebbene non abbia fatto molto di più che giocarci, sembra molto capace, abbastanza simile a TableLayout e probabilmente un po 'più pulito.

Il grande vantaggio per me è che MiGLayout è destinato a diventare parte del JDK, quindi intendo usarlo praticamente esclusivamente quando lo fa.

L'altra cosa da ricordare è che, indipendentemente dal layoutManager pesante su cui ti accontenti, c'è sempre posto per alcuni dei gestori di layout più semplici come GridLayout. Ho visto alcune cose orribili fatte con GridBagLayout che avrebbero potuto essere fatte molto più facilmente con un gestore di layout più semplice.

Preferisco minimizzare le dipendenze dalle librerie di terze parti, quindi di solito è BoxLayout per le finestre di dialogo e GridBagLayout per " complicato " layout. GridBagLayout è abbastanza facile da capire, ma un po 'difficile da configurare. Mi sono scritto uno strumento per creare il codice da layout HTML (spero che aiuti anche gli altri): http: //www.onyxbits. de / content / blog / patrick / java-gui-edificio-GridBagLayout-manager-made-facile

L'unico gestore di layout che ho trovato, che in realtà mi piace è Gestore layout relativo . Relative Layout Manager funziona in modo coerente con il modo in cui le finestre di dialogo sono concettualmente organizzate. Uno svantaggio è che mentre questo gestore del layout si occupa dei vincoli additivi. Sembra che non abbia a che fare con vincoli di rapporto. Fortunatamente è abbastanza ben progettato e sono stato in grado di implementare questa funzione.

Uso BorderLayout 90% delle volte durante la nidificazione BoxLayout e SpringLayout

Sono un po 'un principiante di Java.

Ho provato GridBagLayout, ho rinunciato, poi ho provato BoxLayout, poi ho rinunciato, poi ho creato il mio Layout personalizzato che ha funzionato. Con GridBag e Box ho messo la mia ipotesi migliore e i motori di layout hanno deciso di fare qualcosa di diverso, senza alcun modo apparente per eseguirne il debug.

Con il mio layout personalizzato, ho potuto stampare coordinate, larghezze e altezze, per scoprire dove stava andando storto. È un po 'complicato mettere le cose, ma hai tutta la potenza di Java da usare piuttosto che il vocabolario limitato di uno dei gestori di layout integrati.

Ovviamente era solo per un progetto a casa, non ti saresti mai permesso farlo al lavoro.

Uso GridBagLayout per moduli come layout, uso BorderLayout per layout semplici e FlowLayout per il numero di icone / pulsanti orizzontali che hanno degli spazi in mezzo. Netbeans è anche un buon costruttore di GUI che può evitare molte noiose codifiche di layout per risparmiare tempo.

Ho iniziato a usare Swing di recente e sto usando GridBagLayout.

Ero stufo di tutti quei layout manager che avevano bisogno di un sacco di setup, non ero molto leggibile o faticoso da fare manualmente, quindi ho scritto il mio semplicissimo laoutmanager che utilizza l'astrazione di due fotocorner mantenendo in posizione ogni componente. Puoi aggiungere il tuo componente in questo modo: parent.add (child, " topleft (0, 0,5) bottomright (0.5,1.0) ");

Dai un'occhiata qui https://github.com/hageldave/UsefulStuff/blob /master/src/PhotoCornersLayout.java ;) sei comunque responsabile per un layout corretto, perché non controlla le sovrapposizioni o altre carenze del layout.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top