- GUI
- 一.GUI的概述
- 二.Swing概述(java组件)
- 三.容器组件
- 1.概念
- 2.常用容器
- (1)Jframe(窗体)
- 方法
- (2)Jpanel (面板)
- 四.布局管理器
- 1.(默认)FlowLayout (流式布局)
- 2.BorderLayout (边界布局)
- 3.GridLayout(网格布局)
- 五.常用组件
- 1.标签(JLabel)
- 2.单行文本(JTextField)
- 3.多行文本框(Jtextarea)
- 4.密码框(JPasswordField)
- 5.按钮(JButton)
- 6.菜单(栏)
- 7.综合代码
- 六.事件处理
- 七.对话框
- 八.内部类
- 1.什么是内部类
- 2.内部类的分类
- (1)成员内部类
- (2)静态内部类
- (3)局部内部类
- (4)匿名内部类
- 3.内部类的特点与意义
到目前为止,我们编写的都是基于控制台的程序; GUI(Graphical User Interface)即图形用户界面,它能够使应用程 序看上去更加友好;用户可以通过图形化界面对程序进行操作已达到自己想要的目的
二.Swing概述(java组件)-
Swing是纯Java组件,使得应用程序在不同的平台上运行时具有相同外观和相同 的行为。
-
Swing中的大部分组件类位于javax.swing包中.
-
Swing中的组件非常丰富,支持很多功能强大的组件
-
Java的图形用户界面的基本组成部分是组件,组件是一个以图形化的方式 显示在屏幕上并能与用户进行交互的对象;
-
组件不能独立地显示出来,必须将组件放在一定的容器(container)中才 可以显示出来。
-
容器可以容纳多个组件,通过调用容器的add(Component comp)方法 向容器中添加组件。
-
窗口(frame)和面板(Panel)是最常用的两个容器。
- Jframe用于在Swing程序中创建窗体;
构造方法
常用方法
- void setsize(int width, int height 设置窗口初始大小
- void setvisible(boolean b) 显示窗口,一定要放到最后不然窗口不可显示
- void settitle(String title)
- void setresizable(boolean resizable)
- void setlocation(int x, int y) 设置窗口初始位置
- void setbounds(int x, int y, int width, int height)
- void setlocationrelativeto(null) 设置窗口在电脑屏幕居中
- void setdefaultcloseoperation(int operation) 设置点击红色关闭按钮程序停止 (如果不设置)则关闭了窗口程序依然在运行 Jframe中有多种静态方法来设置关闭程序的方式
- public void setIconImage(Image image) 设置窗口图标,注意放在将图片文件放在当前文件下方
- void dispose ()
代码
public class JframeDemo1 extends Jframe {
public void creatJframe(){
this.setVisible(true); //显示窗口
this.setSize(700,700); //设置窗口初始大小
this.setLocation(200,200); //设置窗口初始位置
this.setLocationRelativeTo(null); //设置窗口屏幕居中
this.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE); //设置点击红色关闭按钮程序停止
// (如果不设置)则关闭了窗口程序依然在运行 Jframe中有多种静态方法来设置关闭程序的方式
this.setIconImage(new ImageIcon("b.png").getImage()); //设置窗口图标,注意放在
// 当前文件下方
}
public static void main(String[] args) {
new JframeDemo1().creatJframe();
}
}
结果
-
JPanel提供面板,它是轻量级的容器;
-
面板中可以添加其它组件,也可以设置布局,我们一般使用面板来实现布局嵌套;
方法
常用方法
常用代码
public class JframeDemo2 extends Jframe {
public void creatJframe(){
this.setVisible(true); //显示窗口
this.setSize(700,700); //设置窗口初始大小
this.setLocation(200,200); //设置窗口初始位置
this.setLocationRelativeTo(null); //设置窗口屏幕居中
this.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE); //设置点击红色关闭按钮程序停止
// (如果不设置)则关闭了窗口程序依然在运行 Jframe中有多种静态方法来设置关闭程序的方式
this.setIconImage(new ImageIcon("b.png").getImage()); //设置窗口图标,注意放在
// 当前文件下方,不要管放程序的包
JPanel jp=new JPanel(); //不传参数的话默认面板流式布局
jp.setBackground(Color.pink); //设置面板的背景颜色
JButton jb=new JButton(); //定义一个按钮,参数传的是按钮的名字也可以不传
jp.add(jb); //将按钮添加到面板里面
this.add(jp); //将面板添加到当前窗口对象中
this.setVisible(true); //显示窗口,一定要放最后
}
public static void main(String[] args) {
new JframeDemo2().creatJframe();
}
}
结果
-
swing中,提供了布局管理器类的对象可以管理
-
每个Jpanel都有一个布局管理器对象,当容器需要对某个组件进行定位或判 断其大小尺寸时,就会调用其对应的布局管理器,调用Jpanel的setLayout方 法改变其布局管理器对象或通过构造方法设置。
-
FlowLayout布局管理器是流式布局管理器,它将组件按照从左到右、从上到下的顺序来安排, 并在默认情况下使组件尽量居中放置。
-
FlowLayout布局管理器对组件逐行定位,行内从左到右,一行排满后换行。
-
不改变组件的大小,按组件原有尺寸显示组件,可设置不同的组件间距,行距以及对齐方式。
构造方法
new FlowLayout(align,int hgap,int vgap); align:对齐方式 hgap:水平距离 vgap:垂直距离
new FlowLayout(FlowLayout.LEFT);左对齐,水平和垂直间距为缺省值(5)。
new FlowLayout();使用缺省的居中对齐方式,水平和垂直间距为缺省值(5)。
代码
import javax.swing.*;
import java.awt.*;
public class JframeDemo3 extends Jframe {
public void creatJframe(){
this.setVisible(true); //显示窗口
this.setSize(700,700); //设置窗口初始大小
this.setLocation(200,200); //设置窗口初始位置
this.setLocationRelativeTo(null); //设置窗口屏幕居中
this.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE); //设置点击红色关闭按钮程序停止
// (如果不设置)则关闭了窗口程序依然在运行 Jframe中有多种静态方法来设置关闭程序的方式
this.setIconImage(new ImageIcon("b.png").getImage()); //设置窗口图标,注意放在
// 当前文件下方,不要管放程序的包
JPanel jp=new JPanel(new FlowLayout(FlowLayout.LEFT,10,10)); //流式布局
//流式布局参数 align对齐方式 hgap水平间距(单位像素) vagp垂直间距(单位像素)
//从左至右从上到下,默认居中,一行排满换行。不改变组件的大小
jp.setBackground(Color.pink); //设置面板的背景颜色
JButton jb1=new JButton("按钮1"); //定义一个按钮,参数传的是按钮的名字也可以不传
JButton jb2=new JButton("按钮2"); //定义一个按钮,参数传的是按钮的名字也可以不传
JButton jb3=new JButton("按钮3"); //定义一个按钮,参数传的是按钮的名字也可以不传
JButton jb4=new JButton("按钮4"); //定义一个按钮,参数传的是按钮的名字也可以不传
JButton jb5=new JButton("按钮5"); //定义一个按钮,参数传的是按钮的名字也可以不传
jp.add(jb1); //将按钮添加到面板里面
jp.add(jb2); //将按钮添加到面板里面
jp.add(jb3); //将按钮添加到面板里面
jp.add(jb4); //将按钮添加到面板里面
jp.add(jb5); //将按钮添加到面板里面
this.add(jp); //将面板添加到当前窗口对象中
this.setVisible(true); //显示窗口,一定要放最后
}
public static void main(String[] args) {
new JframeDemo3().creatJframe();
}
}
结果
- BorderLayout布局管理器只允许在容器内放置5个组件,这5个组件的位置是由BorderLayout类中的
North、South、East、West和Center5个常量来确定的,他们对应着容器中的上下左右中,用法如下:
this.add(new Button(“按钮”) ,BorderLayout.NORTH);
this.add(new Button(“按钮”) ,BorderLayout.CENTER);
组件在BorderLayout中的大小都是可以改变的。一般情况下可以让中间区域大一些,而且可以只用其中几
个区域。
- BorderLayout将整个容器的布局划分成东(EAST)西(WEST)南(SOUTH)北(NORTH)中
(CENTER)**(必须)**五个区域,组件只能被添加到指定的区域。
-
如不指定组件的加入部位,则默认加入到CENTER区。
-
每个区域只能加入一个组件,添加的组件默认最大化,如加入多个,则先前加入的会被覆盖。
-
BorderLayout型布局容器尺寸缩放原则: 北、南两个区域在水平方向缩放。 东、西两个区域在垂直方向缩放。 中部可在两个方向上缩放。
-
不设置位置信息默认是中间**(必须)**
代码
import javax.swing.*;
import java.awt.*;
public class JframeDemo4 extends Jframe {
public void creatJframe(){
this.setVisible(true); //显示窗口
this.setSize(300,300); //设置窗口初始大小
this.setLocation(200,200); //设置窗口初始位置
this.setLocationRelativeTo(null); //设置窗口屏幕居中
this.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE); //设置点击红色关闭按钮程序停止
// (如果不设置)则关闭了窗口程序依然在运行 Jframe中有多种静态方法来设置关闭程序的方式
this.setIconImage(new ImageIcon("b.png").getImage()); //设置窗口图标,注意放在
// 当前文件下方,不要管放程序的包
JPanel jp=new JPanel(new BorderLayout()); //边界布局,布局界面上下左右中(中是必须有的)
// 添加的组件默认最大化
jp.setBackground(Color.pink); //设置面板的背景颜色
JButton jb1=new JButton("按钮1"); //定义一个按钮,参数传的是按钮的名字也可以不传
JButton jb2=new JButton("按钮2"); //定义一个按钮,参数传的是按钮的名字也可以不传
JButton jb3=new JButton("按钮3"); //定义一个按钮,参数传的是按钮的名字也可以不传
JButton jb4=new JButton("按钮4"); //定义一个按钮,参数传的是按钮的名字也可以不传
JButton jb5=new JButton("按钮5"); //定义一个按钮,参数传的是按钮的名字也可以不传
jp.add(jb1,BorderLayout.NORTH); //将按钮添加到边界布局面板里面的上位置
jp.add(jb2,BorderLayout.WEST); //将按钮添加到边界布局面板里面的右位置
jp.add(jb3); //将按钮添加到面板里面
jp.add(jb4); //将按钮添加到面板里面
jp.add(jb5); //将按钮添加到面板里面 如果不设置位置则默认时中间且会覆盖
this.add(jp); //将面板添加到当前窗口对象中
this.setVisible(true); //显示窗口,一定要放最后
}
public static void main(String[] args) {
new JframeDemo4().creatJframe();
}
}
结果
-
GridLayout布局管理器是矩形网格,在网格中放置组件,每个网格的高度和宽 度都相等,组件随着网格的大小而在水平和垂直方向上拉伸,网格的大小是由容器的 大小和创建网格的多少来确定的。其用法如下:
-
当组件数目大于网格数时,GridLayout保持行数不变而自动增加列数。
-
GridLayout型布局管理器将空间划分成规则的矩形网格,每个单元格区域大小相等。 组件被添加到每个单元格中,先从左到右添满一行后换行,再从上到下。
-
在 GridLayout 构造方法中指定分割的行数和列数.
构造方法
new GridLayout(int rows,int cols) rows行 cols列
代码
import javax.swing.*;
import java.awt.*;
public class JframeDemo5 extends Jframe {
public void creatJframe(){
this.setVisible(true); //显示窗口
this.setSize(700,700); //设置窗口初始大小
this.setLocation(200,200); //设置窗口初始位置
this.setLocationRelativeTo(null); //设置窗口屏幕居中
this.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE); //设置点击红色关闭按钮程序停止
// (如果不设置)则关闭了窗口程序依然在运行 Jframe中有多种静态方法来设置关闭程序的方式
this.setIconImage(new ImageIcon("b.png").getImage()); //设置窗口图标,注意放在
// 当前文件下方,不要管放程序的包
JPanel jp=new JPanel(new GridLayout(2,2)); //网格布局
//参数 rows一行放置多少个组件 cols列一列放置多少个组件一行占满是从第二行开始,组件数量超出后会扩展出一列
jp.setBackground(Color.pink); //设置面板的背景颜色
JButton jb1=new JButton("按钮1"); //定义一个按钮,参数传的是按钮的名字也可以不传
JButton jb2=new JButton("按钮2"); //定义一个按钮,参数传的是按钮的名字也可以不传
JButton jb3=new JButton("按钮3"); //定义一个按钮,参数传的是按钮的名字也可以不传
JButton jb4=new JButton("按钮4"); //定义一个按钮,参数传的是按钮的名字也可以不传
JButton jb5=new JButton("按钮5"); //定义一个按钮,参数传的是按钮的名字也可以不传
jp.add(jb1); //将按钮添加到网格布局的面板里面
jp.add(jb2); //将按钮添加到网格布局的面板里面
jp.add(jb3); //将按钮添加到网格布局的面板里面
jp.add(jb4); //将按钮添加到网格布局的面板里面
jp.add(jb5); //将按钮添加到网格布局的面板里面
this.add(jp); //将面板添加到当前窗口对象中
this.setVisible(true); //显示窗口,一定要放最后
}
public static void main(String[] args) {
new JframeDemo5().creatJframe();
}
}
结果
- 标签是容纳文本和图标的控件,通常用来在界面中标识别的控件。
方法
- 单行文本(JTextField)
方法
- 多行文本框(Jtextarea)
方法
- 密码框(JPasswordField)
方法
- 按钮(JButton)
方法
代码1
import javax.swing.*;
import java.awt.*;
public class JframeDemo1 extends Jframe {
public void creatJframe() {
this.setVisible(true); //显示窗口
this.setSize(700, 700); //设置窗口初始大小
this.setLocation(200, 200); //设置窗口初始位置
this.setLocationRelativeTo(null); //设置窗口屏幕居中
this.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE); //设置点击红色关闭按钮程序停止
// (如果不设置)则关闭了窗口程序依然在运行 Jframe中有多种静态方法来设置关闭程序的方式
this.setIconImage(new ImageIcon("b.png").getImage()); //设置窗口图标,注意放在
// 当前文件下方,不要管放程序的包
JPanel jp = new JPanel(new FlowLayout(FlowLayout.LEFT)); //不传参数的话默认面板流式布局
jp.setBackground(Color.pink); //设置面板的背景颜色
JLabel jl = new JLabel("标签"); //标签组件
jl.setFont(new Font("楷体", Font.BOLD, 20));
//参数: name ,style如粗体Font.BoLD , size大小
JTextField jf = new JTextField("这是我的第一个单行文本框", 20); //单行文本输入框
//参数:String text默认显示内容 columns显示大小
jf.setEditable(true); //是否可以编辑
// jf.setText(String text); 显示内容
// jf.getText(); 程序获得文本输入的内容
jf.setVisible(true); //是否可见
Jtextarea ja = new Jtextarea("这是我的第一个多行文本输入框", 10, 10);
//参数:无参 或 (String text 默认显示内容 ) int rows 行 int columns列
ja.setLineWrap(true); //当一行写满自动换行 (强制换行是针对英文说的)
// ja.setWrapStyleWord(true); 英文单词换行
JScrollPane jsp = new JScrollPane(ja); //可以给多行文本输入设置自动滚动条
jp.add(jl); //把标签添加到面板里
jp.add(jf); //将单行文本框添加到面板里
jp.add(jsp); //将多行文本添加到面板里面
this.add(jp); //将面板添加到当前窗口对象中
this.setVisible(true); //显示窗口,一定要放最后
}
public static void main(String[] args) {
new JframeDemo1().creatJframe();
}
}
结果
代码2
import javax.swing.*;
import java.awt.*;
public class JframeDemo1 extends Jframe {
public void creatJframe(){
this.setSize(500,500); //设置窗口初始大小
this.setLocation(200,200); //设置窗口初始位置
this.setLocationRelativeTo(null); //设置窗口屏幕居中
this.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE); //设置点击红色关闭按钮程序停止
// (如果不设置)则关闭了窗口程序依然在运行 Jframe中有多种静态方法来设置关闭程序的方式
this.setIconImage(new ImageIcon("b.png").getImage()); //设置窗口图标,注意放在
// 当前文件下方
JPanel jp=new JPanel(new BorderLayout());
JMenuBar jb=new JMenuBar(); //创建菜单栏(属于窗口(frame))
JMenu jm1=new JMenu("新建"); //创建菜单
JMenu jm2=new JMenu("选项");
JMenuItem j11=new JMenuItem("文件夹"); //创建菜单项
JMenuItem j12=new JMenuItem("文件");
JMenuItem j21=new JMenuItem("打开");
JMenuItem j22=new JMenuItem("删除");
jm1.add(j11); //将菜单项添加到菜单中
jm1.add(j12);
jm2.add(j21);
jm2.add(j22);
jb.add(jm1); //将菜单加入到菜单栏中
jb.add(jm2);
this.add(jb); //将菜单栏加入到窗口中
jp.add(this.add(jb),BorderLayout.NORTH);
this.add(jp);
this.setVisible(true); //显示窗口,一定要放到最后
}
public static void main(String[] args) {
new JframeDemo1().creatJframe();
}
}
结果
事件处理案例
事件监听类:
代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class JframeDemo2 extends Jframe {
public void creatJframe(){
this.setVisible(true); //显示窗口
this.setSize(700,700); //设置窗口初始大小
this.setLocation(200,200); //设置窗口初始位置
this.setLocationRelativeTo(null); //设置窗口屏幕居中
this.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE); //设置点击红色关闭按钮程序停止
// (如果不设置)则关闭了窗口程序依然在运行 Jframe中有多种静态方法来设置关闭程序的方式
this.setIconImage(new ImageIcon("b.png").getImage()); //设置窗口图标,注意放在
// 当前文件下方,不要管放程序的包
JPanel jp=new JPanel(); //不传参数的话默认面板流式布局
jp.setBackground(Color.pink); //设置面板的背景颜色
JButton jb=new JButton("按钮"); //定义一个按钮,参数传的是按钮的名字也可以不传
JTextField jt=new JTextField("请输入内容",10);
jp.add(jb); //将按钮添加到面板里面
jp.add(jt);
this.add(jp); //将面板添加到当前窗口对象中
this.setVisible(true); //显示窗口,一定要放最后
jb.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) { //事件监听器
String s=jt.getText(); //单行文本框输入的内容
if (s.length()<10){
System.out.println("输入的还不算多");
}else{
System.out.println("输入太多了");
}
System.out.println("我被点击了");
}
});
}
public static void main(String[] args) {
new JframeDemo2().creatJframe();
}
}
结果
鼠标监听类:
键盘监听类:
七.对话框用法
int res=JOptionPane.show/confirm/iDialog(null,
"确认退出吗","退出框",JOptionPane.YES_NO_CANCEL_OPTION); //确认对话框
JOptionPane.showMessageDialog(null,"你又不退出了",
"提示框",JOptionPane.INFORMATION_MESSAGE); //消息对话框
八.内部类
1.什么是内部类
-
把类定义在另一个类的内部,该类就被称为内部类。
-
如果在类 Outer 的内部再定义一个类 Inner,此时类 Inner 就称为内部类 (或称为嵌套类),而类 Outer 则称为外部类(或称为宿主类)
特点:
意义:



