/* This applet demonstrates various layout managers. The applet itself uses a border layout with a JPanel in the center, a JComboBox menu to the North, and a JLabel to the south. The center panel uses a CardLayout. Each card in the card layout contains a number of buttons and uses a different layout manager. The JComboBox menu is used to select among these cards. The JLabel reports events as they occur. */ import java.awt.*; import java.awt.event.*; import javax.swing.*; public class LayoutDemo extends JApplet implements ActionListener, ItemListener { CardLayout cards; // the layout manager for the center panel JPanel cardPanel; // the center panel JComboBox panelChoice; // menu for selecting which card to show JLabel message; // a message shown at the bottom of the applet public void init() { panelChoice = new JComboBox(); // Set up the menu panelChoice.setBackground(Color.white); panelChoice.addItem("FlowLayout"); // Add in the names of the cards. panelChoice.addItem("FlowLayout with Big Hgap"); panelChoice.addItem("Vertical BoxLayout"); panelChoice.addItem("Horizontal BoxLayout with Struts"); panelChoice.addItem("BorderLayout"); panelChoice.addItem("GridLayout(3,2)"); panelChoice.addItem("GridLayout(1,0)"); panelChoice.addItem("GridLayout(0,1)"); panelChoice.addItemListener(this); message = new JLabel("Layout Demo", JLabel.CENTER); // Set up the mesage message.setBackground(Color.white); message.setOpaque(true); // so background color will show message.setBorder(BorderFactory.createEmptyBorder(5,0,3,0)); message.setForeground(Color.red); cardPanel = new JPanel(); // Set up the center panel cardPanel.setBackground(Color.white); cards = new CardLayout(); cardPanel.setLayout(cards); setBackground(Color.blue); getContentPane().setBackground(Color.blue); getContentPane().setLayout(new BorderLayout(3,3)); getContentPane().add("Center",cardPanel); getContentPane().add("North",panelChoice); getContentPane().add("South",message); JPanel panel; // Will represent various cards to be added to the center panel. Box box; // For the cards that use a BoxLayout. // Set up each "card" in the center panel to have its own layout // manager and to contain a variety of buttons. panel = new JPanel(); // use default FlowLayout for panel panel.setBackground(Color.white); cardPanel.add(panel, "FlowLayout"); addButton(panel,"First Button"); // ( addButton is a untility method, defined below ) addButton(panel,"Second Button"); addButton(panel,"Third Button"); addButton(panel,"Fourth Button"); addButton(panel,"Fifth Button"); addButton(panel,"Sixth Button"); addButton(panel,"Seventh Button"); panel = new JPanel(); panel.setLayout(new FlowLayout(FlowLayout.CENTER,30000,5)); panel.setBackground(Color.white); cardPanel.add(panel,"FlowLayout with Big Hgap"); addButton(panel," A Button"); addButton(panel,"Another Button"); addButton(panel,"A Third Button"); addButton(panel,"A Fourth Button"); addButton(panel,"A Final Button"); box = Box.createVerticalBox(); box.setBackground(Color.white); cardPanel.add(box,"Vertical BoxLayout"); addButton(box,"Button One"); addButton(box,"Button Two"); addButton(box,"Button Three"); addButton(box,"Button Four"); addButton(box,"Button Five"); addButton(box,"Button Six"); box = Box.createHorizontalBox(); box.setBackground(Color.white); cardPanel.add(box,"Horizontal BoxLayout with Struts"); addButton(box,"1st"); addButton(box,"2nd"); box.add( Box.createHorizontalStrut(10) ); addButton(box,"3rd"); addButton(box,"4th"); box.add( Box.createHorizontalStrut(10) ); addButton(box,"5th"); panel = new JPanel(); panel.setLayout(new BorderLayout()); panel.setBackground(Color.white); cardPanel.add(panel,"BorderLayout"); addButton(panel,"Center Button", BorderLayout.CENTER); addButton(panel,"North Button", BorderLayout.NORTH); addButton(panel,"South Button", BorderLayout.SOUTH); addButton(panel,"East Button", BorderLayout.EAST); addButton(panel,"West Button", BorderLayout.WEST); panel = new JPanel(); panel.setLayout(new GridLayout(3,2)); panel.setBackground(Color.white); cardPanel.add(panel,"GridLayout(3,2)"); addButton(panel,"Button 1"); addButton(panel,"Button 2"); addButton(panel,"Button 3"); addButton(panel,"Button 4"); addButton(panel,"Button 5"); addButton(panel,"Button 6"); panel = new JPanel(); panel.setLayout(new GridLayout(1,0)); panel.setBackground(Color.white); cardPanel.add(panel,"GridLayout(1,0)"); addButton(panel,"Button 1"); addButton(panel,"Button 2"); addButton(panel,"Button 3"); addButton(panel,"Button 4"); panel = new JPanel(); panel.setLayout(new GridLayout(0,1)); panel.setBackground(Color.white); cardPanel.add(panel,"GridLayout(0,1)"); addButton(panel,"Button 1"); addButton(panel,"Button 2"); addButton(panel,"Button 3"); addButton(panel,"Button 4"); addButton(panel,"Button 5"); addButton(panel,"Button 6"); } // end init() public Insets getInsets() { // specify borders around the edges of the applet return new Insets(3,3,3,3); } void addButton(Container p, String name) { // Create a button with the given name and add it // to the given panel. Set up the button to send // events to the applet. JButton b = new JButton(name); p.add(b); b.addActionListener(this); } void addButton(JPanel p, String name, Object option) { // Same as above, but use the "option" object // as an additional parameter in the add method. JButton b = new JButton(name); p.add(b, option); b.addActionListener(this); } public void actionPerformed(ActionEvent evt) { // A button was pressed. Report the name // of the button by setting the message text. String buttonName = evt.getActionCommand(); message.setText("Button \"" + buttonName + "\" was pressed."); } public void itemStateChanged(ItemEvent evt) { // The user has selected an item from the JComboBox. // Change the displayed card to match. String panelName = (String)panelChoice.getSelectedItem(); cards.show(cardPanel, panelName); message.setText("Panel \"" + panelName + "\" was selected."); } } // end class LayoutDemo