Java Tutorial/Swing/BorderFactory

Материал из Java эксперт
Версия от 17:44, 31 мая 2010; (обсуждение)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

14. BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.red), BorderFactory.createMatteBorder(-1, -1, -1, -1, icon))

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EtchedBorder;
public class Main extends JFrame {
  public Main() {
    JPanel simplePanel = new JPanel(new GridLayout(7, 1, 5, 5));
    ImageIcon icon = new ImageIcon(Toolkit.getDefaultToolkit().getImage("matte.gif"));
    simplePanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory
        .createLineBorder(Color.red), BorderFactory.createMatteBorder(-1, -1, -1, -1, icon)));
    simplePanel.add(new JLabel("Examples"), JLabel.CENTER);
  
    
    add(simplePanel);
  }
  public static void main(String[] argv) {
    Main borderFactoryDemo = new Main();
    borderFactoryDemo.setVisible(true);
    borderFactoryDemo.pack();
  }
}





14. BorderFactory.createCompoundBorder(BorderFactory.createRaisedBevelBorder(), BorderFactory.createLoweredBevelBorder())

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EtchedBorder;
public class Main extends JFrame {
  public Main() {
    JPanel simplePanel = new JPanel(new GridLayout(7, 1, 5, 5));
    simplePanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory
        .createRaisedBevelBorder(), BorderFactory.createLoweredBevelBorder()));
    simplePanel.add(new JLabel("Examples"), JLabel.CENTER);
  
    
    add(simplePanel);
  }
  public static void main(String[] argv) {
    Main borderFactoryDemo = new Main();
    borderFactoryDemo.setVisible(true);
    borderFactoryDemo.pack();
  }
}





14. BorderFactory.createEmptyBorder

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EtchedBorder;
public class Main extends JFrame {
  public Main() {
    JPanel simplePanel = new JPanel(new GridLayout(7, 1, 5, 5));
    simplePanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
    JLabel simpleLabel = new JLabel("SIMPLE BORDERS", JLabel.CENTER);
    simplePanel.add(simpleLabel);
    add(simplePanel);
  }
  public static void main(String[] argv) {
    Main borderFactoryDemo = new Main();
    borderFactoryDemo.setVisible(true);
    borderFactoryDemo.pack();
  }
}





14. BorderFactory.createEmptyBorder( 10)

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EtchedBorder;
public class Main extends JFrame {
  public Main() {
    JPanel simplePanel = new JPanel(new GridLayout(7, 1, 5, 5));

    simplePanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
    JLabel titleLabel = new JLabel("TITLE BORDERS", JLabel.CENTER);
    titleLabel.setForeground(Color.red.darker());
    
    add(simplePanel);
  }
  public static void main(String[] argv) {
    Main borderFactoryDemo = new Main();
    borderFactoryDemo.setVisible(true);
    borderFactoryDemo.pack();
  }
}





14. BorderFactory.createEtchedBorder: create Etched Border

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EtchedBorder;
public class Main extends JFrame {
  public Main() {
    JPanel simplePanel = new JPanel(new GridLayout(1, 1, 5, 5));
    JLabel etchedRasBorderLabel = new JLabel("Raised Etched Border", JLabel.CENTER);
    etchedRasBorderLabel.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
    simplePanel.add(etchedRasBorderLabel);
    
    add(simplePanel);
  }
  public static void main(String[] argv) {
    Main borderFactoryDemo = new Main();
    borderFactoryDemo.setVisible(true);
    borderFactoryDemo.pack();
  }
}





14. BorderFactory.createEtchedBorder: LOWERED EtchedBorder

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EtchedBorder;
public class Main extends JFrame {
  public Main() {
    JPanel simplePanel = new JPanel(new GridLayout(7, 1, 5, 5));
    JLabel etchedLowBorderLabel = new JLabel("Lowered Etched Border", JLabel.CENTER);
    etchedLowBorderLabel.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED));
    simplePanel.add(etchedLowBorderLabel);
    
    add(simplePanel);
  }
  public static void main(String[] argv) {
    Main borderFactoryDemo = new Main();
    borderFactoryDemo.setVisible(true);
    borderFactoryDemo.pack();
  }
}





14. BorderFactory.createLineBorder: create line border

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EtchedBorder;
public class Main extends JFrame {
  public Main() {
    JPanel simplePanel = new JPanel(new GridLayout(7, 1, 5, 5));
    JLabel lineBorderLabel = new JLabel("Line Border", JLabel.CENTER);
    lineBorderLabel.setBorder(BorderFactory.createLineBorder(Color.black));
    simplePanel.add(lineBorderLabel);
    
    add(simplePanel);
  }
  public static void main(String[] argv) {
    Main borderFactoryDemo = new Main();
    borderFactoryDemo.setVisible(true);
    borderFactoryDemo.pack();
  }
}





14. BorderFactory.createLoweredBevelBorder

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EtchedBorder;
public class Main extends JFrame {
  public Main() {
    JPanel simplePanel = new JPanel(new GridLayout(7, 1, 5, 5));
    JLabel bevelLowBorderLabel = new JLabel("Lowered Bevel Border", JLabel.CENTER);
    bevelLowBorderLabel.setBorder(BorderFactory.createLoweredBevelBorder());
    simplePanel.add(bevelLowBorderLabel);
    
    add(simplePanel);
  }
  public static void main(String[] argv) {
    Main borderFactoryDemo = new Main();
    borderFactoryDemo.setVisible(true);
    borderFactoryDemo.pack();
  }
}





14. BorderFactory.createMatteBorder( 5, Color.BLUE)

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EtchedBorder;
public class Main extends JFrame {
  public Main() {
    JPanel simplePanel = new JPanel(new GridLayout(7, 1, 5, 5));
    simplePanel.setBorder(BorderFactory.createMatteBorder(2, 5, 2, 5, Color.BLUE));
    simplePanel.add(new JLabel("Examples"), JLabel.CENTER);
  
    
    add(simplePanel);
  }
  public static void main(String[] argv) {
    Main borderFactoryDemo = new Main();
    borderFactoryDemo.setVisible(true);
    borderFactoryDemo.pack();
  }
}





14. BorderFactory.createRaisedBevelBorder

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EtchedBorder;
public class Main extends JFrame {
  public Main() {
    JPanel simplePanel = new JPanel(new GridLayout(7, 1, 5, 5));
    JLabel bevelRasBorderLabel = new JLabel("Raised Bevel Border", JLabel.CENTER);
    bevelRasBorderLabel.setBorder(BorderFactory.createRaisedBevelBorder());
    simplePanel.add(bevelRasBorderLabel);
    
    add(simplePanel);
  }
  public static void main(String[] argv) {
    Main borderFactoryDemo = new Main();
    borderFactoryDemo.setVisible(true);
    borderFactoryDemo.pack();
  }
}





14. BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "Title Lowered Etched Border")

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EtchedBorder;
public class Main extends JFrame {
  public Main() {
    JPanel simplePanel = new JPanel(new GridLayout(7, 1, 5, 5));
    simplePanel.setBorder(BorderFactory.createTitledBorder(BorderFactory
        .createEtchedBorder(EtchedBorder.LOWERED), "Title Lowered Etched Border"));
    simplePanel.add(new JLabel("Examples"), JLabel.CENTER);
  
    
    add(simplePanel);
  }
  public static void main(String[] argv) {
    Main borderFactoryDemo = new Main();
    borderFactoryDemo.setVisible(true);
    borderFactoryDemo.pack();
  }
}





14. BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.BLUE), "Title Line Border with color")

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EtchedBorder;
public class Main extends JFrame {
  public Main() {
    JPanel simplePanel = new JPanel(new GridLayout(7, 1, 5, 5));
    simplePanel.setBorder(BorderFactory.createTitledBorder(BorderFactory
        .createLineBorder(Color.BLUE), "Title Line Border with color"));
    simplePanel.add(new JLabel("Examples"), JLabel.CENTER);
  
    
    add(simplePanel);
  }
  public static void main(String[] argv) {
    Main borderFactoryDemo = new Main();
    borderFactoryDemo.setVisible(true);
    borderFactoryDemo.pack();
  }
}





14. BorderFactory.createTitledBorder("Title Border")

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EtchedBorder;
public class Main extends JFrame {
  public Main() {
    JPanel simplePanel = new JPanel(new GridLayout(7, 1, 5, 5));
    simplePanel.setBorder(BorderFactory.createTitledBorder("Title Border"));
    simplePanel.add(new JLabel("Examples"), JLabel.CENTER);
  
    
    add(simplePanel);
  }
  public static void main(String[] argv) {
    Main borderFactoryDemo = new Main();
    borderFactoryDemo.setVisible(true);
    borderFactoryDemo.pack();
  }
}





14. BorderFactory in action

import java.awt.Color;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.border.BevelBorder;
import javax.swing.border.Border;
import javax.swing.border.TitledBorder;
public class Borders {
  public static void main(String[] args) {
    JFrame frame = new JFrame("Borders");
    int center = SwingConstants.CENTER;
    JLabel labelOne = new JLabel("raised BevelBorder", center);
    labelOne.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
    JLabel labelTwo = new JLabel("EtchedBorder", center);
    labelTwo.setBorder(BorderFactory.createEtchedBorder());
    JLabel labelThree = new JLabel("MatteBorder", center);
    labelThree.setBorder(BorderFactory.createMatteBorder(10, 10, 10, 10, Color.pink));
    JLabel labelFour = new JLabel("TitledBorder", center);
    Border etch = BorderFactory.createEtchedBorder();
    labelFour.setBorder(BorderFactory.createTitledBorder(etch, "Title"));
    JLabel labelFive = new JLabel("TitledBorder", center);
    Border low = BorderFactory.createLoweredBevelBorder();
    labelFive.setBorder(BorderFactory.createTitledBorder(low, "Title", TitledBorder.RIGHT,
        TitledBorder.BOTTOM));
    JLabel labelSix = new JLabel("CompoundBorder", center);
    Border one = BorderFactory.createEtchedBorder();
    Border two = BorderFactory.createMatteBorder(4, 4, 4, 4, Color.blue);
    labelSix.setBorder(BorderFactory.createCompoundBorder(one, two));
    frame.setLayout(new GridLayout(3, 2));
    frame.add(labelOne);
    frame.add(labelTwo);
    frame.add(labelThree);
    frame.add(labelFour);
    frame.add(labelFive);
    frame.add(labelSix);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.pack();
    frame.setVisible(true);
  }
}





14. Introducing BorderFactory

BorderFactory class offers a series of static methods for creating predefined borders.



public class BorderFactory {
  public static Border createBevelBorder(int type);
  public static Border createBevelBorder(int type, Color highlight, Color shadow);
  public static Border createBevelBorder(int type, Color highlightOuter, Color highlightInner, Color shadowOuter, Color shadowInner);
  public static CompoundBorder createCompoundBorder();
  public static CompoundBorder createCompoundBorder(Border outside, Border inside);
  public static Border createEmptyBorder();
  public static Border createEmptyBorder(int top, int left, int bottom, int right);
  public static Border createEtchedBorder();
  public static Border createEtchedBorder(Color highlight, Color shadow);
  public static Border createEtchedBorder(int type);
  public static Border createEtchedBorder(int type, Color highlight, Color shadow);
  public static Border createLineBorder(Color color);
  public static Border createLineBorder(Color color, int thickness);
  public static Border createLoweredBevelBorder();
  public static MatteBorder createMatteBorder(int top, int left, int bottom, int right, Color color);
  public static MatteBorder createMatteBorder(int top, int left, int bottom, int right, Icon icon);
  public static Border createRaisedBevelBorder();
  public static TitledBorder createTitledBorder(Border border);
  public static TitledBorder createTitledBorder(Border border, String title);
  public static TitledBorder createTitledBorder(Border border, String title, int justification, int position);
  public static TitledBorder createTitledBorder(Border border, String title, int justification, int position, Font font);
  public static TitledBorder createTitledBorder(Border border, String title, int justification, int position, Font font, Color color);
  public static TitledBorder createTitledBorder(String title);
}





14. Use BorderFactory to create borders

/*
 * Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *   - Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *
 *   - Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *
 *   - Neither the name of Sun Microsystems nor the names of its
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.border.Border;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
/*
 * BorderDemo.java requires the following file: images/wavy.gif
 */
public class BorderDemo extends JPanel {
  public BorderDemo() {
    super(new GridLayout(1, 0));
    // Keep references to the next few borders,
    // for use in titles and compound borders.
    Border blackline, raisedetched, loweredetched, raisedbevel, loweredbevel, empty;
    // A border that puts 10 extra pixels at the sides and
    // bottom of each pane.
    Border paneEdge = BorderFactory.createEmptyBorder(0, 10, 10, 10);
    blackline = BorderFactory.createLineBorder(Color.black);
    raisedetched = BorderFactory.createEtchedBorder(EtchedBorder.RAISED);
    loweredetched = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED);
    raisedbevel = BorderFactory.createRaisedBevelBorder();
    loweredbevel = BorderFactory.createLoweredBevelBorder();
    empty = BorderFactory.createEmptyBorder();
    // First pane: simple borders
    JPanel simpleBorders = new JPanel();
    simpleBorders.setBorder(paneEdge);
    simpleBorders.setLayout(new BoxLayout(simpleBorders, BoxLayout.Y_AXIS));
    addCompForBorder(blackline, "line border", simpleBorders);
    addCompForBorder(raisedetched, "raised etched border", simpleBorders);
    addCompForBorder(loweredetched, "lowered etched border", simpleBorders);
    addCompForBorder(raisedbevel, "raised bevel border", simpleBorders);
    addCompForBorder(loweredbevel, "lowered bevel border", simpleBorders);
    addCompForBorder(empty, "empty border", simpleBorders);
    // Second pane: matte borders
    JPanel matteBorders = new JPanel();
    matteBorders.setBorder(paneEdge);
    matteBorders.setLayout(new BoxLayout(matteBorders, BoxLayout.Y_AXIS));
    ImageIcon icon = createImageIcon("images/wavy.gif", "wavy-line border icon"); // 20x22
    Border border = BorderFactory.createMatteBorder(-1, -1, -1, -1, icon);
    if (icon != null) {
      addCompForBorder(border, "matte border (-1,-1,-1,-1,icon)", matteBorders);
    } else {
      addCompForBorder(border, "matte border (-1,-1,-1,-1,<null-icon>)",
          matteBorders);
    }
    border = BorderFactory.createMatteBorder(1, 5, 1, 1, Color.red);
    addCompForBorder(border, "matte border (1,5,1,1,Color.red)", matteBorders);
    border = BorderFactory.createMatteBorder(0, 20, 0, 0, icon);
    if (icon != null) {
      addCompForBorder(border, "matte border (0,20,0,0,icon)", matteBorders);
    } else {
      addCompForBorder(border, "matte border (0,20,0,0,<null-icon>)",
          matteBorders);
    }
    // Third pane: titled borders
    JPanel titledBorders = new JPanel();
    titledBorders.setBorder(paneEdge);
    titledBorders.setLayout(new BoxLayout(titledBorders, BoxLayout.Y_AXIS));
    TitledBorder titled;
    titled = BorderFactory.createTitledBorder("title");
    addCompForBorder(titled, "default titled border"
        + " (default just., default pos.)", titledBorders);
    titled = BorderFactory.createTitledBorder(blackline, "title");
    addCompForTitledBorder(titled, "titled line border"
        + " (centered, default pos.)", TitledBorder.CENTER,
        TitledBorder.DEFAULT_POSITION, titledBorders);
    titled = BorderFactory.createTitledBorder(loweredetched, "title");
    addCompForTitledBorder(titled, "titled lowered etched border"
        + " (right just., default pos.)", TitledBorder.RIGHT,
        TitledBorder.DEFAULT_POSITION, titledBorders);
    titled = BorderFactory.createTitledBorder(loweredbevel, "title");
    addCompForTitledBorder(titled, "titled lowered bevel border"
        + " (default just., above top)", TitledBorder.DEFAULT_JUSTIFICATION,
        TitledBorder.ABOVE_TOP, titledBorders);
    titled = BorderFactory.createTitledBorder(empty, "title");
    addCompForTitledBorder(titled, "titled empty border"
        + " (default just., bottom)", TitledBorder.DEFAULT_JUSTIFICATION,
        TitledBorder.BOTTOM, titledBorders);
    // Fourth pane: compound borders
    JPanel compoundBorders = new JPanel();
    compoundBorders.setBorder(paneEdge);
    compoundBorders.setLayout(new BoxLayout(compoundBorders, BoxLayout.Y_AXIS));
    Border redline = BorderFactory.createLineBorder(Color.red);
    Border compound;
    compound = BorderFactory.createCompoundBorder(raisedbevel, loweredbevel);
    addCompForBorder(compound, "compound border (two bevels)", compoundBorders);
    compound = BorderFactory.createCompoundBorder(redline, compound);
    addCompForBorder(compound, "compound border (add a red outline)",
        compoundBorders);
    titled = BorderFactory.createTitledBorder(compound, "title",
        TitledBorder.CENTER, TitledBorder.BELOW_BOTTOM);
    addCompForBorder(titled, "titled compound border"
        + " (centered, below bottom)", compoundBorders);
    JTabbedPane tabbedPane = new JTabbedPane();
    tabbedPane.addTab("Simple", null, simpleBorders, null);
    tabbedPane.addTab("Matte", null, matteBorders, null);
    tabbedPane.addTab("Titled", null, titledBorders, null);
    tabbedPane.addTab("Compound", null, compoundBorders, null);
    tabbedPane.setSelectedIndex(0);
    String toolTip = new String(
        "<html>Blue Wavy Line border art crew:<br>&nbsp;&nbsp;&nbsp;Bill Pauley<br>&nbsp;&nbsp;&nbsp;Cris St. Aubyn<br>&nbsp;&nbsp;&nbsp;Ben Wronsky<br>&nbsp;&nbsp;&nbsp;Nathan Walrath<br>&nbsp;&nbsp;&nbsp;Tommy Adams, special consultant</html>");
    tabbedPane.setToolTipTextAt(1, toolTip);
    add(tabbedPane);
  }
  void addCompForTitledBorder(TitledBorder border, String description,
      int justification, int position, Container container) {
    border.setTitleJustification(justification);
    border.setTitlePosition(position);
    addCompForBorder(border, description, container);
  }
  void addCompForBorder(Border border, String description, Container container) {
    JPanel comp = new JPanel(new GridLayout(1, 1), false);
    JLabel label = new JLabel(description, JLabel.CENTER);
    comp.add(label);
    comp.setBorder(border);
    container.add(Box.createRigidArea(new Dimension(0, 10)));
    container.add(comp);
  }
  /** Returns an ImageIcon, or null if the path was invalid. */
  protected static ImageIcon createImageIcon(String path, String description) {
    java.net.URL imgURL = BorderDemo.class.getResource(path);
    if (imgURL != null) {
      return new ImageIcon(imgURL, description);
    } else {
      System.err.println("Couldn"t find file: " + path);
      return null;
    }
  }
  /**
   * Create the GUI and show it. For thread safety, this method should be
   * invoked from the event-dispatching thread.
   */
  private static void createAndShowGUI() {
    // Create and set up the window.
    JFrame frame = new JFrame("BorderDemo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    // Create and set up the content pane.
    BorderDemo newContentPane = new BorderDemo();
    newContentPane.setOpaque(true); // content panes must be opaque
    frame.setContentPane(newContentPane);
    // Display the window.
    frame.pack();
    frame.setVisible(true);
  }
  public static void main(String[] args) {
    // Schedule a job for the event-dispatching thread:
    // creating and showing this application"s GUI.
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        createAndShowGUI();
      }
    });
  }
}