法的参数是imageButton.jpg,这个路径是相对于Test类文件的,所以可将图片文件与类文件放在同一个文件夹下。
四、常用布局管理器
? 概述
Swing提供的常用布局管理器包括边界布局管理器、流式布局管理器、网格布局管理器。 ? 绝对布局 顾名思义,就是硬性指定组件在容器中的位置和大小,可以使用绝对坐标的方式指定组件的位置。
使用绝对布局的步骤如下:
(1)使用Container.setLayout(null)方法取消布局管理器;
(2)使用Component.setBounds()方法设置每个组件的位置和大小; ? 例子
import java.awt.*; import javax.swing.*;
public class Test extends JFrame{ /*声明组件*/
private JButton an1;
public Test(String title) {
Container c=getContentPane(); c.setLayout(null); /*创建组件*/
an1=new JButton(\确定\);
an1.setSize(80,40); //设置按钮的大小,如果没有此语句,按钮将无法显示,因为它的大小为0; /*添加组件*/ c.add(an1);
/*设置窗体属性*/ setTitle(title); setSize(200,150); Dimension
screensize=Toolkit.getDefaultToolkit().getScreenSize();
setLocation((screensize.width-this.getWidth())/2,(screensize.height-this.getHeight())/2); setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); }
public static void main(String[] args){ new Test(\绝对布局\); } }
运行结果如下:
? 边界布局管理器(BorderLayout) 在默认不指定窗体布局的情况下,Swing组件的布局模式是边界布局管理器。边界布局管理器还可以将容器划分为东、西、南、北、中5个区域,可以将组件加入到这5个区域中。容器调用Container类的add()方法添加组件时可以设置此组件在边界布局管理器中的区域,区域的控制可以由BorderLayout类中的成员变量来决定。 ? 格式
Container c=this.getContentPane(); c.setLayout(new BorderLayout());
c.add(new JButton(“确定”), BorderLayout.EAST); //将确定按钮添加到容器的底部并填充 c.add(new JButton(“取消”)); //将取消按钮添加到容器的中部并填充至个区域的边界 注意:如果不是五个按钮全部添加,则会以扩充中部为主进行填充,但中部不会被其他四个填充。
? 流式布局管理器(FlowLayout) 流式布局管理器是布局管理器中最基本的布局管理器。流式布局管理器在整个容器中的布局正如其名,像“流”一样从左到右摆放组件,直到占据了这一行的所有空间,然后再向下移动一行。默认情况下,组件在每一行上都是居中排列的,但是通过设置也可以更改组件在每一行上的排列位置。 ? 格式
Container c=this.getContentPane(); c.setLayout(new FlowLayout(2,10,10)); //设置容器的布局管理器为流式布局管理器,采用右对齐方式摆放各组件;
? 网格布局管理器(GridLayout) 网格布局管理器将容器划分为网格,所以组件可以按行和列进行排列。在网格布局管理器中,每一个组件的大小都相同,并且网格中空格的个数由网格的行数和列数决定,如一个两行两列的网格能产生4个大小相等的网格。组件从网格的左上角开始,按照从左到右、从上到下的顺序加入到网格中,而且每一个组件都会填满整个网格,改变窗体的大小,组件的大小也会随之改变。 ? 格式
Container c=this.getContentPane(); c.setLayout(new GridLayout(3,3,5,5)); // 设置容器的管理器为7行3列宽为5像素高为5像素的网格布局管理器;
拓展
? 创建基本窗体的步骤: 1、导入swt和swing包; 2、继承Jframe类; 3、在类中定义组件;
4、在构造方法中创建组件; 5、在构造方法中添加组件; 6、设置窗体属性; 7、显示窗体;
8、在主函数中创建对象;
9、所有布局管理器都可以添加任意组件;
五、高级布局管理器
Swing还提供了一些高级布局管理器,如箱式布局管理器、卡片布局管理器、网格组布局管理器以及弹簧布局管理器,通过使用这些布局管理器,可以设计出更好、更适用的程序界面。在讲解过程中为了便于读者理解,结合了大量的图例,还针对每个知识点进行了举例。 箱式布局管理器BoxLayout 箱式布局管理器用来管理一组水平或垂直排列的组件。如果是用来管理一组水平排列的组件,则称为水平箱;如果是用来管理一组垂直排列的组件,则称为垂直箱。 BoxLayout类仅提供了一个构造方法BoxLayout(Container target,int axis),其入口参数target为要采用该布局方式的容器对象;入口参数axis为要采用的布局方式,如果将其设置为静态常量X_AXIS,表示创建一个水平箱,组件将从左到右排列,设置为静态常量Y_AXIS则表示创建一个垂直箱,组件将从上到下排列。无论水平箱还是垂直箱,当将窗体调小至不能显示所有组件时,组件仍会排列在一行或一列,组件按照添加到容器中的先后顺序进行排列。 默认情况下,由箱式布局管理器实现的组件之间没有间距,如果要在组件之间设置间距,可以通过使用Box类提供的6个不可见组件实现,这些组件就是专门用来设置箱式布局管理器的。
六、常用面板
面板也是一个Swing容器,它可以作为容器容纳其他组件,但它也必须被添加到其他容器中。Swing中常用的面板包括JPanel面板以及JScrollPane面板。
JPanel面板默认使用流式布局管理器,窗体默认使用边界布局管理器。 ? 例子
import java.awt.*; import javax.swing.*;
public class Test extends JFrame{ /*定义组件*/
private JPanel mb1,mb2;
private JButton an1,an2,an3,an4,an5; public static void main(String[] args){ new Test(); //创建本类对象 }
public Test() {
Container c=this.getContentPane(); /*创建组件*/
mb1=new JPanel(); mb2=new JPanel();
an1=new JButton(\苹果\); an2=new JButton(\香蕉\); an3=new JButton(\水果\);
an4=new JButton(\白菜\); an5=new JButton(\萝卜\); /*将组件添加到窗体中*/
mb1.add(an1); mb1.add(an2); mb2.add(an4); mb2.add(an5); c.add(mb1,BorderLayout.NORTH); c.add(an3);
c.add(mb2,BorderLayout.SOUTH); /*设置窗体属性*/
this.setTitle(\布局综合应用\); this.setSize(300,200); Dimension
screenSize=Toolkit.getDefaultToolkit().getScreenSize();
this.setLocation((screenSize.width-this.getWidth())/2,(screenSize.height-this.getHeight())/2); this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /*设置窗体可见性*/
this.setVisible(true); } }
运行结果如下: