/*
* 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> Bill Pauley<br> Cris St. Aubyn<br> Ben Wronsky<br> Nathan Walrath<br> 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();
}
});
}
}
|