GUI
一.GUI概念
GUI(Graphical User Interface)即图形用户界面,它能够使应用程序看上去更加友好
二.Swing概述
Swing是纯Java组件,使得应用程序在不同的平台上运行时具有相同外观和相同的行为。
Swing中的大部分组件类位于javax.swing包中.
Swing中的组件非常丰富,支持很多功能强大的组件
关于GUI组件的类都在Swing包里
三.容器组件
Java的图形用户界面的基本组成部分是组件,组件是一个以图形化的方式显示在屏幕上并能与用户进行交互的对象;
组件不能独立地显示出来,必须将组件放在一定的容器(container)中才
可以显示出来。
容器可以容纳多个组件,通过调用容器的add(Component comp)方法
向容器中添加组件。窗口(Frame)和面板(Panel)是最常用的两个容器。
四.常用容器
1.窗体
在java中提供JFrame类,用于在Swing程序中创建窗体
(1) JFrame类的构造方法
构造方法 | 说明 |
---|---|
JFrame() | 创建新窗体,该窗体初始化为不可见 |
JFrame(String title) | 创建新窗体,使用参数title指定标题,该窗体初始化为不可见 |
(2) JFrame类的常用方法
常用方法 | 说明 |
---|---|
void setSize(int width, int height) | 设置窗体大小,可以指定宽度和高度 |
void setVisible(boolean b) | 设置窗体为可见的或者不可见,默认不可见 |
void setTitle(String title) | 设置窗体标题 |
void setResizable(boolean resizable) | 设置窗体是否可以被拉长,默认为可以 |
void setLocation(int x,int y) | 设置窗体相对坐标原点的位置,默认为(0,0)左上角 |
void setLocationRelativeTo(null) | 使窗体位于屏幕正中间 |
void setDefaultCloseOperation(int operation) | 设置窗体关闭时程序的状态 |
void dispose() | 销毁当前窗体 |
2.面板
java中的Jpanel类,为我们提供了面板,因为我们有了窗体只是空架子,并不能在窗体上设置各种组件,而是在面板上,所以我们再创建一个窗体后紧接着要创建一个面板,在面板上设置各种组件
(1)JPanel类的构造方法
构造方法 | 说明 |
---|---|
JPanel() | 创建一个空面板,默认为流式布局 |
JPanel(LayoutManaer layout) | 创建带有指定布局的面板 |
(2)JPanel类的常用方法
常用方法 | 说明 |
---|---|
void setBackground(Color bg) | 设置面板的背景色,由参数bg指定颜色 |
void setLayout(LayoutManager mgr) | 设置面板的布局,参数是布局管理器 |
Component add(Component comp) | 往面板中添加一个组件 |
五.布局管理器
布局管理器就是在面板上布局组件时的格式,java中常用的布局管理器有三种,分别是FlowLayout(流式布局),BorderLayout(边界布局),GridLayout(网格布局)
1. FlowLayout 流式布局
FlowLayout布局管理器是流式布局管理器,它将组件按照从左到右、从上到下的顺序来安排,并在默认情况下使组件尽量居中放置。
(1)FlowLayout构造方法
构造方法 | 说明 |
---|---|
FlowLayout(FlowLayout.RIGHT,int hgap,int vgap) | 右对齐,设置水平组件距离和垂直组件距离 |
FlowLayout(FlowLayout.LEFT) | 左对齐,水平和垂直距离为默认值5 |
FlowLayout() | 组件默认为居中,水平和垂直距离为默认值5 |
2.BorderLayout 边界布局
BorderLayout布局只允许在容器内设置5个组件,这5个组件的位置是由BorderLayout类中的North、South、East、West和Center5个常量来确定的,他们对应着容器中的上下左右中,用法如下
this.add(new Button(“按钮”) ,BorderLayout.NORTH)
this.add(new Button(“按钮”) ,BorderLayout.CENTER)
this指的是当前面板,加入的可以是任意组件,不一定是按钮,也可以是一个面板
组件在BorderLayout中的大小都是可以改变的。一般情况下可以让中间区域大一些,而且可以只用其中几个区域
BorderLayout将整个容器的布局划分成东(EAST)西(WEST)南(SOUTH)北(NORTH)中
(CENTER)五个区域,组件只能被添加到指定的区域
如不指定组件的加入部位,则默认加入到CENTER区
每个区域只能加入一个组件,如加入多个,则先前加入的会被覆盖
BorderLayout型布局容器尺寸缩放原则:
北、南两个区域在水平方向缩放
东、西两个区域在垂直方向缩放
中部可在两个方向上缩放
3.GridLayout 网格布局
GridLayout布局管理器是矩形网格,在网格中放置组件,每个网格的高度和宽度都相等,组件随着网格的大小而在水平和垂直方向上拉伸,网格的大小是由容器的大小和创建网格的多少来确定的。其用法如下
this.setLayout(new GridLayout(2 , 3)); //创建一个2行3列的网格
this.add(new Button(“按钮"))
当组件数目大于网格数时,GridLayout保持行数不变而自动增加列数。
GridLayout型布局管理器将空间划分成规则的矩形网格,每个单元格区域大小相等。组件被添加到每个单元格中,先从左到右添满一行后换行,再从上到下。
在 GridLayout 构造方法中指定分割的行数和列数
六.常用组件
1.标签(JLabel)
标签分为文本标签和图片标签,顾名思义是用来在面板上增加文字或图片信息.
(1)JLabel的构造方法
构造方法 | 说明 |
---|---|
JLabel() | 创建一个标签 |
JLabel(String text) | 创建一个带文本的标签 |
JLabel(Icon image) | 创建一个图像的标签 |
(2)JLabel的常用方法
常用方法 | 说明 |
---|---|
void setText(String text) | 设置标签上的文本 |
String getText() | 获得标签上的文本 |
setFont(new Font(“宋体”,Font.BOLD, 18)) | 设置字体 |
2.单行文本(JTextField)
用来输入单行文本的文本框,不能输入回车
(1)JTextField的构造方法
构造方法 | 说明 |
---|---|
JTextField() | 创建一个空白文本框如上图 |
JTextField(String text) | 创建一个带内容的文本框 |
JTextField(String text, int columns | 创建一个带内容,并且指定列数的单行文本框 |
(2)JTextFiled的常用方法
常用方法 | 说明 |
---|---|
void setText(String text) | 设置文本框中的文本 |
String getText() | 获得文本框中的文本 |
void setEditable(boolean b) | 设置文本框是否可以编辑,默认可以编辑 |
setColumns(20); | 设置列数 |
3.多行文本框(JTextArea)
用来输入多行文本,可以输入回车换行
(1)JTextArea的构造方法
构造方法 | 说明 |
---|---|
JTextArea() | 创建一个空的文本域 |
JTextArea(String text) | 用指定文本初始化文本域 |
JTextArea(int rows, int columns) | 创建一个指定行数和列数的空文本域 |
JTextArea(String text,int rows, int columns) | 创建一个带文本,并指行数和列数的空文本域 |
(2)JTextArea的常用方法
常用方法 | 说明 |
---|---|
void setText(String text) | 设置文本域中的文本 |
String getText() | 获得文本域中的文本 |
void setFont(Font font) | 设置文本域中文本的字体 |
void setLineWrap(boolean wrap) | 是否自动换行,默认false |
如果需要文本区自动出现滚动条,可将文本区对象放入滚动窗格(JScrollPane)中
JScrollPane scrollPane = new JScrollPane(txtArea);
add(scrollPane );
4.密码框(JPasswordField)
用于输入密码时不可见
1.JPasswordField的构造方法
构造方法 | 说明 |
---|---|
JPasswordField() | 创建一个空的密码框 |
JPasswordField(String text) | 创建一个带文本的密码框 |
JPasswordField(String text, int columns) | 创建一个带文本的密码框,并且可以规定列数 |
2.JPasswordField的常用方法
常用方法 | 说明 |
---|---|
char [] getPassword() | 获得密码框中的文本,存放在char数组中 |
5.按钮(JButton)
设置按钮组件
1.JButton的构造方法
构造方法 | 说明 |
---|---|
JButton(String text) | 创建一个带文本标签的按钮 |
JButton(Icon image) | 创建一个带图像标签的按钮 |
2.JButton的常用方法
常用方法 | 说明 |
---|---|
void setBackground(Color bg) | 设置按钮的背景色 |
void setEnabled(boolean b) | 设置启用(或禁用按钮),由参数b决定 |
void setToolTipText(String text) | 设置按钮的悬停提示信息 |
6.菜单栏组件
给面板上添加一些菜单栏
1.菜单栏的构造方法
构造方法 | 说明 |
---|---|
JMenuBar() | 创建一个菜单栏对象 |
2.菜单栏的普通方法
普通方法 | 说明 |
---|---|
add(menu) | 向菜单栏中添加菜单 |
setJMenuBar(menuBar) | 将菜单栏添加到窗口,这个方法要用窗体对象调用 |
7.菜单组件
1.菜单的构造方法
构造方法 | 说明 |
---|---|
JMenu(“菜单名称") | 创建一个菜单对象 |
2.菜单的普通方法
普通方法 | 说明 |
---|---|
add(menuItem) | 向菜单中添加菜单选项 |
8.菜单项组件
1.菜单项的构造方法
构造方法 | 说明 |
---|---|
JMenuItem(“菜单项名称"); | 创建一个菜单项对象 |
七.效果展示
八.事件处理
我们在上面虽然做出了页面,但只是空壳子,点按钮不会触发任何效果,要想有效果,就要对事件源进行监视,从而进行相应的行为.
什么是事件源?
就是任何一个组件对象,要想让该组件对象做出响应,就要用监听器去监听
如何产生监听器?
每一个事件源都有一个addActionListener()方法,这个方法要给里面传入一个匿名内部类,即new ActionListen()对象,但 ActionListen()是一个接口,我们知道接口不能直接产生对象,正确的做法是新写一个类,让该类实现接口的方法,才生成该类对象,但这样做太麻烦,java引入了匿名内部类,new ActionListen()其实是new了一个没有名字的内部类,完整的代码如下
事件源对象.addActionListener(new ActionListener() {
// 事件处理
@Override
public void actionPerformed(ActionEvent e) {
//执行操作
}
});
这样就可以在点击相关组件从而产生对应的事件了
九.对话框
对话框就是在事件处理时,和用户进行交互的对话框,分为消息对话框和确认对话框
1.JOptionPane对话框
(1)showMessageDialog() 消息对话框
消息对话框一般用于提示用户出现了什么问题或错误
主要有五种消息类型,类型不同,图标不同:
ERROR_MESSAGE 错误消息提示
INFORMATION_MESSAGE 信息提示
WARNING_MESSAGE 警告提示
QUESTION_MESSAGE 问题提示
PLAIN_MESSAGE 简洁提示
如上述的账号密码为空就是警告提示
(2)showConfirmDialog() 确认对话框
确认对话框一般用于确认对象目前的操作是否继续往下执行
主要有四种消息类型,类型不同,图标不同:
DEFAULT_OPTION 默认选项
YES_NO_OPTION 是/否选项
YES_NO_CANCEL_OPTION 是/否/取消选项
OK_CANCEL_OPTION 确定/取消
这就是一个OK_CANCEL_OPTION 确定/取消,确认/取消对话框