Domanda

come posso fare un lato luogo tasto a fianco. Ho usato un GridBagLayout per progettare il problema layout.The è che il luogo pulsante di troppo distanti tra loro. Ho cercato di scegliere il centro di ancoraggio, ma questo rende il pulsante di sovrapposizione. Se ho usato Occidente e Oriente, il pulsante posizionato troppo lontano gli uni dagli altri.

es. SAVE ---------- nuovo schema, invece di SAVE NEW_PATTERN.

JButton bSave = new JButton("SAVE");
JButton bPattern = new JButton("NEW_PATTERN");
con = new GridBagConstraints();
con.anchor=GridBagConstraints.WEST;
con.gridy = 3; con.gridx = 0;           
con.gridwidth = 1; con.gridheight = 1;      
con.insets= new Insets(2,5,2,2);        
m.setConstraints(bSave, con);
c.add(bSave);
con.weightx=1;
con.gridy=3; con.gridx=0;
con.anchor=GridBagConstraints.EAST;
m.setConstraints(bPattern,con);
c.add(bPattern);
È stato utile?

Soluzione

Grazie akf, che hanno risolto il problema mettendo il FlowLayout all'interno del GridBagLayout.

....
JButton bSave = new JButton("Save");
JButton bPattern = new JButton("New Pattern");
JPanel pContainer = new JPanel();
pContainer.setLayout(new FlowLayout(FlowLayout.CENTER));
pContainer.add(bSave); pContainer.add(bPattern); 
con = new GridBagConstraints();
con.anchor=GridBagConstraints.CENTER;
con.gridy = 3; con.gridx = 0;           
con.gridwidth = 1; con.gridheight = 1;      
m.setConstraints(pContainer, con);
c.add(pContainer);
....

Altri suggerimenti

GridBagLayout è il più complicato dei layout. Se sei solo allineando un paio di pulsanti, mi consiglia di utilizzare FlowLayout (impostazione predefinita) o BoxLayout. Ma, se si desidera utilizzare GridBagLayout, invece di regolare l'ancora, regolare il gridx di essere 1 per il secondo pulsante. Inoltre, non so perché si dispone di un gridy di 3 invece di gridy di 0 (a meno che non ci sia altro codice che avete omesso che utilizza gridy di 0-2).

Perché non leggere i vecchi post prima di postare nuove domande?

dove dato un link al tutorial swing nel tuo ultimo post. In modo di leggere il tutorial, provare gli esempi e utilizzare il gestore di layout adeguato o la combinazione di gestori di layout per il lavoro.

Invece di GridBagLayout, GridLayout è una soluzione semplice. E 'facile da installare:

JButton bSave = new JButton("SAVE");
JButton bPattern = new JButton("NEW_PATTERN");
JPanel panel = new JPanel(new GridLayout(1,2); // 1 row, 2 cols
panel.add(bSave);
panel.add(bPattern);

EDIT:

Solo per curiosità, mi è stato scherzare con l'originale e ho trovato una combinazione che consente l'utilizzo del solo GridBagLayout. Non è molto diverso da quello originale:

GridBagConstraints con = new GridBagConstraints();
con.anchor=GridBagConstraints.WEST;
con.gridy = 3;
con.gridx = 0;                   
con.gridwidth = 1; 
con.gridheight = 1;          
con.insets= new Insets(2,5,2,2);        
m.setConstraints(bSave, con);
c.add(bSave);
con.weightx=0;
con.gridy=3;
con.gridx=1;//this is the big diff!
con.anchor=GridBagConstraints.EAST;
m.setConstraints(bPattern,con);
c.add(bPattern);

Questo codice collocare il lato pulsanti a fianco nel centro dello schermo.

La chiave sono:

constraints.fill = GridBagConstraints.NONE; -> rendere i butons non espandere

constraints.insets.right = 0; -> rende i pulsanti si affiancano

constraints.insets.left = 0; -> rende i pulsanti si affiancano

constraints.weightx = 1 -> rende la cella goduto i pulsanti vengono EXPANDO orizzontalmente

constraints.anchor = GridBagConstraints.EAST; -> rende il tasto sinistro per stare al della cella

constraints.anchor = GridBagConstraints.WEST; -> rende il tasto destro per stare alla sinistra della cella

public static void main(String args[]){
        JFrame frame=new JFrame();
        Container cont=frame.getContentPane();
        cont.setLayout(new GridBagLayout());

        GridBagConstraints constraints=new GridBagConstraints();
        constraints.insets.top=2;
        constraints.insets.bottom=2;
        constraints.insets.left=0;// increment to separate buttons
        constraints.insets.right=0;// increment to separate buttons
        constraints.fill=GridBagConstraints.NONE;
        constraints.weightx=1;
        constraints.gridy=0;

        constraints.anchor=GridBagConstraints.EAST;
        constraints.gridx=0;
        cont.add(new JButton("Save"),constraints);

        constraints.anchor=GridBagConstraints.WEST;
        constraints.gridx=1;
        cont.add(new JButton("New Pattern"),constraints);

        frame.pack();
        frame.setVisible(true);
    }

vi consiglio di leggere il tutorial per GridBagLayout in quanto è fuori dalla scatola il più avanzato gestore di layout e rende gli altri obsoleti. Vale la pena di apprendimento per questi motivi. Rende tutto semplice se si pensa di esso come una griglia e tutto quello che dovete ottenere di destra, allora è il coordinate x e y che è quello che vi siete persi nel codice. Eri quasi arrivato:)

miscelazione gestori di layout di solito è una pessima idea dal momento che tutti funzionano in modo leggermente diverso quando si tratta di riempire i contenitori con spazio extra.

@camickr Sulla base di mio commento le persone dovrebbero usare GridBagLayout dal momento che è il più flessibile e può essere utilizzato in qualsiasi situazione. Avere un solo dovrebbe tradursi in semplice e gestibile poteva. Trovo anche molto facile da leggere in quanto è logico mappato. I contstraints cambiano solo se si utilizza uno dei vincoli agli oggetti di tutti i componenti, che è ovviamente una cattiva idea.

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