Mega Code Archive

 
Categories / Java Tutorial / Swing
 

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();       }     });   } }