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