swing
GridBag-indeling
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.
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