Posizionare lato pulsante a fianco
-
20-09-2019 - |
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);
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.