Ricerca…


Sintassi

  • frame.setLayout (new GridBagLayout ()); // Imposta GridBagLayout per il frame
  • pane.setLayout (new GridBagLayout ()); // Imposta GridBagLayout per Panel
  • JPanel pane = new JPanel (new GridBagLayout ()); // Imposta GridBagLayout per Panel
  • GridBagConstraints c = new GridBagConstraints () // Inizializza GridBagConstraint

Come funziona GridBagLayout?

I layout vengono utilizzati ogni volta che si desidera che i componenti non vengano semplicemente visualizzati l'uno accanto all'altro. Il GridBagLayout è utile, poiché divide la tua finestra in righe e colonne e tu decidi in quale riga e colonna inserire i componenti, nonché quante righe e colonne sono grandi il componente.

Prendiamo questa finestra come esempio. Le linee della griglia sono state contrassegnate per mostrare il layout.

GridBagLayout visualizzato

Qui, ho creato 6 componenti, disposti utilizzando un GridBagLayout.

Componente Posizione Taglia
JLabel : "My Amazing Swing Application" 0, 0 3, 1
JButton : "Pulsante A" 0, 1 1, 1
JButton : "Pulsante B" 1, 1 1, 1
JButton : "Pulsante C" 2, 1 1, 1
JSlider 0, 2 3, 1
JScrollBar 0, 3 3, 1

Nota che la posizione 0, 0 è in alto a sinistra: i valori di x (colonna) aumentano da sinistra a destra, i valori di y (riga) aumentano dall'alto verso il basso.

Per iniziare a disporre i componenti in GridBagLayout , prima imposta il layout del tuo JFrame o del riquadro del contenuto.

frame.setLayout(new GridBagLayout());
//OR
pane.setLayout(new GridBagLayout());
//OR
JPanel pane = new JPanel(new GridBagLayout()); //Add the layout when creating your content pane

Si noti che non si definisce mai la dimensione della griglia. Questo viene fatto automaticamente quando aggiungi i tuoi componenti.

Successivamente, sarà necessario creare un oggetto GridBagConstraints .

GridBagConstraints c = new GridBagConstraints();

Per assicurarti che i tuoi componenti riempiano le dimensioni della finestra, potresti voler impostare il peso di tutti i componenti su 1. Il peso viene usato per determinare come distribuire lo spazio tra colonne e righe.

c.weightx = 1;
c.weighty = 1;

Un'altra cosa che potresti voler fare è assicurarti che i componenti occupino tutto lo spazio orizzontale possibile.

c.fill = GridBagConstraints.HORIZONTAL;

Puoi anche impostare altre opzioni di riempimento se lo desideri.

GridBagConstraints.NONE //Don't fill components at all
GridBagConstraints.HORIZONTAL //Fill components horizontally
GridBagConstraints.VERTICAL //Fill components vertically
GridBagConstraints.BOTH //Fill components horizontally and vertically

Quando crei i componenti, vorrai impostare dove dovrebbe essere posizionato sulla griglia e quante piastrelle della griglia dovrebbe usare. Ad esempio, per posizionare un pulsante nella terza riga nella seconda colonna e occupare uno spazio di griglia 5 x 5, effettuare le seguenti operazioni. Tieni presente che la griglia inizia da 0, 0 , non 1, 1 .

JButton button = new JButton("Fancy Button!");
c.gridx = 2;
c.gridy = 1;
c.gridwidth = 5;
c.gridheight = 5;
pane.add(buttonA, c);

Quando aggiungi componenti alla tua finestra, ricorda di passare i vincoli come parametro. Questo può essere visto nell'ultima riga nell'esempio di codice sopra.

È possibile riutilizzare lo stesso GridBagConstraints per ogni componente, cambiarlo dopo aver aggiunto un componente non cambia il componente aggiunto in precedenza.

Esempio

Ecco il codice per l'esempio all'inizio di questa sezione.

JFrame frame = new JFrame("Super Awesome Window Title!"); //Create the JFrame and give it a title
frame.setSize(512, 256); //512 x 256px size
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //Quit the application when the JFrame is closed

JPanel pane = new JPanel(new GridBagLayout()); //Create a pane to house all content, and give it a GridBagLayout
frame.setContentPane(pane);

GridBagConstraints c = new GridBagConstraints();
c.weightx = 1;
c.weighty = 1;
c.fill = GridBagConstraints.HORIZONTAL;

JLabel headerLabel = new JLabel("My Amazing Swing Application");
c.gridx = 0;
c.gridwidth = 3;
c.gridy = 0;
pane.add(headerLabel, c);

JButton buttonA = new JButton("Button A");
c.gridx = 0;
c.gridwidth = 1;
c.gridy = 1;
pane.add(buttonA, c);

JButton buttonB = new JButton("Button B");
c.gridx = 1;
c.gridwidth = 1;
c.gridy = 1;
pane.add(buttonB, c);

JButton buttonC = new JButton("Button C");
c.gridx = 2;
c.gridwidth = 1;
c.gridy = 1;
pane.add(buttonC, c);

JSlider slider = new JSlider(0, 100);
c.gridx = 0;
c.gridwidth = 3;
c.gridy = 2;
pane.add(slider, c);

JScrollBar scrollBar = new JScrollBar(JScrollBar.HORIZONTAL, 20, 20, 0, 100);
c.gridx = 0;
c.gridwidth = 3;
c.gridy = 3;
pane.add(scrollBar, c);

frame.setVisible(true); //Show the window

Esempio GridBagLayout



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow