Borders
Home ] Up ] Model-View-Controller ] Layout Management ] Labels ] Text Input Components ] Checkboxes and Radio Buttons ] [ Borders ] Lists and Combo Boxes ] Scroll Bars and Scroll Panes ] Sliders & Spinners ] More on Layout Management ] Dialog Boxes ]

 

 

Often, you would like to enclose a set of visual components within a border of some kind.  For example, it is often helpful for a set of radio buttons in a single button group to be enclosed in a "group box", often with a title of some kind to help the user understand what's expected of him/her.

Note: This kind of border has nothing to do with the BorderLayout class.

Swing provides a number of border choices.  Here is an example that shows you what they look like:

package swingExamples;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Insets;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;

import javax.swing.border.Border;

class BordersPanel extends JPanel
{
  public BordersPanel()
  {
    setLayout( new BorderLayout() );
    add(new OuterPanel(), BorderLayout.CENTER);
    add(new InputPanel(), BorderLayout.SOUTH);
  }
  
  public void setPanelBorder()
  {
    Border border = null;
    if (m_borderCommand.equals(LOWERED_BEVEL))
    {
      border = BorderFactory.createLoweredBevelBorder();
    }
    else if (m_borderCommand.equals(RAISED_BEVEL))
    {
      border = BorderFactory.createRaisedBevelBorder();
    }
    else if (m_borderCommand.equals(ETCHED))
    {
      border = BorderFactory.createEtchedBorder();
    }
    else if (m_borderCommand.equals(LINE))
    {
      border = BorderFactory.createLineBorder(Color.blue);
    }
    else if (m_borderCommand.equals(MATTE))
    {
      border = BorderFactory.createMatteBorder(3, 3, 3, 3,
          Color.darkGray);
    }
    else if (m_borderCommand.equals(EMPTY))
    {
      border = BorderFactory.createEmptyBorder();
    }
    m_borderPanel.setBorder(border);
  }
  
  /////// Private data /////
  private static final String LOWERED_BEVEL = "Lowered bevel";
  private static final String RAISED_BEVEL = "Raised bevel";
  private static final String ETCHED = "Etched";
  private static final String LINE = "Line";
  private static final String MATTE = "Matte";
  private static final String EMPTY = "Empty";
  private String m_borderCommand = EMPTY; // Current border style
  
  private BorderPanel m_borderPanel = new BorderPanel();
  
  /////// Inner classes /////
  class OuterPanel extends JPanel
  {
    public OuterPanel()
    {
      setBackground(Color.pink);
      setLayout( new BorderLayout() );
      add(m_borderPanel, BorderLayout.CENTER);
    }
    
    public Insets getInsets()
    {
      return new Insets(10, 10, 10, 10);
    }
  }
  
  class BorderPanel extends JPanel
  {
  }
  
  class InputPanel extends JPanel 
      implements ActionListener
  {
    public InputPanel()
    {
      setBackground(Color.cyan);
      Border etched = BorderFactory.createEtchedBorder();
      Border titled =
          BorderFactory.createTitledBorder(
                                etched, "Choose Border:");
      setBorder(titled);
      
      addRadioButton(LOWERED_BEVEL);
      addRadioButton(RAISED_BEVEL);
      addRadioButton(ETCHED);
      addRadioButton(LINE);
      addRadioButton(MATTE);
      addRadioButton(EMPTY).setSelected(true);
    }
    
    public void actionPerformed(ActionEvent ev)
    {
      m_borderCommand = m_group.getSelection().getActionCommand();
      setPanelBorder();
    }
    
    private JRadioButton addRadioButton(String command)
    {
      JRadioButton button = new JRadioButton(command);
      button.setOpaque(false);
      add(button);
      m_group.add(button);
      button.addActionListener(this);
      button.setActionCommand(command);
      return button;
    }
    
    ///////// Private data ////////
    private ButtonGroup m_group = new ButtonGroup();
  }
}

class BordersFrame extends JFrame
{
  public BordersFrame()
  {
    setTitle("Borders");
    setSize(500, 150);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    Container contentPane = getContentPane();
    contentPane.add( new BordersPanel() );
  }
}

public class Borders
{
  public static void main(String[] args)
  {
    BordersFrame frame = new BordersFrame();
    frame.setVisible(true);
  }
}

which produces:

Points to Note:

  • I used Insets to produce a margin in the upper pane, so that the results could more easily be seen.
  • I applied setOpaque(false) to each of the radio buttons.  If I had not done so, the results would have looked like this:

Not nice!

 

This page was last modified on 02 October, 2007