Border的使用
Border类是应用在描绘组件的边界,Border本身是一个interface,里面定义了3个方法,为getBorderInsets()、isBorderOpaque() 、与isBorderOpaque()、与paintBorder().若您想使用Border类来绘制你的窗口边界,您必须先实现(implements)这3个方法,可说 是有点麻烦。还好,java本身提供了另一个类,它已经实现了Border类所有的方法,且提供许多不同的边界样式供用户使用,用户 只需要选择到底要用哪个样式即可,不需要理会如何去画出这个边界,因为这个类已经都帮您实现好了,这个类就是 BorderFactory,下面是borderFactory的类层次结构图。
BorderFactory的类层次结构图:
java.lang.Object -----------javax.swing.BorderFactory
SimpleBorder.java
import javax.swing.border.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class SimpleBorder{ public static void main(String[] args){ JFrame f=new JFrame("SimpleBorder"); Container content=f.getContentPane(); JButton b=new JButton(); b.setBorder(BorderFactory.createLineBorder(Color.blue,10);//createLineBorder方法指定边界的颜色与宽度. content.add(b); f.setSize(200,150); f.show(); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); } }
BorderFactory提供了以下方法:
static Border creatBevelBorder(int type)建立一个立体的边界,并由参数type指定为凹陷或突起,type可为 BevelBorder.LOWERED表示凹陷,或是BevelBorder.RAISED表示突起。 static Border createBevelBorder(int type,Color highlight,Color shadow)建立一个立体的边界,并指定突边与阴 影的颜色。 static Border createBevelBorder(int type,Color highlightOuter,Color highlightInner,Color shadowOuter ,Color shadowInner)建立一个立体的边界,并指定内外部的突边与阴影的颜色。 static CompoundBorder createCompoundBorder()建立一个复合边界。 static CompoundBorder createCompoundBorder(Border outsideBorder,Border insideBorder)建立一个复合边界,并指定它 的内外边界。 static Border createEmptyBorder()建立一个空的边界。 static Border createEmptyBorder(int top,int left,int bottom,int right)建立一个空的边界,并指定上下左右 的宽度,在这些宽度中不能作绘图的效果。 static Border createEtchedBorder()建立一个四周有凹痕的边界。 static Border createEtchedBorder(Color highlight,Color shadow)建立一个四周有凹痕的边界,并指定突边与阴影 的颜色。 static Border createLineBorder(Color color) 建立一个线务边界,并指定线条的颜色。 static Border createLineBorder(Color color,int thicness) 建立一个线务边界,并指定线条的颜色与宽度。 static Border createLoweredBevelBorder()建立一个具有凹陷效果的边界,意义与 createBevelBorder(BevelBorder.LOWERED)相同。 static MatteBorder createMatteBorder(int top,int left,int bottom,int right,Color color)建立一个垫子边界,这跟 createEmptyBorder有点像,但可以指定边界颜色。 static MatteBorder createMatteBorder(int top,int left,int bottom,int right,Icon tileIcom)建立一个垫子边界,并 指定边界的花纹。 static Border createRaisedBevelBorder()建立一个具有突起效果的边界,意义与createBevelBorder(BevelBorder. RAISED)相同。 static TitledBorder createTitledBorder(Border border)建立一个标题边界,但没有标题名称。 static TitledBorder createTitledBorder(Border border,String title)建立一个标题边界,并指定标题名称,标题默认位 置是TitledBorder.DEFAULT_JUSTIFICATION与TitledBorder.DEFAULT_POSITION,也就是左上方。 static TitledBorder createTitledBorder(Border border,String title,int titleJustification,int titlePosition) 建立一个标题边界,并指定标题名称与标题位置,参数titleJustification可为: TitledBorder.LEFT TitledBorder.CENTER TitledBorder.RIGHT TitledBorder.DEFAULT_JUSTIFICATION(leading) 参数titlePosition可为: TitedBorder.ABOVE_TOP TitledBorder.TOP(sittin on the top line) TitledBorder.BELOW_TOP TitledBorder.ABOVE_BOTTOM TitledBorder.BOTTOM(sitting on the bottom line) TitledBorder.BELOW_BOTTOM TitledBorder.DEFAULT_POSITION(top) static TitledBorder createTitledBorder(Border border,String title,int titleJustification,int titlePosition, Font titleFont)建立一个标题边界,并指定标题名称,标题位置与字体。 static TitledBorder createTitledBorder(Border border,String title,int titleJustification,int titlePosition, Font titleFont,Color titleColor)建立一个标题边界,并指定标题名称,标题位置、字体与标题颜 色。 static TitledBorder createTitledBorder(String title)建立一个标题边界,并指定标题名称,其他为默认值。
BorderDemo.java
import javax.swing.border.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class BorderDemo { public static void main(String[] args) { JFrame f = new JFrame("BorderDemo"); Container content = f.getContentPane(); JLabel label = new JLabel(); // label.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED));//凹陷效果 // label.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));//突起效果 // 凹陷效果,并设置突出与阴影的颜色 // label.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED,Color.red,Color.blue)); // 凹陷效果,并设置内外部突出与阴影的颜色 // label.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED,Color.red,Color.blue,Color.yellow,Color.green)); /* * EmptyBorder:建立一个空的边界,可指定边界的宽度,这在区隔组件之间的距离时可能用到。 * EtchedBorder:建立一个四周有凹痕的边界,也可以指定突边与阴影的颜色. */ // label.setBorder(BorderFactory.createEtchedBorder()); // 设置四周有凹痕的边界,并指定内外部的突边与阴影的颜色 // label.setBorder(BorderFactory.createEtchedBorder(Color.red,Color.blue)); // LineBorder:建立一个线条边界,并可以指定线条的颜色与宽度。 // label.setBorder(BorderFactory.createLineBorder(Color.blue,5)); // MatteBorder:建立一个Matte边界,这个方法与createEmptyBorder()有点像,但可以指定边界颜色 // 或利用Icon产生边界花纹. // label.setBorder(BorderFactory.createMatteBorder(5,5,5,5,Color.green)); // label.setBorder(BorderFactory.createMatteBorder(25,25,25,25,new // ImageIcon(".\\icons\\star.gif"))); /* * CompoundBorder: 建立一个复合边界,并可以指定它的内外边界,例如我们可以指定它的外边界为LineBorder, * 它的内边界为MatteBorder。 */ // label.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(Color.blue,5), // BorderFactory.createMatteBorder(20,20,18,18,new // ImageIcon(".\\icons\\star.gif")))); // TitleBorder:建立一个标题边界,我们可以指定边界的标题名称、标题位置、字体与标题颜色。 // label.setBorder(BorderFactory.createTitledBorder(BorderFactory.createLineBorder(Color.blue,5),"Line Border" // ,TitledBorder.LEFT,TitledBorder.TOP)); label.setBorder(BorderFactory.createTitledBorder(BorderFactory .createLineBorder(Color.blue, 5), "Line Border", TitledBorder.LEFT, TitledBorder.ABOVE_TOP, new Font( "SansSerif", Font.ITA_LIC, 14), Color.red)); content.add(label); f.setSize(200, 150); f.show(); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } }