import java.awt.*; import javax.swing.*; import javax.swing.border.TitledBorder; /** * @author Jan Lemeire * * Met Boxen kan je componenten groeperen die je samen wilt zetten. * Zo maak je je layout op een hierarchische manier. * Een Box is een lichtgewicht (lightweight) component, die niet zoveel * extra geheugen en processortijd vraagt als bvb een panel. Ze zorgen * enkel voor de layout. * Als je de Borders verwijdert, zie je niets van de Boxen. * */ public class FrameLayoutWithBoxes extends JFrame { FrameLayoutWithBoxes(){ super("Frame using boxes for layout"); setSize(500, 425); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // when cross at top right is pressed Box b0 = Box.createHorizontalBox(); b0.setBorder(new TitledBorder("b0")); getContentPane().add(b0); JPanel panel = new JPanel(); // Box panel = Box.createVerticalBox(); // een panel zorgt ervoor dat de componenten niet 'uitgerokken' wordt, // maar netjes in het midden komen // om dit te zien: vervang JPanel door de Box lijn panel.setBorder(new TitledBorder("panel")); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); // verticale ordening b0.add(panel); Box b1 = Box.createVerticalBox(); b1.setBorder(new TitledBorder("b1")); panel.add(b1); Box b2 = Box.createHorizontalBox(); b2.setBorder(new TitledBorder("b2")); b1.add(b2); b1.add(Box.createVerticalStrut(10)); // scheidt b2 & b3 b2.add(new JLabel("Label")); b2.add(Box.createHorizontalStrut(10)); // om label & button te scheiden b2.add(new JButton("Button")); JPanel b3 = new JPanel(); // a Box sizes the enclosing combobox to full size // Box b3 = Box.createHorizontalBox(); b3.setBorder(new TitledBorder("b3")); b1.add(b3); b3.add(new JLabel("Label 2")); b3.add(Box.createHorizontalStrut(10)); // om label & button te scheiden JComboBox combo = new JComboBox(); combo.addItem("ComboBox"); b3.add(combo); b1.add(Box.createVerticalStrut(10)); Box b4 = Box.createVerticalBox(); panel.add(b4); // b4.setAlignmentX(Component.CENTER_ALIGNMENT); // does not work, you have to specify it for each component separately b4.add(Box.createVerticalStrut(5)); b4.setBorder(new TitledBorder("b4")); JButton but1 = new JButton("Button 1"); but1.setAlignmentX(Component.CENTER_ALIGNMENT); b4.add(but1); JButton but2 = new JButton("Button 2"); b4.add(Box.createVerticalStrut(5)); but2.setAlignmentX(Component.CENTER_ALIGNMENT); b4.add(but2); JPanel panel2 = new JPanel(); panel2.setPreferredSize(new Dimension(200, 300)); panel2.setBackground(Color.RED); b0.add(panel2); } public static void main(String s[]) { FrameLayoutWithBoxes frame = new FrameLayoutWithBoxes(); // puts window in the middle of the screen Dimension frameSize = frame.getSize(); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); frame.setLocation(screenSize.width / 2 - frameSize.width / 2, screenSize.height / 2 - frameSize.height / 2); frame.show(); } }