Sök…


Syntax

  • frame.setLayout (nytt GridBagLayout ()); // Ställ in GridBagLayout för ram
  • pane.setLayout (nya GridBagLayout ()); // Ställ in GridBagLayout för panel
  • JPanel-ruta = ny JPanel (ny GridBagLayout ()); // Ställ in GridBagLayout för panel
  • GridBagConstraints c = new GridBagConstraints () // Initiera en GridBagConstraint

Hur fungerar GridBagLayout?

Layouter används när du vill att dina komponenter inte bara ska visas bredvid varandra. GridBagLayout är en användbar, eftersom det delar upp ditt fönster i rader och kolumner, och du bestämmer vilken rad och kolumn som ska läggas komponenter i, samt hur många rader och kolumner som stora komponenten är.

Låt oss ta detta fönster som ett exempel. Rutnät har markerats på för att visa layouten.

GridBagLayout visualiserad

Här har jag skapat 6 komponenter, utformade med en GridBagLayout.

Komponent Placera Storlek
JLabel : "My Amazing Swing Application" 0, 0 3, 1
JButton : "Knapp A" 0, 1 1, 1
JButton : "Knapp B" 1, 1 1, 1
JButton : "Knapp C" 2, 1 1, 1
JSlider 0, 2 3, 1
JScrollBar 0, 3 3, 1

Observera att position 0, 0 är uppe till vänster: x (kolumn) värden ökar från vänster till höger, y (rad) värden ökar från topp till botten.

För att börja lägga ut komponenter i en GridBagLayout , ställer du först layouten på din JFrame eller innehållsruta.

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

Observera att du aldrig definierar storleken på rutnätet. Detta görs automatiskt när du lägger till dina komponenter.

Efteråt måste du skapa ett GridBagConstraints objekt.

GridBagConstraints c = new GridBagConstraints();

För att säkerställa att dina komponenter fyller fönstret, kan du ställa in vikten på alla komponetter till 1. Vikt används för att bestämma hur du ska fördela utrymme mellan kolumner och rader.

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

En annan sak som du kanske vill göra är att se till att komponenter tar upp så mycket horisontellt utrymme som de kan.

c.fill = GridBagConstraints.HORIZONTAL;

Du kan också ställa in andra fyllningsalternativ om du vill.

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

När du skapar komponenter, vill du ställa in var på rutnätet det ska gå, och hur många rutnätplattor det ska använda. Till exempel, för att placera en knapp i den tredje raden i den andra kolumnen och ta upp ett 5 x 5 rututrymme, gör följande. Tänk på att rutnätet börjar på 0, 0 , inte 1, 1 .

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

Kom ihåg att skicka begränsningarna som en parameter när du lägger till komponenter i ditt fönster. Detta kan ses i den sista raden i kodexemplet ovan.

Du kan använda samma GridBagConstraints för varje komponent - att ändra den efter att du har lagt till en komponent ändrar inte den tidigare tillagda komponenten.

Exempel

Här är koden för exemplet i början av detta avsnitt.

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

Exempel GridBagLayout



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow