Thread: JAVA: Gridlayout in panel
-
14-11-2011, 14:27 #1
JAVA: Gridlayout in panel
Ben hier terug =)
Ik moet een 20-tal vierkanten in een panel krijgen.
4 rijen, 5 kolommen.
Dit is mijn doel:

Zo ziet het er momenteel uit:

Maar ik ben waarschijnlijk verkeerd bezig door 20 objecten aan te maken en dan telkens toe te voegen?
Zo staat het momenteel:
Code:package view; import java.awt.*; import javax.swing.*; import view.rm_panel; public class rm_kleur extends rm_layout { public rm_kleur() { rm_panel flowlayout = new rm_panel(Color.GRAY, 100,100); rm_panel gridlayout = new rm_panel(Color.YELLOW, 100,700); GridLayout grid = new GridLayout(4,5); rm_panel kotje1 = new rm_panel(Color.RED,20,20); rm_panel kotje2 = new rm_panel(Color.RED,20,20); rm_panel kotje3 = new rm_panel(Color.RED,20,20); rm_panel kotje4 = new rm_panel(Color.RED,20,20); rm_panel kotje5 = new rm_panel(Color.RED,20,20); rm_panel kotje6 = new rm_panel(Color.RED,20,20); rm_panel kotje7 = new rm_panel(Color.RED,20,20); rm_panel kotje8 = new rm_panel(Color.RED,20,20); rm_panel kotje9 = new rm_panel(Color.RED,20,20); rm_panel kotje10 = new rm_panel(Color.RED,20,20); rm_panel kotje11 = new rm_panel(Color.RED,20,20); rm_panel kotje12 = new rm_panel(Color.RED,20,20); rm_panel kotje13 = new rm_panel(Color.RED,20,20); grid.setRows(4); grid.setColumns(5); grid.setVgap(50); grid.setHgap(50); gridlayout.setLayout(grid); gridlayout.add(kotje1); gridlayout.add(kotje2); gridlayout.add(kotje3); gridlayout.add(kotje4); gridlayout.add(kotje5); gridlayout.add(kotje6); gridlayout.add(kotje6); gridlayout.add(kotje7); gridlayout.add(kotje8); gridlayout.add(kotje9); gridlayout.add(kotje10); gridlayout.add(kotje11); gridlayout.add(kotje12); this.getContentPane().add(flowlayout, BorderLayout.NORTH); this.getContentPane().add(gridlayout, BorderLayout.SOUTH); } }I'm not your friend, buddy.no votes
-
-
14-11-2011, 14:44 #2Approved 9-lifer
- Registered
- 27/08/04
- Location
- Leuven
- Posts
- 930
- iTrader
- 0
- Mentioned
- 0 Post(s)
- Reputation
- 11/38
Hoe ziet die rm_panel eruit?
Het lijkt me dat al die kotjes tesamen gewoon te groot zijn om te tonen binnen het scherm van de applicatie. Probeer de size van de kotjes of de applicatie aan te passen (hardcoded, of beter nog dynamisch).
Hier wat extra info: How to Use GridLayout (The Java™ Tutorials > Creating a GUI With JFC/Swing > Laying Out Components Within a Container)
Hou je aan de Java naamgeving conventies: klassennamen met hoofdletter.
Gebruik een for of while loop voor al die kotjes.
Het is énorm verwarrend dat je de eigenlijke grid paneel de gridlayout noemt en de gridlayout de grid...I am thee and thou art me and all of one is the other.
TED talk: Richard Dawkins on militant atheismno votes
-
14-11-2011, 14:45 #3
Hoe meer kotjes ik toevoeg, hoe kleiner ze worden. (soort fit to window?)
rm_panel ziet er zo uit:
Code:package view; import java.awt.*; import javax.swing.JPanel; public class rm_panel extends JPanel { public rm_panel(Color col) { this.setBackground(col); } public rm_panel(Color col, int width, int height) { this.setPreferredSize(new Dimension(width,height)); this.setBackground(col); } }I'm not your friend, buddy.no votes
-
14-11-2011, 15:24 #4
Hoe gaat die for-loop dan in zijn werk om object aan te maken?
Kotje1 kan toch maar 1x bestaan?
for(int i = 0; i < 21; i++) {
rm_panel kotje1 = new rm_panel(Color.RED,20,20);
}I'm not your friend, buddy.no votes
-
14-11-2011, 20:16 #5Approved 9-lifer
- Registered
- 27/08/04
- Location
- Leuven
- Posts
- 930
- iTrader
- 0
- Mentioned
- 0 Post(s)
- Reputation
- 11/38
Klassieke beginnersdenkfout:
Je wilt niet voor al die kotjes een aparte variabele. Je gaat al die kotjes in een of andere container steken waar je die dan uit kan halen met een methode of over loopen via de for each. Dat kan een ArrayList, array, JPanel... zijn.I am thee and thou art me and all of one is the other.
TED talk: Richard Dawkins on militant atheismno votes
-
14-11-2011, 23:22 #6
en als je met threads werkt, gebruik je best een vector omdat deze thread safe zijn en anders gewoon een array/arraylist/... dus ik zou gewoon een arraylist in u geval gebruiken
Last edited by E0x4; 15-11-2011 at 19:10.
no votes

