l Swing特点
l 1.Swing组件通常别称为“轻量级组件”,因为它完全有Java编写,而Java是不依赖于操作系统的语言,它可以在任何平台上运行;依赖于本地平台的组件被称为“重量级组件”,如Awt组件就依赖于本地平台的窗口系统来决定窗口系统来决定组件的功能、外观和风格。2.可插入外观组件。
l Swing包
l Swing组件大多数GUI组件都是Component类的直接子类或间接子类,JComponrnt类是Swing组件各种特性的存放位置,这些组件的特性包括设定组建边界,GUI组件自动滚动等
在Swing组件中最重要的父类是Container类,而Container类有两个最重要的子类,分别为java.awt.Window与java.awt.Frame,除了以往的AWT类组件会继承这两个类外,现在的Swing组件也扩展了这两个类
l 常见Swing组件
l 组件名称
l 组件名称 | l 定义 |
l JButton | l 代表Swing按钮,按钮可以带一些文字或图片 |
l JCheckBox | l 代表Swing中的一些复选框组件 |
l JComBox | l 代表下拉列表框,可以在下拉显示区域显示多个选项 |
l JFrame | l 代表Swing的框架类 |
l JDialog | l 代表Swing版本的对话框 |
l JLabel | l 代表Swing中的标签组件 |
l JRadioButton | l 代表Swing的单选按钮 |
l JList | l 代表能在用户界面显示一系列条目的组件 |
l JTextFied | l 代表文本框 |
l JPassWordField | l 代表密码框 |
l JTextArea | l 代表Swing中的文本区域 |
l JOptionPane | l 代表Swing中的一些对话框 |
l 常用窗体
l 窗体作为Swing应用程序中组建的承载体,处于非常重要的位置。常用的窗体包括:JFrame和JDialog.
l JFrame窗体是一个容器,它是Swing程序中各个组建的载体,可以将JFrame看作是承载这些Swing组件的容器。在开发应用程序时都可以继承java.swing.JFrame类创建一个窗体,在这个窗体中添加组件,同时为组件设置事件。由于该窗口继承了JFrame类,所以它拥有“最大化”,“最小化”,和“关闭”按钮。
l JFrame在程序中的语法格式如下:
l JFrame jf = new JFrame();
l Container comtainer = jf.getContentPane();
参数含义:
Jf:JFrame类的对象
Container:container类的对象,可以使用JFrame对象调用getContentPane()方法获取。
Example:
public class Examplel extends JFrame {//定义一个类继承JFrame类
public void CreateJFrame(String title){//定义一个CreateJFrame()方法
JFrame jFrame = new JFrame(title);//实例化一个JFrame对象
Container container = jFrame.getContentPane();//获取一个容器
JLabel jLabel = new JLabel("这是一个JFrame窗体");//创建一个JLabel标签
//是标签的文字居中
jLabel.setHorizontalAlignment(SwingConstants.CENTER);
container.add(jLabel);//将标签添加到容器里
container.setBackground(Color.white);//设置容器的背景颜色
jFrame.setVisible(true);//使窗体可现
jFrame.setSize(200,150);//设置窗体大小
//设置窗体关闭方式
jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[]args){//在主方法调用CreatJFrame()方法
new Examplel().CreateJFrame("创建一个JFrame窗体");
}
}
结果:
窗体的关闭形式常用的有四种:
①DO_NOTHING_ON_CLOSE
②DISPOSE_ON_CLOSE
③HIDE_ON_CLOSE
④EXIT_ON_CLOSE
这几种操作实质上将一个int类型的常量封装在javax.swing.WindowConstants接口中。
第一种窗体退出方式代表什么都不做就将窗体关闭;第二种退出方式则代表任何注册监听程序对象后会自动关闭并释放窗体;第三种方式表示隐匿窗口的默认窗口关闭;第四种退出方式表示退出应用程序默认窗口关闭。
JDialog窗体
JDialog窗体是Swing组建中的对话框,它继承了AWT组件中java.awt.Dialog类。
DJialog窗体的功能是从一个窗体中弹出另一个窗体,就像是在使用IE浏览器时弹出的确定对话框一样。JDialog窗体实质上就是另一种类型的窗体,它是与JFrame窗体类似,在使用时需要调用getContentPane()方法将窗体转换为容器,然后在容器中设置窗体的特性。
在应用程序中创建JDialog窗体需要实例化JDialog类,通常使用一下JDialog类的构造方法
(1)public JDialog();创建一个没有标题和父类窗的对话框。
(2)Public JDialog();创建一个指定父类窗的对话框,但窗体没有标题
(3)Public JDialog(Frame f,boolean model):创建一个指定类型的对话框,并指定父窗体,但该窗体没有指定标题
(4)Public JDialog(Frame f,String title);创建一个指定标题和父类窗的对话框。
(5)Public JDialog(Frame f,String title,boolean model);创建一个指定标题、窗体和模式的对话框
案例:
public class MyDialog extends JDialog {//创建新类继承JDialog
public MyDialog(Frame frame){
//实例化一个Dialog类对象,指定对话框的父窗体,窗体标题和类型
super(frame,"第一个JDialog窗体",true);
Container container =getContentPane();//创建一个容器
container.add(new Label("这是一个对话框"));//在容器中添加标签
setBounds(120,120,100,100);//设置对话框窗体大小
}
}
public class MyFrame extends JFrame {//创建新类
public static void main(String[]args){//实例化MyDialog类对象
new MyFrame();
}
public MyFrame(){
Container container =getContentPane();//创建一个容器
container.setLayout(null);
JLabel jLabel = new JLabel("这是一个JFrame窗体");//在窗体中设置标签
//将标签中的文字至于标签中间的位置
jLabel.setHorizontalAlignment(SwingConstants.CENTER);
container.add(jLabel);
JButton jButton = new JButton("弹出对话框");//定义一个按钮
jButton.setBounds(10,10,100,21);//设置按钮大小
jButton.setBackground(Color.white);
jButton.addActionListener(new AbstractAction() {//为按钮添加鼠标点击事件
@Override
public void actionPerformed(ActionEvent e) {
//使MyJDialog窗体可见
new MyDialog(MyFrame.this).setVisible(true);
}
});
container.add(jButton);//将按钮添加到容器里
container.setBackground(Color.white);
setSize(200,200);
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
setVisible(true);
}
}
结果:
便签组件和图表
便签的使用:
标签由JLabel类定义,它的父类是JCompopent类
标签可以显示一行只读文本、一个图像或带图像的文本,它并不能产生任何类型的事件,只是简单地显示文本和图片,但是可以使用标签的特性指定标签生文本的对齐方式。
JLabel类提供了多种构造方法,可以创建多种标签,如显示只有文本的标签、只有图标的标签或包含文本与图标的标签。JLabel类常见的几种构造方法如下:
Public JLabe();创建一个不带图标和文本的JLabel对象
Public JLabel(Icon icon);创建一个带图标的JLabel对象
Public JLabel(Icon icon,int aligment);创建一个带图标的JLabel对象,并设置图标水平对齐方式
Public JLabel(String text,int aligment);创建一个带文本的JLabel对象,并设置文字水平对齐方式
Public JLabel(String text,Icon icon,int aligment);创建一个带文本,带图标的JLabel对象。并设置标签内容的水平对齐方式
图标的使用:
Swing中的图标可以放置在按钮、标签等组件中,用于描述组建的用途。标签可以用java支持的图标文件类型进行创建,也可以使用java.awt.Graphics类提供的功能方法来创建。
创建图标:
在Swing中通过Icon借口来创建图标,可以在创建时给定图标的大小、颜色等特性。如果使用Icon接口,必须实现Icon接口中的三个方法:
①public int getIconHeight();
②Public int getIconWidth();
③public void painIcon(Component arg(),Graphics,int arg2,int arg3);
getIconHeight()与getIconWidth()方法用于获取图标的长与宽,paintIcon()方法用于实现指定坐标位置画图
实现Icon接口创建图标的例子:
public class DrawIcon implements Icon {//实现Icon接口
private int width;//声明图标的宽
private int height;//声明图标的长
//定义构造方法
public DrawIcon(int width,int height){
this.width = width;
this.height = height;
}
//paintIcon()方法
@Override
public void paintIcon(Component args0, Graphics args1, int x, int y) {
args1.fillOval(x,y,width,height); //绘制一个圆
}
//实现getIconWidth()方法
@Override
public int getIconWidth() {
return this.width;
}
//实现getIconHeight()方法
@Override
public int getIconHeight() {
return this.height ;
}
public static void main(String[]args){
DrawIcon icon = new DrawIcon(15,15);
//创建一个标签,并设置标签上的文字在标签正中间
JLabel jLabel= new JLabel("测试",icon,SwingConstants.CENTER);
jLabel.setBackground(Color.YELLOW);
JFrame jFrame = new JFrame();//创建一个JFrame窗口
Container container = jFrame.getContentPane();
container.add(jLabel);
container.setSize(200,200);
jFrame.setVisible(true);
jFrame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
}
}
结果:
使用图片图标:
Swing中的图标除了可以绘制之外,还可以使用某个特定的图片创建。Swing利用javax.swing.ImageIcon类根据现有图片创建图标。Image类实现了Icon接口,同时java支持多种图片格式。
ImageIcon类有多个构造方法,常用的构造方法有:
①public ImageIcon();该构造方法创建一个通用的Icon对象,当真正需要设置图片时再使用ImageIcon对喜爱那个吊用setImage(Image image)方法来操作
②public ImageIcon(Image image);可以直接从图片源创建图标
③public ImageIcon(Image image,String description);除了可以从图片源创建图标之外,还可以为这个图标添加简单的描述,但这个描述不会在图标显示,可以使用getDescriptio()方法获取这个描述
④public ImageIcon(URL url);该构造方法利用位于计算机网络上的图像文件创建图标
使用图案图标案例:
public class MyImageIcon extends JFrame {
public MyImageIcon() {
Container container = getContentPane();
// 创建一个标签
JLabel jLabel = new JLabel("这是一个JFrame窗体", JLabel.CENTER);
// 获取图片所在的URL
URL url = MyImageIcon.class.getResource("imageButton.jpg");
Icon icon = new ImageIcon(url); // 实例化Icon对象
jLabel.setIcon(icon); // 为标签设置图片
// 设置文字放置在标签中间
jLabel.setHorizontalAlignment(SwingConstants.CENTER);
jLabel.setOpaque(true); // 设置标签为不透明状态
container.add(jLabel); // 将标签添加到容器中
setSize(250, 100); // 设置窗体大小
setVisible(true); // 使窗体可见
// 设置窗体关闭模式
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String args[]) {
new MyImageIcon(); // 实例化MyImageIcon对象
}
}
结果:
常用布局管理器
绝对布局:就是硬件指定组件在容器中的位置和大小,可以使用绝对坐标的方式来指定组建的位置。
使用布局管理器的步骤:
(1)使用Compainter.setLayout(null)方法取消布局管理器。
(2)使用Compainter.setBounds()方法设置每个组件的大小与位置。
需要注意的是:在使用绝对布局之前必须调用setLayout(null)告知编译器,这里不再使用布局管理器。
案例:
public class AbsolutePosition extends JFrame {
public AbsolutePosition(){
setTitle("绝对布局");//设置窗体的标题
setLayout(null);//取消布局管理设置
setBounds(0,0,200,150);//设置窗体宽高属性
Container container = getContentPane();//创建容器
JButton button1 = new JButton("按钮一");//创建按钮1、2
JButton button2 = new JButton("按钮二");
button1.setBounds(10,30,80,30);//创建按钮大小狂傲
button2.setBounds(30,70,100,30);
container.add(button1);//将按钮添加到容器里
container.add(button2);
setVisible(true);//使窗体可见
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//关闭容器
}
public static void main(String[] args) {
new AbsolutePosition();
}
}
结果:
流布局管理器
流(FlowLayout)布局管理器是最基本的布局管理器,在整个容器中的布局正如其名,像”流”一样从左到右摆放组件,直到占据这一行的所有空间,然后再向下移动一行。
常用的构造方法:
(1) pubic FlowLayout();
(2) Public FlowLayout(int alignment);
(3) Public FlowLayout(int alignment,int horizGap,int vertGap);
构造方法中的alignment参数表示使用布局管理器后组件在每一行的具体摆放位置。它可以被赋以下3个值
FlowLayout.LEFT=0;//每组组件按照左对齐方式
FlowLayout.CENTER=1;
FlowLayout.RIGHT = 2;//右对齐方式
上述三个值分别代表容器使用流布局管理器后组件在每一行中的摆放位置
在public FlowLayout(int alinment,int horizGap,int vertGap)构造方法中还存在horizGap与vertGap两个参数,这两个参数分别以像素为单位指定组件之间的水平间隔和垂直间隔
案例:
public class FlowLayoutPosition extends JFrame {
public FlowLayoutPosition(){
setTitle("流布局管理器");//窗体名
Container container = getContentPane();//创建容器
//设置窗体使用流布局管理器,使组件右对齐,并设置组件之间的水平距离和竖直距离
setLayout(new FlowLayout(2,10,10));
for (int i = 0; i<10;i++){//在容器里循环添加10个按钮
container.add(new JButton("button"+1));//将按钮添加到容器里
}
setSize(300,200);//设置按钮宽高
setVisible(true);//使窗体可见
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);//关闭窗体
}
public static void main(String[] args) {
new FlowLayoutPosition();
}
}
结果: