swing的边框组件
很多情况下,我们常常喜欢给不同的组件设置边框,从而让界面的层次感更明显,swing中提供了Border对象来代表一个边框Border的继承体系,如下
BorderFactory是Border的工厂类,即BorderFactory可以创建下面的每一个Border类 Border接口有一个抽象类AbstractBorder AbstractBorder抽象类有六个子类TitledBorder、EtchedBorder、CompoundBorder、LineBorder、EmptyBorder、BevelBorder EmptyBorder类有一个子类MatteBorder、BevelBorder类有一个子类SoftBevelBorder
上面的那些Border中,有两个比较特殊的Border:
1、TitledBorder:它的作用并不是直接为其他组件添加边框,而是为已有的边框设置标题,创建该类的对象时,需要传入一个其他的Border对象; 2、ComoundBorder:用来组合其他两个边框,创建该类的对象时,需要传入其他两个Border对象,其中一个作为内边框,另一个作为外边框
如何给组件设置边框,步骤如下:
1、使用BorderFactory或者XxxBorder创建Border的实例对象,即创建边框 2、调用Swing组件的setBorder(Border b)方法为组件设置边框,即把已经创建的边框设置给对应的组件
swing的边框组件__练习
xxxxxxxxxx
package ch30;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
public class a_6_0swing_基本组件_边框演示1 {
JFrame jf = new JFrame("测试边框");
public void init() {
//将Jframe的布局修改为网格GridLayout布局,布局的内部是2行4列
jf.setLayout(new GridLayout(2, 4));
//以四边为参考,是斜向上凸起边框,即左上方高视觉,右下方低视觉,还可分别设置外边和内边的颜色
//创建边框有两种方式,我们这里使用BorderFactor工厂类来创建边框
//BevelBorder共4个参数:凸起RAISED边框|内陷LOWERED边框、外边框颜色、内边框颜色、阴影外边框颜色、阴影内边框颜色
Border bb = BorderFactory.createBevelBorder(BevelBorder.RAISED, Color.RED, Color.GREEN, Color.BLUE, Color.GRAY);
jf.add(getPanelWithBorder(bb, "BevelBorder"));//getPanelWithBorder是我们在最下面封装好的方法,需要两个参数为边框和内容
//创建LineBorder,常见的可加粗边框
//创建边框有两种方式,我们这里使用BorderFactor工厂类来创建边框
//LineBorder共两个参数:边框颜色、边框宽度
Border lb = BorderFactory.createLineBorder(Color.ORANGE, 10);
jf.add(getPanelWithBorder(lb, "LineBorder"));//getPanelWithBorder是我们在最下面封装好的方法,需要两个参数为边框和内容
//创建EmptyBorder,会在组件的四周留白
//创建边框有两种方式,我们这里使用BorderFactor工厂类来创建边框
//EmptyBorder共四个参数:上边距、左边距、底边距、右边距。注意这些边距是相对边框内部的内容而言的
Border eb = BorderFactory.createEmptyBorder(10, 5, 20, 30);
jf.add(getPanelWithBorder(eb, "EmptyBorder"));//getPanelWithBorder是我们在最下面封装好的方法,需要两个参数为边框和内容
//以四边为参考,是正向上凸起边框,即上方高视觉,下方低视觉,还可分别设置外边和内边的颜色
//创建边框有两种方式,我们这里使用BorderFactor工厂类来创建边框
//EtchedBorder共三个参数:凸起RAISED边框|内陷LOWERED边框、高亮颜色、阴影颜色
Border etb = BorderFactory.createEtchedBorder(EtchedBorder.RAISED, Color.RED, Color.GREEN);
jf.add(getPanelWithBorder(etb, "EtchedBorder"));//getPanelWithBorder是我们在最下面封装好的方法,需要两个参数为边框和内容
//创建TitledBorder,为原有的Border添加标题。例如这里是为lb即上面的LineBorder边框设置边框标题
//创建边框有两种方式,我们这里使用构造方法的形式,即使用new XXXXBorder来创建边框
//TitledBorder共六个参数:已有的某个Border、标题、标题的水平位置、标题的竖直位置、该标题的字体大小、该变体的字体颜色
TitledBorder tb = new TitledBorder(lb, "边框标题", TitledBorder.RIGHT, TitledBorder.BOTTOM, new Font("StSong", Font.BOLD, 14), Color.RED);
jf.add(getPanelWithBorder(tb, "TitledBorder"));//getPanelWithBorder是我们在最下面封装好的方法,需要两个参数为边框和内容
//注意,上面那个TitledBorder也可以创建一个未有的Border,比如创建一个LineBorder,然后为这个LineBorder创建标题
//如果不指定标题的水平和竖直位置,就默认在左上角。不指定标题颜色和标题字体大小就默认是黑色和14px
//下面的这个tb跟上面的那个tb是一样的,只使用一个就行,另一个注释掉,不然报错
//TitledBorder tb = new TitledBorder(new LineBorder(Color.GREEN, 10), "测试标题");
//jf.add(getPanelWithBorder(tb, "TitledBorder"));
//直接创建MatteBorder,它是EmptyBorder的子类,EmptyBorder是留白,而MatteBorder可以给留空的区域填充颜色
//创建边框有两种方式,我们这里使用构造方法的形式,即使用new XXXXBorder来创建边框
//MatteBorder共5个参数:上边距、左边距、底边距、右边距、留空区域的颜色
MatteBorder mb = new MatteBorder(20, 5, 10, 30, Color.GREEN);
jf.add(getPanelWithBorder(mb, "MatteBorder"));//getPanelWithBorder是我们在最下面封装好的方法,需要两个参数为边框和内容
//直接创建CompoundBorder,将两个边框组合成新边框,这个新边框是双重边框,其中一个边框是新边框的内边框,另一个边框是新边框的外边框
//注意下面,LineBorder是我们new出来的,tb是上面已经存在的边框。无论是new出来还是已经存在的边框都可以
//下面那个new出来的LineBorder有两个参数:边框颜色、边框宽度
CompoundBorder cb = new CompoundBorder(new LineBorder(Color.RED, 8), tb);//LineBorder,tb是我们的两个边框,cb就是新边框
//上面那行的CompoundBorder需要两个边框作为参数,谁写在前面谁就是新边框cb的外边框,写在后面谁就是内边框
jf.add(getPanelWithBorder(cb, "CompoundBorder"));//getPanelWithBorder是我们在最下面封装好的方法,需要两个参数为边框和内容
//设置窗口的最佳大小,设置窗口可见,设置点击叉号就退出程序
jf.pack();
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//往网格中填充不同的JPanel组件,并且设置边框和内容
//网格中每一个网格就是一个JPanel,这几个JPanel只有边框不一样和内容不一样,其中会有很多重复的代码,我们可以封装成方法,如下
public JPanel getPanelWithBorder(Border border, String content) {//返回值就是JPanel,获取一个带有边框的JPanel,参数是边框、内容
JPanel jPanel = new JPanel();
//给JPanel设置内容,因为我们在每个JPanel里面展示的内容仅仅只有字符串,就可以使用JLabel
jPanel.add(new JLabel(content));
//为panel设置边框
jPanel.setBorder(border);
return jPanel;
}
public static void main(String[] args) {
new a_6_0swing_基本组件_边框演示1().init();
}
}