GridBagLayout in a JTabbedPane... The Java Gods do not favor me...
My problem is as follows; My goal is to automate the administration of a small company specialised in recruiting personell for the logistics sector. (Yes, to any sane person it would be illogical to hire me, as I'm inexperienced in programming, but hey, I'm cheap and so are they!) One of their requests was that the program will feature three main categories, seperated using tabs. (Thus: JTabbedPane's.)
I studied the various layout managers available in Java and concluded that the GridBagLayout would be the best for this case. Especially because of its ability to put everything in columns and rows (just like I'm used -- I've got a bit of a webdesign background) and to make cells span over colums and rows.
However, in my quest to whack a GridBagLayout into a JTabbedPane, I found out that it's in fact bloody hard to get it in there. What's the deal with that?!
I'll stop babbeling and will simply copy and paste the code below, editing out the bits and pieces that don't matter.
My simple question is: What's wrong with the following code? Also, am I even slightly on the right track of am I totally off? If possible (and hopefully), could you supply me with the solution to my problems?
Three things should be noted:
1) It's really not desirable to change to anything that isn't GridBagLayout.
2) I've totally searched by butt off on the internet using various search queries. It's pure luck that I stumbled across this board since this is actually the first board -- excluding the official java board from sun.com -- that treats Java subjects. (The official board doesn't seem to be giving of very useful answers. It also doesn't let me subscribe, giving a 404 whenever I hit that registration button..)
3) Some of the comments are in Dutch. They explain nothing important, so don't worry.
The code:
==========================================================
// GUI File
// This file contains the GUI for the Administration
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JMenuBar;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.ListSelectionModel;
public class GUI extends JFrame
{
private GridBagLayout layout;
private GridBagConstraints gridBagC;
private JList listWeerWerk;
// deze is tijdelijk en geeft wat inhoud aan de JList.
private final String tempNames[] = { "Bhaggoe, Akash", "Hofstee, Eelco", "Graaf van de, Steven", "Ruben, Ivo", "Kitten", "Dog", "Evil Kitty", "Menacing Penguing", "Scrooge McDuck", "Donald Duck", "Mincemeat" };
public GUI()
{
super( "Administration" );
/*=================================================
PANELS ============================================= */
JTabbedPane tabbedPane = new JTabbedPane(); // create JTabbedPane
/*=================================================
PANEL 1 -- EMPLOYEES
=================================================*/
// Je maakt hier het panel aan en laat weten in wat voor een soort layout manager deze komt en hoe deze gaat heten.
JPanel panel1 = new JPanel();
panel1.setLayout( new GridBagLayout() );
panel1.setLayout( layout );
GridBagConstraints gridBagC = new GridBagConstraints();
gridBagC.anchor = GridBagConstraints.NORTH; // dit HOORT ervoor te zorgen dat alles, mits er te weinig ruimte is, naar boven (het noorden) aligned.
gridBagC.ipadx = 5; // dit zorgt ervoor dat er 5 pixels ruimte zit tussen alle knoppen e.d. op de verticale as.
gridBagC.ipady = 5; // dit HOORT ervoor te zorgen dat er 5 pixels ruimte zit tussen alle knoppen e.d. op de horizontale as.
gridBagC.fill = GridBagConstraints.HORIZONTAL; // dit zorgt ervoor dat wanneer er ruimte over is op de horizontale as, dat alle objecten (knoppen, lijstjes, e.d.) zich uitdijen tot de breedte van het venster.
gridBagC.weightx = 1; // dit zorgt ervoor dat de knoppen toegestaan zijn om breder te worden op de horizontale as.
// hieronder worden de knoppen aangemaakt die bij de werknemers horen
JButton buttWerkToe = new JButton( "Werknemers toevoegen" );
JButton buttWerkWij = new JButton( "Werknemers wijzigen" );
JButton buttWerkBlack = new JButton ( "Werknemer blacklist weergeven" );
// hieronder worden de sorteeropties aangemaakt die bij de werknemer horen
String sortnames[] = { "Sorteren op: Achternaam", "Sorteren op: Plaats", "Sorteren op: Leeftijd", "Sorteren op: Waardering" };
JComboBox comboSort = new JComboBox( sortnames );
// hieronder worden de tekstlabels aangemaakt die bij de werknemers horen
JLabel labEmpty = new JLabel( "" );
JLabel labWerkWeer = new JLabel( "Werknemers weergeven:" );
JLabel labNaam = new JLabel( "Naam" );
JLabel labPlaats = new JLabel( "Plaats" );
JLabel labLeeftijd = new JLabel( "Leeftijd" );
JLabel labWaard = new JLabel( "Waardering" );
// hier wordt de scrollbar aangemaakt die bij de JList hoort
JScrollPane listScrollPane = new JScrollPane( listWeerWerk );
// hieronder wordt de lijst met alle werknemers erop aangemaakt. Ook wordt er verteld hoeveel werknemers er tegelijk mogen worden geselecteerd.
JList listWeerWerk = new JList( tempNames );
listWeerWerk.setSelectionMode( ListSelectionModel.SINGLE_SELECTION ); // dit zorgt ervoor dat er maar 1 persoon tegelijk in de namenlijst kan worden geselecteerd.
// HIERONDER worden alle bovenstaande knoppen, labels, comboboxes, lijstjes en scrollbars een plek gegeven in de applicatie
gridBagC.gridy = 0; // de rij waar deze knop begint
gridBagC.gridx = 1; // de kolom waar deze knop begint
gridBagC.gridwidth = 1; // de hoeveelheid kolommen die deze knop spant
gridBagC.gridheight = 1; // de hoeveelheid rijen die deze knop spant
layout.setConstraints( buttWerkToe, gridBagC ); // hier worden de layout, de constraints en de knop zelf bij elkaar samen gevoegd (zodat Java weet dat deze bij elkaar horen)
panel1.add( buttWerkToe ); // hier voeg je de knop feitelijk toe
gridBagC.gridy = 0;
gridBagC.gridx = 3;
gridBagC.gridwidth = 1;
gridBagC.gridheight = 1;
layout.setConstraints( buttWerkWij, gridBagC );
panel1.add( buttWerkWij );
gridBagC.gridy = 0;
gridBagC.gridx = 5;
gridBagC.gridwidth = 1;
gridBagC.gridheight = 1;
layout.setConstraints( buttWerkBlack, gridBagC );
panel1.add( buttWerkBlack );
gridBagC.gridy = 0;
gridBagC.gridx = 7;
gridBagC.gridwidth = 1;
gridBagC.gridheight = 1;
layout.setConstraints( comboSort, gridBagC );
panel1.add( comboSort );
// temp
gridBagC.gridy = 1;
gridBagC.gridx = 0;
gridBagC.gridwidth = 8;
gridBagC.gridheight = 1;
layout.setConstraints( labEmpty, gridBagC );
panel1.add( labEmpty );
gridBagC.gridy = 2;
gridBagC.gridx = 0;
gridBagC.gridwidth = 8;
gridBagC.gridheight = 1;
layout.setConstraints( labWerkWeer, gridBagC );
panel1.add( labWerkWeer );
gridBagC.gridy = 3;
gridBagC.gridx = 0;
gridBagC.gridwidth = 3;
gridBagC.gridheight = 1;
layout.setConstraints( labNaam, gridBagC );
panel1.add( labNaam );
gridBagC.gridy = 3;
gridBagC.gridx = 3;
gridBagC.gridwidth = 2;
gridBagC.gridheight = 1;
layout.setConstraints( labPlaats, gridBagC );
panel1.add( labPlaats );
gridBagC.gridy = 3;
gridBagC.gridx = 5;
gridBagC.gridwidth = 2;
gridBagC.gridheight = 1;
layout.setConstraints( labLeeftijd, gridBagC );
panel1.add( labLeeftijd );
gridBagC.gridy = 3;
gridBagC.gridx = 7;
gridBagC.gridwidth = 2;
gridBagC.gridheight = 1;
layout.setConstraints( labWaard, gridBagC );
panel1.add( labWaard );
gridBagC.gridy = 4;
gridBagC.gridx = 0;
gridBagC.gridwidth = 8;
gridBagC.gridheight = 1;
layout.setConstraints( listWeerWerk, gridBagC );
panel1.add( listWeerWerk );
// de naam van de tab, de bijschrift en het feitelijke toevoegen aan de tabbar.
tabbedPane.addTab( "Werknemers", null, panel1, "Onder deze tab kunt u uw werknemers beheren" );
/*=================================================
PANEL 2 -- CLIENTS
=================================================*/
JPanel panel2 = new JPanel(); // create second panel
panel2.setLayout( new FlowLayout() ); // use flowlayout
panel2.add( new JButton( "Opdrachtgevers weergeven" ) );
panel2.add( new JButton( "Opdrachtgevers toevoegen" ) );
panel2.add( new JButton( "Opdrachtgever blacklist weergeven" ) );
tabbedPane.addTab( "Opdrachtgevers", null, panel2, "Onder deze tab kunt u uw opdrachtgevers beheren" );
/*=================================================
PANEL 3 -- SEARCH FUNCTION
=================================================*/
JPanel panel3 = new JPanel(); // create third panel
tabbedPane.addTab( "Zoeken op werknemers", null, panel3, "Onder deze tab kunt u zoeken op werknemers" );
add( tabbedPane ); // add JTabbedPane to frame
} // ends GUI
} // end public class GUI

