import java.awt.*;
import java.awt.event.*;
import javax.swing.BorderFactory;
import javax.swing.border.Border;
import javax.swing.border.TitledBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.ImageIcon;
import javax.swing.JTabbedPane;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.Box;
import javax.swing.BoxLayout;
/*
* 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: dashed borders
JPanel dashedBorders = new JPanel();
dashedBorders.setBorder(paneEdge);
dashedBorders.setLayout(new BoxLayout(dashedBorders,
BoxLayout.Y_AXIS));
Border border = BorderFactory.createDashedBorder(Color.CYAN, 5, 1, 1, true );
addCompForBorder(border,
"dashed border (Color.CYAN, 5, 1, 1, true)",
dashedBorders);
border = BorderFactory.createDashedBorder(Color.BLUE, (float)2.0, (float)4);
addCompForBorder(border,
"dashed border (Color.BLUE, 2, 1.5)",
dashedBorders);
//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("Dashed", null, dashedBorders, null);
tabbedPane.addTab("Titled", null, titledBorders, null);
tabbedPane.addTab("Compound", null, compoundBorders, null);
tabbedPane.setSelectedIndex(0);
String toolTip = new String("Blue Wavy Line border art crew:
Bill Pauley
Cris St. Aubyn
Ben Wronsky
Nathan Walrath
Tommy Adams, special consultant");
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();
}
});
}
}