GUI
GUI
GraphicalUserInterface(图形用户接口)。
用图形的方式,来显示计算机操作的界面,这样更方便更直观。
CLI
CommandlineUserInterface (命令行用户接口)
就是常见的Dos命令行操作。
需要记忆一些常用的命令,操作不直观。
举例:
比如:创建文件夹,或者删除文件夹等
Java为GUI提供的对象都存在java.awt和javax.swing两个包中
Awt和Swing
java.awt:AbstractWindowToolKit (抽象窗口工具包),需要调用本地系统方法实现功能。属重量级控件。
javax.swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属轻量级控件。
继承关系图
Container:为容器,是一个特殊的组件,该组件中可以通过add方法添加其他组件进来。
布局管理器
容器中的组件的排放方式,就是布局。
常见的布局管理器:
FlowLayout(流式布局管理器)
从左到右的顺序排列。
Panel默认的布局管理器。
BorderLayout(边界布局管理器)
东,南,西,北,中
Frame默认的布局管理器。
GridLayout(网格布局管理器)
规则的矩阵
CardLayout(卡片布局管理器)
选项卡
GridBagLayout(网格包布局管理器)
非规则的矩阵
代码演示:
import java.awt.*;
/*
创建图形化界面
1,创建frame窗体
2,对窗体进行基本设置
比如:位置 大小 布局
3,定义组件
4,将组件通过窗体的add方法添加到窗体中
5,让窗体显示,通过setVisible(true)
*/
class AwtDemo
{
public static void main(String[] args)
{
//创建一个不可见的Frame对象
Frame f = new Frame();
//设置窗体的大小
f.setSize(500,400);
//设置窗体的位置
f.setLocation(100,300);
//设置为流式布局
f.setLayout(new FlowLayout());
//创建一个按钮对象
Button b = new Button("button");
//将按钮加到窗体中
f.add(b);
//显示隐藏的窗体
f.setVisible(true);
//
f.addWindowListener(new WindowAdapter()
{
// 关闭窗体
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
//窗体激活
public void windowActive(WindowEvent e)
{
System.out.println("active");
}
//打开窗体
public void windowOpened(WindowEvent e)
{
System.out.println("open");
}
});
}
}
事件监听机制组成
事件源(组件)
事件(Event)
监听器(Listener)
事件处理(引发事件后处理方式)
事件监听机制流程图
事件监听机制
1 确定事件源(容器或组件)
2 通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。
3 该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。
4 一般用匿名内部类来表示。
5 在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。
6 事件触发后会把事件打包成对象传递给该变量。(其中包括事件源对象。通过getSource()或者,getComponent()获取。)
代码演示:
import java.awt.*;
import java.awt.event.*;
/*
事件监听机制的特点:
1,事件源
2,事件
3,监听器
4,事件处理
事件源:就是awt包或者Swing包中的那些图形化界面
事件: 每一个事件源都有自己特有的对应事件和共性事件
监听器:将可以出发某一事件的动作(不止一个动作)都已经封装到了监听器中
以上三者在java中都已经定义好了
直接获取其对象来用就可以了
我们要做的动作就是对产生的动作进行处理
因为WindowListener的子类WindowAdapter已经实现了WindowListener接口
并覆盖了其中的所有方法,那么只需要继承WindowAdapter覆盖我需要的方法即可
*/
class FrameDemo
{
//定义该组件所需组件的引用
private Frame f;
private Button but;
private TextField tf;
//构造函数初始化
FrameDemo()
{
init();
}
//对图形化界面初始化
public void init()
{
//定义窗体对象
f = new Frame("my frame");
//对frame进行基本设置
f.setBounds(300,400,500,400);
//设置布局方式
f.setLayout(new FlowLayout());
//创建按钮组件
but = new Button("my button");
//创建文本框组件
tf = new TextField(20);
//将组件添加到窗体中
f.add(tf);
f.add(but);
//加载一下窗体的事件
myEvent();
//显示窗体
f.setVisible(true);
}
//定义事件函数
private void myEvent()
{
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
//按钮事件
//添加一个按钮,让按钮具备退出程序的功能
/*
按钮就是事件源
通过关闭窗体示例了解到,想要知道哪个组件具备什么样的特有监听器,需要查看该组件对象的功能
通过查阅Button的描述,发现按钮支持一个特有监听addActionListener
*/
//没有适配器的接口 addActionListener
but.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("action");
System.exit(0);
}
});
//鼠标事件
but.addMouseListener(new MouseAdapter()
{
//定义计数器
private int count = 1;
private int clickCount = 1;
//鼠标进入到组件上时调用
public void mouseEntered(MouseEvent e)
{
System.out.println("enter"+count++);
}
//鼠标按键在组件上单击(按下并释放)时调用
public void mouseClicked(MouseEvent e)
{
//双击事件
if(e.getClickCount()==2)
System.out.println("click"+clickCount++);
}
});
//给按钮添加一个键盘监听
but.addKeyListener(new KeyAdapter()
{
//按下某个键时调用此方法
public void keyPressed(KeyEvent e)
{
if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER)
System.exit(0);
//System.out.println(KeyEvent.getKeyText(e.getKeyCode())+" "+e.getKeyCode());
}
});
//给文本框添加一个键盘监听
tf.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
int code = e.getKeyCode();
if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9))
{
System.out.println("illeagl");
//使用此事件,以便不会按照默认的方式由产生此事件的源代码来处理此事件
e.consume();
}
}
});
}
public static void main(String[] args)
{
new FrameDemo();
}
}
菜单继承体系
菜单
MenuBar,Menu,MenuItem
先创建菜单条,再创建菜单,每一个菜单中建立菜单项。
也可以菜单添加到菜单中,作为子菜单。
通过setMenuBar()方法,将菜单添加到Frame中。
代码演示:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
class MenuDemo
{
//定义各个所需的引用
private MenuBar bar;
private Menu fileMenu,subMenu;
private MenuItem openItem,saveItem,closeItem,subItem;
private Frame f;
private FileDialog openDialog,saveDialog;
private TextArea area;
private File file;
//构造函数
MenuDemo()
{
init();
}
//对图形化界面初始化
public void init()
{
//创建窗体对象
f = new Frame("my window");
//对frame进行基本设置
f.setBounds(300,100,700,600);
//f.setLayout(new FlowLayout());
//创建文本区域
area = new TextArea();
//创建菜单栏
bar = new MenuBar();
//创建文件打开对话框
openDialog = new FileDialog(f,"open",FileDialog.LOAD);
//创建文件保存对话框
saveDialog = new FileDialog(f,"save",FileDialog.SAVE);
//创建文件菜单
fileMenu = new Menu("File");
//创建子菜单
subMenu = new Menu("subMenu");
subItem = new MenuItem("subItem"); //创建子菜单选项
openItem = new MenuItem("Open"); //创建打开选项
saveItem = new MenuItem("Save"); //创建保存选项
closeItem = new MenuItem("Quit"); //创建关闭选项
subMenu.add(subItem); //将子选项加入到子菜单中
fileMenu.add(openItem); //将打开选项添加到文件菜单中
fileMenu.add(saveItem); //将保存选项添加到文件菜单中
fileMenu.add(subMenu); //将子菜单添加到文件菜单中
fileMenu.add(closeItem); //将关闭选项添加到文件菜单中
bar.add(fileMenu); //将文件菜单添加到菜单栏中
f.setMenuBar(bar); //将此窗体的菜单栏设置为指定的菜单栏
f.add(area); //将文本区域添加到窗体中
myEvent(); //加载事件
f.setVisible(true); //窗体可见
}
public void myEvent()
{
saveItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if(file==null)
{
saveDialog.setVisible(true); //弹出对话框
String dirPath = saveDialog.getDirectory(); //获取此文件对话框的目录
String fileName = saveDialog.getFile(); //获取此文件对话框的选定文件
if(dirPath==null || fileName==null)
return;
file = new File(dirPath,fileName);
}
try
{
BufferedWriter bufw = new BufferedWriter(new FileWriter(file));
String text = area.getText();
bufw.write(text);
//bufw.flush();
bufw.close();
}
catch (IOException ex)
{
throw new RuntimeException("write failed");
}
}
});
openItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
openDialog.setVisible(true); //弹出对话框
String dirPath = openDialog.getDirectory(); //获取此文件对话框的目录
String fileName = openDialog.getFile(); //获取此文件对话框的选定文件
if(dirPath==null || fileName==null)
return;
area.setText(""); //清空文本区域
file = new File(dirPath,fileName);
try
{
BufferedReader bufr = new BufferedReader(new FileReader(file));
String line = null;
while((line=bufr.readLine())!=null)
{
area.append(line+"\r\n");
}
bufr.close();
}
catch (IOException ex)
{
throw new RuntimeException("read failed");
}
}
});
//关闭窗体
closeItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.exit(0); //退出程序
}
});
//关闭窗体
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
public static void main(String[] args)
{
new MenuDemo();
}
}