17.6. BordersAny Swing component can have a decorative border. JComponent includes a method called setBorder( ); all you have to do is call it, passing it an appropriate implementation of the Border interface. Swing provides many useful Border implementations in the javax.swing.border package. You could create an instance of one of these classes and pass it to a component's setBorder( ) method, but there's an even simpler technique. The BorderFactory class creates any kind of border for you using static "factory" methods. Creating and setting a component's border, then, is simple: JLabel labelTwo = new JLabel("I have an etched border."); labelTwo.setBorder(BorderFactory.createEtchedBorder( )); Every component has a setBorder( ) method, from simple labels and buttons right up to the fancy text and table components we cover in Chapter 18. BorderFactory is convenient, but it does not offer every option of every border type. For example, if you want to create a raised EtchedBorder instead of the default lowered border, you'll need to use EtchedBorder's constructor, like this: JLabel labelTwo = new JLabel("I have a raised etched border."); labelTwo.setBorder( new EtchedBorder(EtchedBorder.RAISED) ); The Border implementation classes are listed and briefly described here:
The following example shows off some different border types. It's only a sampler, though; many more border types are available. Furthermore, the example only encloses labels with borders. You can put a border around any component in Swing. The example is shown in Figure 17-6. Figure 17-6. A bevy of bordersHere is the source code: //file: Borders.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.border.*; public class Borders { public static void main(String[] args) { // create a JFrame to hold everything JFrame frame = new JFrame("Borders"); // Create labels with 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)); // add components to the content pane Container c = f.getContentPane( ); // unnecessary in 5.0+ c.setLayout(new GridLayout(3, 2)); c.add(labelOne); c.add(labelTwo); c.add(labelThree); c.add(labelFour); c.add(labelFive); c.add(labelSix); frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); frame.pack( ); frame.setVisible(true); } } |