一.GUI的概念
图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。
图形用户界面是一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命令、调用文件、启动程序或执行其它一些日常任务(简化了用户与计算机系统之间的交互过程)。与通过键盘输入文本或字符命令来完成例行任务的字符界面相比,图形用户界面有许多优点。图形用户界面由窗口、下拉菜单、对话框及其相应的控制机制构成,在各种新式应用程序中都是标准化的,即相同的操作总是以同样的方式来完成,在图形用户界面,用户看到和操作的都是图形对象,应用的是计算机图形学的技术。
二.Swing和AWT
AWT是Java的一个基础GUI工具包,它提供了创建窗口,对话框,按钮,文本框等GUI的基本功能(Button,Canvas,checkbox)。而Swing是基于AWT构建的,提供了更多的GUI组件(JFrame,JButton,JLabel,JPanel,Jscrollpane)。
三.常用容器组件
GUI中的基本组成部分是组件,但组件不能独立显示出来,必须放在容器中才能显示出来。一个容器可以容纳多个组件。最常用的容器是JFrame(窗口)和JPanel(面板)。
3.1JFrame(javax.swing)
JFrame是一个顶级窗口,创建一个继承于JFrame的类,在构造函数中,设置窗口属性和添加各种组件,并将窗口设为可见,最后在main方法中创建对象,即可将窗口显示出来。
3.1.1JFrame的窗口属性设置方法
1.setTitle(String x):设置窗口标题
2.setSize(int x,int y):设置窗口大小
3.setLocation()int x,int y):设置窗口位置
4.setLocationRelativeTo(null):可将窗口放到屏幕中间
5.setResizable(boolean):是否可以调整窗口大小
6.setDefaultCloseOperation(JFrame.):设置窗口关闭时的操作
(1.JFrame.EXIT_ON_CLOSE:退出程序
(2.JFrame.HIDE_ON_CLOSE:隐藏窗口
7.add():添加组件到窗口
8.setVisible(boolean):设置窗口是否可见
3.2JPanel(javax.swing)
JPanel是一个面板,可以将组件添加到上面,并对其进行布局
3.2.1JPanel的布局
3.2.1.1流式布局(JPanel的默认布局)
JPanel jPanel=new JPanel();
如图就为流式布局的样式,它是横向排列的
3.2.1.2边界布局
JPanel jPanel=new JPanel(new BorderLayout());
如图就为边界布局的样式,它会自动填充窗口,确保窗口一直的被填满的
3.2.1.3网格布局
JPanel jPanel=new JPanel(new GridLayout(2,2));
如图就为网格布局的样式,它会根据你给出的行列数形成网格区域
3.3JLabe(标签)
构造:new JLabel(" text ");(可有参可无参)
方法:setText("text"):创建文本(会将之前的文本覆盖掉)
getText():得到文本
setFont(new Font("宋体",Font.BOLD,18)):设置文本框字体
3.4JMenuBar(菜单)
构造:new JMenuBar()菜单栏 new JMenu("名称")菜单组件 new JMenultem("名称")菜单项名称
这个叫菜单组件
这个叫菜单项名称
方法:add(menu)向菜单栏中添加菜单组件
add(menultem)向菜单组件添加菜单项组件
setJMenuBar(menuBar)将菜单添加到面板上
3.5JTextField(单行文本)
构造:new JTextField(String text,int x)(可有参可无参,x表示长度)
方法:setText(“text”)设置文本框中的文字
getText()获得文本框中的文字
setEditable(boolean设置文本框是否可以编辑
setColumns(20)设置长度
3.6JTextArea(多行文本框)
构造:new JTextArea(int x,int y)(可有参可无参)设置文本框行列大小
方法:setText("text")设置文本框的文本
getText()获得文本框中的文字
setFont(Font font)设置文本字体
setLineWrap(boolean)是否自动换行,默认为false(如果需要滚动条,可以将文本框放入滚动窗格JScrallPane)
3.7JButton(按钮)
构造:new JButton("text")text表示按钮上的文字
方法:setEnabled(boolean)设置按钮是否可用
setBackground(Color)设置按钮背景色
3.8JScrollPane(滚动窗格)
构造:JScrollPane pane=new JScrollPane(txtArea)可使txtArea文本框出现滚动条
3.9JOptionPane(对话框)
3.9.1showMessageDialog() 消息对话框
JOptionPane.showMessageDialog(null,"消息对话框");
JOptionPane.showMessageDialog(null,"消息对话框","错误",JOptionPane.ERROR_MESSAGE);
构造(一般为null,消息内容,对话框标题,提示类型)
提示类型有五种,如图,类型不同图标不同
ERROR_MWEEAGE 错误消息提示
INFORMATION_MESSAGE 信息提示
WARNING_MESSAGE 警告提示
QUESTION_MESSAGE 问题提示
PLAIN_MESSAGE 简洁提示
3.9.2showConfirmDialog() 确认对话框
JOptionPane.showConfirmDialog(null,"确认对话框");
JOptionPane.showConfirmDialog(null,"11","22",JOptionPane.YES_NO_OPTION);
构造(一般为null,消息内容,对话框标题,消息类型)
它有四种消息类型,所显示的选项不同
DEFAULT_OPTION 默认选项
YES_NO_OPTION 是/否选项
YES_NO_CANCEL_OPTION 是/否/取消选项
OK_CANCEL_OPTION 确认/取消
四.事件监听
一个事件源产生一个事件,该事件被送到监听器,监听器负责监听等待,直到收到一个事件,开始处理。
一般为按钮设置监听 (点击按钮就开始执行某一操作)
addActionListener(new ActionListener(){
@Override public void
actionPerformed(ActinEvent e){
执行操作
}
});
五.例子
下面是一个登录界面,为登录按钮添加监听,让其输入不能为空,否则就会提示弹框
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class JFame02 extends JFrame {
public JFame02(){
this.setTitle("欢迎登录");
this.setSize(300,300);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);
JPanel jPanel=new JPanel(new GridLayout(4,1));
JPanel jPanel1=new JPanel(new FlowLayout());
JLabel label1=new JLabel("欢迎登录");
label1.setFont(new Font("楷体",Font.BOLD,20));
jPanel1.add(label1);
JPanel jPanel2=new JPanel(new FlowLayout());
JLabel label2=new JLabel("账号:");
jPanel2.add(label2);
JTextField jTextField1=new JTextField(10);
jPanel2.add(jTextField1);
JPanel jPanel3=new JPanel(new FlowLayout());
JLabel label3=new JLabel("密码:");
jPanel3.add(label3);
JTextField jTextField2=new JTextField(10);
jPanel3.add(jTextField2);
JPanel jPanel4=new JPanel(new FlowLayout());
JButton j1=new JButton("登录");
JButton j2=new JButton("注册");
jPanel4.add(j1);
jPanel4.add(j2);
jPanel.add(jPanel1);
jPanel.add(jPanel2);
jPanel.add(jPanel3);
jPanel.add(jPanel4);
this.add(jPanel);
this.setVisible(true);
j1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String x=jTextField1.getText();
String y=jTextField2.getText();
if(x.isEmpty() ||y.isEmpty()){
JOptionPane.showMessageDialog(null,"输入不能为空");
return;
}
new JFrame03();//打开新窗口
dispose();//释放当前窗口
}
});
}
public static void main(String[] args) {
JFame02 jFame02=new JFame02();
}
}
运行结果: