一、概述及理解
|--GUI 图形化操作界面,如打开文件对话框
|--GLI 命令行式界面操作,如DOS
建立图形化界面,会单独开一个线程。
二、GUI体系图及组件
GUI应用原理是,往容器中添加组件,每个组件是具体的对象,不同类型的组件提供不同的功能。
package guiTest;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class MyMenuDemo {
private Frame f;
private MenuBar mb;
private Menu m;
private Menu m1;
private MenuItem mi;
private MenuItem mi2;
MyMenuDemo(){
init();
}
//界面的初始化
public void init(){
//1.创建窗体及组件
f = new Frame("菜单栏试验");
mb =new MenuBar();
m = new Menu("文件");
m1 = new Menu("子菜单");
mi = new MenuItem("退出");
mi2 = new MenuItem("子条目");
//2.设置布局
f.setBounds(650, 150, 450,500 );
f.setLayout(new FlowLayout());
//3.添加组件
f.setMenuBar(mb);
mb.add(m);
m.add(m1);
m1.add(mi2);
m.add(mi);
//4.添加监听事件
myEvent();
//5.设置可见
f.setVisible(true);
}
//建立监听函数myEvent(),用玩完成各类事件的监听
public void myEvent(){
//监听窗口关闭
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
//退出按钮监听
mi.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
}
public static void main(String[] args) {
new MyMenuDemo();
}
}
三、布局及操作规律
布局用于规定添加到容器中的组件的排列方式。有如下几种布局:
|--FlowLayout(流式布局管理器)
从左到右的顺序排列
Panel默认的布局管理器
|--BorderLayout(边界布局管理器)
Frame默认的布局管理器
如果不指定边界位置,那会以覆盖上一个组件方式放在Center
|--GridLayout(网格布局管理器)
规则的矩阵
|--CardLayout(卡片布局管理器)
选项卡
|--GridBagLayout(网格包布局管理器)
非规则的矩阵
四、GUI的创建步骤
GUI的创建总体的创建步骤比较固定,
//1.创建Frame窗体
Frame f = new Frame();
//2.设置窗体布局
f.setBounds(400, 300, 400, 300);
f.setLayout(new FlowLayout());
//3.定义组件,并添加到容器中
Button bt = new Button("我是一个按键");
f.add(bt);
//4.设置窗体可见
f.setVisible(true);
//5.添加监听事件
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.out.println("关闭窗口");
System.exit(0);
}
public void windowActivated(WindowEvent e){
System.out.println("窗口激活");
}
});
五、事件监听机制
|--监听机制的元素
• 事件源(组件)
• 事件(Event)
• 监听器(Listener)
• 事件处理(引发事件后处理方式)
|--处理流程
|--监听的分类
Frame f = new Frame(); //监听窗口关闭
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
Button bt = new Button();
bt.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
System.out.println("我被点击了…………");
}
});
<pre name="code" class="java"> Button bt = new Button();
//鼠标操作事件
bt.addMouseListener(new MouseAdapter(){
private int count;
private int js;
//鼠标进入按键的监听
public void mouseEntered(MouseEvent e){
System.out.println("进入……"+(js++));
}
//鼠标点击两次的监听
public void mouseClicked(MouseEvent e){
if(e.getClickCount()==2)
System.out.println("双击………………"+(count++)+"次");
}
});
//键盘操作事件
Button bt = new Button();
bt.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
System.out.println(e.getKeyChar()+"…………"+e.getKeyCode());
}
});
bt.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER)
System.exit(0);
}
});
六、记事本界面练习
package guiTest;
/**
*记事本练习:
*模板系统自带记事本的功能,此事项中是GUI+IO的知识点,其中创建步骤:
* GUI:
* 1.创建Frame窗体
2.对窗体进行基本设置
比如大小、位置、布局
3.定义组件,并将组件通过窗体的add方法添加到窗体中
4.添加事件监听(addActionListener)
5.让窗体显示,通过setVisible(true)
* IO :
* 1.明确源和目的。
2,操作的数据是否是纯文本。
3,当体系明确后,再明确要使用哪个具体的对象。
*/
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
public class NoteDemo {
//建立组件和File类对象
private Frame f;
private MenuBar bar;
private Menu fileMenu;
private MenuItem closeItem,openItem,saveItem;
private TextArea ta;
private FileDialog saveDialog,openDialog;
private File file;
//构造函数
NoteDemo(){
//对象一建立就对界面进行初始化
init();
}
//界面的初始化函数
public void init(){
//1.创建窗体及组件
f = new Frame("记事本——yeyt");
ta= new TextArea();
bar =new MenuBar();
fileMenu = new Menu("文件");
openItem = new MenuItem("打开");
closeItem = new MenuItem("退出");
saveItem = new MenuItem("保存");
saveDialog = new FileDialog(f,"保存——yeyt",FileDialog.SAVE); //保存对话框
openDialog = new FileDialog(f,"打开——yeyt",FileDialog.LOAD); //打开对话框
//2.设置布局
f.setBounds(650, 150, 650,500 );
//3.添加组件
f.setMenuBar(bar);
f.add(ta);
bar.add(fileMenu);
fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(closeItem);
//4.调用函数,添加所有的监听事件
myEvent();
//5.设置可见
f.setVisible(true);
}
//建立监听函数myEvent(),调用此函数将完成各类事件的监听
public void myEvent(){
//监听窗口关闭
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
//退出按钮监听
closeItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
//打开openItem的监听
openItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//设置对话框可见
openDialog.setVisible(true);
//通过对话框获取文件的路径和文件名
String dirPath = openDialog.getDirectory();
String fileName=openDialog.getFile();
//System.out.println(dirPath+fileName);
//建立File对象与文件关联
file = new File(dirPath,fileName);
//如果文件不存在,则返回GUI界面
if(!file.exists())
return;
//读取文件前,清空文本域
ta.setText("");
try {
//对文件进行读取
BufferedReader br = new BufferedReader(new FileReader(file));
String line = null;
while((line=br.readLine())!=null){
ta.append(line+"\r\n");
}
br.close();//关流
} catch (Exception e2) {
throw new RuntimeException("读取失败");//抛出运行异常
}
}
});
//保存事件监听
saveItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//保存前判断文件是否存在,存在时,不打开对话框
if(file == null){
saveDialog.setVisible(true);//设置窗体可见
//获取对话框中的文件路径和文件名
String dirPath = saveDialog.getDirectory();
String fileName=saveDialog.getFile();
//file与文件名关联
file = new File(dirPath,fileName);
//如果文件已存在,则返回,什么也不做
if(!file.exists())
return;
}
//System.out.println(dirPath+fileName);
try {
//流的写稿操作
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
String text = ta.getText();
bw.write(text);
bw.close();
} catch (Exception e2) {
throw new RuntimeException("读取失败");
}
}
});
}
public static void main(String[] args) {
//建立对象运行定义的功能
new NoteDemo();
}
}