Zoeken…


Syntaxis

  • frame.setLayout (nieuwe GridBagLayout ()); // Stel GridBagLayout in voor frame
  • pane.setLayout (nieuwe GridBagLayout ()); // Stel GridBagLayout in voor Panel
  • JPanel-paneel = nieuw JPanel (nieuwe GridBagLayout ()); // Stel GridBagLayout in voor Panel
  • GridBagConstraints c = new GridBagConstraints () // Initialiseer een GridBagConstraint

Hoe werkt GridBagLayout?

Lay-outs worden gebruikt wanneer u wilt dat uw componenten niet alleen naast elkaar worden weergegeven. De GridBagLayout is handig, omdat deze uw venster in rijen en kolommen verdeelt en u beslist in welke rij en kolom u componenten wilt plaatsen, evenals in hoeveel rijen en kolommen de component groot is.

Laten we dit venster als voorbeeld nemen. Rasterlijnen zijn gemarkeerd om de lay-out weer te geven.

GridBagLayout gevisualiseerd

Hier heb ik 6 componenten gemaakt, ingedeeld met een GridBagLayout.

bestanddeel Positie Grootte
JLabel : "My Amazing Swing Application" 0, 0 3, 1
JButton : "Knop A" 0, 1 1, 1
JButton : "Button B" 1, 1 1, 1
JButton : "Button C" 2, 1 1, 1
JSlider 0, 2 3, 1
JScrollBar 0, 3 3, 1

Merk op dat positie 0, 0 links bovenaan staat: x (kolom) waarden stijgen van links naar rechts, y (rij) waarden stijgen van boven naar beneden.

Om componenten in een GridBagLayout , stelt u eerst de lay-out van uw JFrame of inhoudsvenster in.

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

Merk op dat u nooit de grootte van het raster definieert. Dit gebeurt automatisch wanneer u uw componenten toevoegt.

Daarna moet u een GridBagConstraints object maken.

GridBagConstraints c = new GridBagConstraints();

Om ervoor te zorgen dat uw componenten de grootte van het venster vullen, wilt u misschien het gewicht van alle componets instellen op 1. Gewicht wordt gebruikt om te bepalen hoe de ruimte over kolommen en rijen wordt verdeeld.

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

Een ander ding dat u misschien wilt doen, is ervoor zorgen dat componenten zoveel mogelijk horizontale ruimte innemen als ze kunnen.

c.fill = GridBagConstraints.HORIZONTAL;

U kunt desgewenst ook andere vulopties instellen.

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

Wanneer u componenten maakt, wilt u instellen waar op het raster moet komen en hoeveel rastertegels het moet gebruiken. Om bijvoorbeeld een knop in de 3e rij in de 2e kolom te plaatsen en een raster van 5 x 5 in te nemen, doet u het volgende. Houd er rekening mee dat het raster begint bij 0, 0 , niet 1, 1 .

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

Wanneer u componenten aan uw venster toevoegt, vergeet dan niet om de beperkingen door te geven als parameter. Dit is te zien op de laatste regel in het bovenstaande codevoorbeeld.

U kunt dezelfde GridBagConstraints voor elk component opnieuw gebruiken - het wijzigen van een component na het toevoegen van een component verandert niets aan de eerder toegevoegde component.

Voorbeeld

Hier is de code voor het voorbeeld aan het begin van deze sectie.

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

Voorbeeld GridBagLayout



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow