1、Swing是GUI(图形用户界面)开发工具包,其包括容器、组件和布局等,继承AWT。与用户交互时涉及事件的概念。
JFrame框架窗体是一个容器,是Swing程序中各个组件的载体, JFrame jf = new JFrame();//创建
在开发中更常用的方式是通过继承java.swing.JFrame类创建一个窗体。
在JFrame对象创建完成后,需要调用getContentPane()方法将窗体转换为容器,然后在容器中添加组件或设置布局管理器,通常这个容器用来包含和显示组件。如果需要将组件添加至容器,可以使用来自Container类的add()方法进行设置。至于JPanel容器会在后面提到。
import java.awt.Color;
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
public class testJFrame {
/**
* @param ycy
*/
public static void main(String[] args) {
JFrame jf = new JFrame();//创建
Container cc= jf.getContentPane();//返回窗体ContentPane对象
cc.setBackground(Color.red);//设置组件的颜色
//jf.getContentPane().setBackground(Color.red);//设置组件的颜色
jf.setSize(500, 200);//设置大小
jf.setLocation(300, 200);//设置位置
jf.setTitle("中国好!");//设置标题
JLabel jl = new JLabel("我爱中国!");// 创建一个JLabel标签
jl.setHorizontalAlignment(SwingConstants.CENTER);// 使标签文字居中
cc.add(jl); // 将标签添加至容器
jf.setVisible(true);//设置显示
}
}
常用的窗体关闭方式有四种,分别为“DO_NOTHING_ON_CLOSE”、“DISPOSE_ON_CLOSE”、“HIDE_ON_CLOSE”、“EXIT_ON_CLOSE”。第一种表示什么也不做就将窗体关闭;第二种表示任何注册监听程序对象后会自动隐藏并释放窗体;第三种表示隐藏窗口的默认窗口关闭;第四种表示退出应用程序默认窗口关闭。
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
按钮组件
public class testJButton {
/**
* @param ycy
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame jf = new JFrame();//创建
JButton jb = new JButton("确认");
jf.add(jb);
jf.setSize(500, 200);//设置大小
jf.setLocation(300, 200);//设置位置
jf.setTitle("中国好!");//设置标题
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//退出应用程序默认窗口关闭
jf.setVisible(true);//设置显示
}
}
该布局称为流式布局管理器,是从左到右,中间放置,一行放不下就换到另外一行。一行能放置多少组件取决于窗口的宽度。默认组件是居中对齐,可以通过FlowLayout(intalign)函数来指定对齐方式,默认情况下是居中(FlowLayout.CENTER)。FlowLayout为小应用程序(Applet)和面板(Panel)的默认布局管理器。其构造函数示例为:
FlowLayout() //生成一个默认的流式布局,组件在容器里居中,每个组件之间留下5个像素的距离。
FlowLayout(int alinment) //可以设定每行组件的对齐方式。
FlowLayout(int alignment , int horz , int vert) //设定对齐方式并设定组件水平和垂直的距离。
当容器的大小发生变化时,用FlowLayout管理的组件会发生变化。其变化规律是:组件的大小不变,但是相对位置会发生变化。
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame jf = new JFrame();//创建
//jf.setLayout(new FlowLayout());//该布局称为流式布局管理器.默认组件是居中对齐,可以通过FlowLayout(intalign)函数来指定对齐方式,默认情况下是居中
jf.setLayout(new FlowLayout(FlowLayout.RIGHT));//右对齐
JButton jb = null;
for(int i=0;i<9;i++){
jb = new JButton("ok"+i);//创建多个按钮
jf.add(jb);
}
jf.setSize(500, 200);//设置大小
jf.setLocation(300, 200);//设置位置
jf.setTitle("中国好!");//设置标题
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//退出应用程序默认窗口关闭
jf.setVisible(true);//设置显示
}
这种布局管理器分为东、南、西、北、中心五个方位。北和南的组件可以在水平方向上拉伸;而东和西的组件可以在垂直方向上拉伸;中心的组件可同时在水平和垂直方向上同时拉伸,从而填充所有剩余空间。在使用BorderLayout的时候,如果容器的大小发生变化,其变化规律为:组件的相对位置不变,大小发生变化。例如容器变高了,则North、South 区域不变,West、Center、East区域变高;如果容器变宽了,West、East区域不变,North、Center、South区域变宽。不一定所有的区域都有组件,如果四周区域(West、East、North、South区域)没有组件,则由Center区域去补充,但是如果 Center区域没有组件,则保持空白。BorderLayout是RootPaneContainer(JInternalFrame、JDialog、JFrame、JWindow)的默认布局管理器。
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame jf = new JFrame();//创建
//jf.setLayout(new FlowLayout());//该布局称为流式布局管理器.默认组件是居中对齐,可以通过FlowLayout(intalign)函数来指定对齐方式,默认情况下是居中
jf.setLayout(new BorderLayout());//右对齐
jf.add(new JButton("东"),BorderLayout.EAST);
jf.add(new JButton("西"),BorderLayout.WEST);
jf.add(new JButton("南"),BorderLayout.SOUTH);
jf.add(new JButton("北"),BorderLayout.NORTH);
jf.add(new JButton("中"),BorderLayout.CENTER);
jf.setSize(500, 200);//设置大小
jf.setLocation(300, 200);//设置位置
jf.setTitle("中国好!");//设置标题
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//退出应用程序默认窗口关闭
jf.setVisible(true);//设置显示
}
给一些间隙,让块之间隔开
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame jf = new JFrame();//创建
//jf.setLayout(new FlowLayout());//该布局称为流式布局管理器.默认组件是居中对齐,可以通过FlowLayout(intalign)函数来指定对齐方式,默认情况下是居中
jf.setLayout(new BorderLayout(4,4));//增加之间的间隙
jf.add(new JButton("东"),BorderLayout.EAST);
jf.add(new JButton("西"),BorderLayout.WEST);
jf.add(new JButton("南"),BorderLayout.SOUTH);
jf.add(new JButton("北"),BorderLayout.NORTH);
jf.add(new JButton("中"),BorderLayout.CENTER);
jf.setSize(500, 200);//设置大小
jf.setLocation(300, 200);//设置位置
jf.setTitle("中国好!");//设置标题
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//退出应用程序默认窗口关闭
jf.setVisible(true);//设置显示
}
以表格的形式进行布局管理的,在使用此布局管理器时必须设置显示的行数和列数
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame jf = new JFrame();//创建
//jf.setLayout(new FlowLayout());//该布局称为流式布局管理器.默认组件是居中对齐,可以通过FlowLayout(intalign)函数来指定对齐方式,默认情况下是居中
jf.setLayout(new GridLayout(4,5,5,5));//GridLayout(行,列,间隔,间隔)
JButton jb = null;
for(int i=0;i<19;i++){
jb = new JButton("JButton"+i);
jf.add(jb);
}
jf.setSize(500, 200);//设置大小
jf.setLocation(300, 200);//设置位置
jf.setTitle("中国好!");//设置标题
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//退出应用程序默认窗口关闭
jf.setVisible(true);//设置显示
}
setBounds(int x, int y, int width, int height)
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame jf = new JFrame();//创建
//jf.setLayout(new FlowLayout());//该布局称为流式布局管理器.默认组件是居中对齐,可以通过FlowLayout(intalign)函数来指定对齐方式,默认情况下是居中
jf.setLayout(null);//
JButton jb1 = new JButton("按钮1");
JButton jb2 = new JButton("按钮2");
jb1.setBounds(20, 50, 80, 100);//绝对布局
jb2.setBounds(100, 150, 100, 100);//绝对布局
jf.add(jb1);
jf.add(jb2);
jf.setSize(500, 200);//设置大小
jf.setLocation(300, 200);//设置位置
jf.setTitle("中国好!");//设置标题
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//退出应用程序默认窗口关闭
jf.setVisible(true);//设置显示
}