GUI知识梳理
---------------------------------------------------------------------------------------------------------------------------------------------
1、创建图形化界面基本步奏
1、创建 frame2、对frame 进行基本的设计,大小,初始位置 ,布局3、定义组件,按钮,文本框,文本区域等4、窗体add 组件5、显示窗体
2、时间监听机制
1、事件源 --awt、swing包里的图形界面组合。2、事件--各组件特有事件,包括鼠标、键盘动作的共性事件3、监听器 -- 可以将触发某一事件的一个或多个动作封装到监听器中4、事件处理--程序主要做的事情
3、Adapter 适配器。为了创建对象
很多事件监听器都有适配器Actionlistener 没有适配器。
4、事件方法名规律
1、add后面跟的是组件名,结尾是Listener2、 new 的是组件名开头
3、方法名 也是组件名开头 ,4、最后事件也是组件名开头。5、最关键的就是,谁的事件,对应事件处理怎么写
-------------
【1】
java.Awt: 抽象窗口工具包(跨平台性稍差)
javax.Swing: 在AWT的基础上,建立的一套图形界面系统(彻底跨平台。)
--------------------------
创建图形化界面:
1、创建 Frame 窗体
2、对窗体进行基本设置
【1】
java.Awt: 抽象窗口工具包(跨平台性稍差)
javax.Swing: 在AWT的基础上,建立的一套图形界面系统(彻底跨平台。)
--------------------------
创建图形化界面:
1、创建 Frame 窗体
2、对窗体进行基本设置
比如大小,位置,布局。
3、定义组件
4、将组件通过窗体的add 方法添加的窗体中
5、 让窗体显示、通过 vsetVisible(true)
--------------------------
事件监听机制的特点:
1、事件源
2、事件
3、监听器
4、事件处理
事件源 :就是Awt 或者是 Swing 包中的那些图形界面组件
事件 :每一个事件源都有自己特有的对应时间和共性事件
监听器 :将可以触发某一个事件的动作(不止一个动作),都已经封装到了监听器中。
以上三者,在Java中都已经定义好了,
直接获取其对象来用就可以了
我们要做的事情是,就是对残生的动作进行处理。
4、将组件通过窗体的add 方法添加的窗体中
5、 让窗体显示、通过 vsetVisible(true)
--------------------------
事件监听机制的特点:
1、事件源
2、事件
3、监听器
4、事件处理
事件源 :就是Awt 或者是 Swing 包中的那些图形界面组件
事件 :每一个事件源都有自己特有的对应时间和共性事件
监听器 :将可以触发某一个事件的动作(不止一个动作),都已经封装到了监听器中。
以上三者,在Java中都已经定义好了,
直接获取其对象来用就可以了
我们要做的事情是,就是对残生的动作进行处理。
class $1AwtDemo
{
public static void main(String[] args)
{
Frame f = new Frame("my awt");
//f.setSize(380,297);//设置高宽
//f.setLocation(491,236);//设置坐标
f.setBounds(491,236,380,297);//包含上面2个方法的 前面是坐标,后面是高宽
f.setLayout(new FlowLayout());//设定按钮布局样式
Button b = new Button("按我呀按我呀");//声明按钮
f.add(b);//加入该按钮
//f.addWindowListener(new MyWin());//添加事件 【a】
//用匿名内部类实现:
// 事件
//发现规律 1、add后面跟的是组件名,结尾是Listener 2、 new 的是组件名开头
//3、方法名 也是组件名开头 ,4、最后事件也是组件名开头。
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){// 【只有这个常用。】
System.exit(0);
}
public void windowActivated(WindowEvent e){
System.out.println("我活了。");//当该窗口为最顶端的时候会打印。
}
public void windowOpened(WindowEvent e){
System.out.println("我被打开了。");//只在打开时候执行
}
});
f.setVisible(true);//显示窗口
}
}
【2】
class Mywin implements WindowListener
{
// 覆盖7个方法,可是我们只用到了关闭的动作
// 其他的动作都没有用到,可是却必须复写。
}
/ /因为 WindowListener 的子类 WindowAadapter已经实现了 WindowListener 接口
//并覆盖了其中所有的方法,那么我们只要覆盖继承自 windowAdapter 覆盖需要的方法即可
class MyWin extends WindowAdapter //对应 【a】 使用内部类更优。
{
public void windowClosing(WindowEvent e){
System.exit(6000);
//System.out.println("sss"+e.toString());
}
}
//发现规律 1、add后面跟的是组件名,结尾是Listener 2、 new 的是组件名开头
//3、方法名 也是组件名开头 ,4、最后事件也是组件名开头。
【3】
public void myevent(){
//让按钮具备退出程序功能
//那么该选择那个监听器呢,上面那个addWindowListener 是窗口监听,明显不阔仪的
//通过关闭窗口示例了解到,想要知道那个组件具备什么样的 特有监听器
//需要查看该组件 对象的功能
//发现:查阅 Buttion 发现按钮支持一个特有的监听 addActionListener
but.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvente)
{
System.exit(0);
}
});
}
public void myevent(){
//点击鼠标事件,和点击按钮关闭,谁会先执行呢?试试
//证明:鼠标事件优先于按钮事件
b.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e){
System.out.println("按钮 关闭事件");
}
});
//2鼠标事件
b.addMouseListener(new MouseAdapter()
{
public void mouseEntered(MouseEvent e){
System.out.println("鼠标进入组件次数:"+in++);
}
public voidmouseExited(MouseEvent e){
//System.out.println(out++);
}
public void mouseClickedMouseEvent e){
if(e.getClickCount()==2)
System.out.println("鼠标点击松开事件111111111111");
}
public void mousePressed(MouseEvent e){
//System.out.println("222222");
}
public void mouseReleased(MouseEvent e){
//sop("111111");
}
});
//3键盘监听-事件
b.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
sop(KeyEvent.getKeyText(e.getKeyCode())+">>>"+e.getKeyCode());
if(e.getKeyCode()==KeyEvent.VK_ESCAPE){//ESC 退出。
//System.exit(0);//演示时, 打印看效果
sop("Esc。。。");
}
if(e.isControlDown()&& e.getKeyCode()==KeyEvent.VK_ENTER){
sop("CTRL+ENTER........");
}
}
});
//4、输入框世间
tf.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e){
int code = e.getKeyCode();
if(!(code>=KeyEvent.VK_0&& code<=KeyEvent.VK_9)){
sop("非法字符:"+e.getKeyChar());
e.consume();//该方法可以屏蔽非法字符的录入。
}
}
});
}
【4】
[模拟一个电脑盘符查看文件的界面以及功能]
通常把初始化定义属性在一个类中
把事件定义在一个方法中。
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
class $4MyWindowDemo
{
public static void main(String[] args)
{
new myWindow();
}
}
class myWindow
{
private Frame f ;
private Button b ;
private TextField tf;
private TextArea ta;
//
private Dialog dia;
private Label lab;
private Button okbut;
myWindow(){
init();
}
public void init(){
f = new Frame("查询功能");
f.setBounds(400,200,550,400);
f.setLayout(new FlowLayout());
b = new Button("转 到");
tf = new TextField(60);
ta = new TextArea(20,70);
//
dia = new Dialog(f,"系统提示!",true);
dia.setBounds(500,300,250,100);
dia.setLayout(new FlowLayout());
lab = new Label();
okbut = new Button("确定");
dia.add(lab);
dia.add(okbut);
//
f.add(tf);
f.add(b);
f.add(ta);
myevent();
f.setVisible(true);
}
public void myevent(){
//输入框-监听--回车达到按钮事件
tf.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e){
if(e.getKeyCode()== KeyEvent.VK_ENTER){
showDir();
}
}
});
//错误提示框-监听--隐藏
dia.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e){
dia.setVisible(false);
}
});
//错误提示框 按钮-监听--隐藏
okbut.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e){
dia.setVisible(false);
}
});
//错误提示框 按钮-监听--隐藏 2
okbut.addKeyListener(new KeyAdapter()
{
//没写完
public void keyPressed(KeyEvent e){
dia.setVisible(false);
}
});
//窗口监听---关闭事件
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
//按钮监听 //事件
b.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e){
showDir();
}
});
}
// 封装该功能实在复用--查找功能
private void showDir(){
String dirPath = tf.getText();
File dir = new File(dirPath);
if(dir.exists() && dir.isDirectory()){
String [] names = dir.list();
for(String name : names ){
ta.append(name+"\r\n");
}
}else{
String info = "你输入的路径:"+dirPath+" 是错误的!";
lab.setText(info);
dia.setVisible(true);
}
}//
public void sop(Object obj){
System.out.println(obj);
}
}
【5】
【模拟记事本】
通过上诉学习,自己模拟了一下下记事本。。没有写完。
package com.awt;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.text.*;
import java.util.*;
public class myJishiben {
private Frame f;
private MenuBarbar;//工具兰
private Menu fileMenu,editorMenu,formatMenu,seekMenu,helpMenu;//文件 编辑 格式 查看 帮助
private MenuItem newMi,openMi,saveMi,lsaveMi,yemMi,printMi,closMi;//文件: :新键 打开 保存 另存为 页面设置--打印 退出
private MenuItem rutrunMi,jianqMi,copyMi,toCopyMi,deleteMi,seleteMi,seleNextMi,tiHuanMi,tiHNextMi,zDaoMi,allMi,timeMi;
//编辑:: 撤销 复制 粘贴 删除 查找 查找下一个 替换 转到 全选 时间/日期
private MenuItem huanghMi,zitiMi; // 格式:: 自动换行 字体
private MenuItem seekMi; // 查看:: 状态栏
private MenuItem seeHelpMi,aboutJSBmi; // 帮助 :: 查看帮助文档 关于记事本
private TextArea txta;
private FileDialog openDa,saveDa,lsaveDi,yemianDa,printDa;//文件对话框: :
private File file;
myJishiben(){
init();
}
//初始化--主窗口
public void init(){
f = new Frame("My记事本");
f.setBounds(180,120,700,540);
txta = new TextArea();
f.add(txta);
//加入--菜单
init_bar();
f.setMenuBar(bar);
openDa =new FileDialog(f,"打开",FileDialog.LOAD);
saveDa =new FileDialog(f,"保存",FileDialog.SAVE);
myevent();
f.setVisible(true);
}
// --- 【【【--事--件---】】】---监听--
public void myevent(){
timeMi.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
Date date = new Date();
SimpleDateFormat f = new SimpleDateFormat("yyyy年MM月dd HH:mm:ss");
String time = f.format(date);
String text = time+"\r\n"+txta.getText();
txta.setText("");
txta.append(text);
}
});
// --监听--主菜单--打开 - 按钮 ---打开电脑中文件
// 需要使用到Dialog 对话框
// 1、接收路径--文件名 2、判断是否 为空 3、封装为对象
// 4、try,读取目标文件内容----循环写入到 txta 当中
// 注意,读取前清空 txta
openMi.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
openDa.setVisible(true);
String dirPath = openDa.getDirectory();
String fileName = openDa.getFile();
if(fileName == null || dirPath == null)
return;
txta.setText("");
file = new File(dirPath+fileName);
try{
BufferedReader bufr = new BufferedReader(new FileReader(file));
String line = null;
while((line = bufr.readLine()) != null){
txta.append(line+File.separator);//跨平台换行方法
}
bufr.close();
}
catch(IOException ioe){
throw new RuntimeException(" da kai shi bai ");
}
}
});
// --监听--主菜单--保存- 按钮 ---保存记事本内容到电脑
// 需要使用到Dialog 对话框
// 1、同样获取路径--文件名 2、同样判断是否为口 3、判断是否已有该文件
saveMi.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
showDir();
}
});
// --监听--主菜单--另存为 - 按钮 ---已有文件再次存放
// 只需要再次调用 --写好的---保存--代码即可
lsaveMi.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
showDir();
}
});
// --监听--打印页面--模拟出弹框
// 没有找到弹出该功能界面的 关键字段
yemMi.addActionListener(new ActionListener(){
private Frame yemF;
private TextArea yemtxt;
private Button okbut;
public void actionPerformed(ActionEvent e){
init_yemMI();
}
public void init_yemMI(){
yemF = new Frame("模拟页面设置");
yemF.setBounds(350,300,450,200);
yemF.setLayout(new FlowLayout());
yemtxt = new TextArea(7,60);
okbut = new Button("确定");
String text="刚刚在地铁上,一个妹纸突然大叫:“盯住我胸看什么看啊,流氓!”\r\n\r\n"+
"然后所有的人望过来,一男子满头大汗,一脸尴尬,被他朋友拉开。\r\n\r\n"+
"只听他朋友说:“你盯她做什么啊?又不漂亮,又不丰满!”\r\n\r\n"+
"那男的委屈的说,很少见到穿那么低胸都没有一丁点沟的,我想在仔细找找\r\n\r\n";
yemtxt.setText(text);;
yemF.add(yemtxt);
yemF.add(okbut);
printEvent();
yemF.setVisible(true);
}
public void printEvent(){
yemF.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
yemF.setVisible(false);
}
});
okbut.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
yemF.setVisible(false);
}
});
}
});
// --监听--打印
printMi.addActionListener(new ActionListener(){
private Frame prinF;
private TextArea printxt;
private Button okbut;
public void actionPerformed(ActionEvent e){
init_yemMI();
}
public void init_yemMI(){
prinF = new Frame("模拟打印页面");
prinF.setBounds(350,300,450,200);
prinF.setLayout(new FlowLayout());
printxt = new TextArea(7,60);
okbut = new Button("确定");
String text="有一女盆友,忒二。 \r\n\r\n"+
"那天她上我扣扣,非要说我给她的备注太难听,要求我改了! \r\n\r\n"+
"我想了想,写上“二货媳妇”。 \r\n\r\n"+
"她看了看,严肃的问我:“你是不是还有个“一货媳妇”?”";
printxt.setText(text);;
prinF.add(printxt);
prinF.add(okbut);
printEvent();
prinF.setVisible(true);
}
public void printEvent(){
prinF.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
prinF.setVisible(false);
}
});
okbut.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
prinF.setVisible(false);
}
});
}
});
// --监听--主窗体--X- 按钮 ---关闭事件
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
// --监听--主菜单--退出 - 按钮 ---关闭事件
closMi.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
// --监听--主菜单--新建 - 按钮 ---新建记事本事件
// 新建功能有待优化,
// 譬如名字++ :新建,新建(1)。。。
newMi.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
new myJishiben();
f.setVisible(false);
}
});
}
// 【提取的公共方法,方便复用】
// --监听--主菜单--保存- 按钮 --
// 需要使用到Dialog 对话框
// 0、判断是否有该文件 没有:1、同样获取路径--文件名 2、同样判断是否为空 3、封装为对象
// 有:跳过123
// 4、创建一个写入流,获取 txta 字符并转为字符串, 写入,
private void showDir(){
if(file == null){
saveDa.setVisible(true);
String dirPath =saveDa.getDirectory();
String fileName = saveDa.getFile();
if(dirPath == null || fileName == null)
return;
file = new File(dirPath,fileName);
}
try{
BufferedWriter bufw = new BufferedWriter(new FileWriter(file));//IO
String text = txta.getText();
bufw.write(text);
bufw.flush();
bufw.close();
}
catch(IOException ioex){
throw new RuntimeException("bao cun shi bai ");
}
}
// 初始化 -----主菜单
// 1、主菜单-横-样式不会修改
// 2、纵菜单- 有个栏 不知道叫什么,其中格式可以打勾那个, 不会做
// 3、缺乏快捷键设定
private void init_bar(){
bar = new MenuBar();
//加入--文件---纵菜
init_fileMenu();
bar.add(fileMenu);
//加入--编辑---纵菜
init_editorMenu();
bar.add(editorMenu);
//加入--格式---纵菜
init_formatMenu();
bar.add(formatMenu);
//加入--查看---纵菜
init_seekMenu();
bar.add(seekMenu);
//加入--帮助---纵菜
init_helpMenu();
bar.add(helpMenu);
}
// 初始化 --fileMenu-文件--纵菜单
private void init_fileMenu(){
fileMenu = new Menu("文件");
newMi = new MenuItem("新键");
openMi = new MenuItem("打开");
saveMi = new MenuItem("保存");
lsaveMi = new MenuItem("另存为");
yemMi = new MenuItem("页面设置");
printMi = new MenuItem("打印");
closMi = new MenuItem("退出");
fileMenu.add(newMi);
fileMenu.add(openMi);
fileMenu.add(saveMi);
fileMenu.add(lsaveMi);
fileMenu.addSeparator();
fileMenu.add(yemMi);
fileMenu.add(printMi);
fileMenu.addSeparator();
fileMenu.add(closMi);
}
// 初始化 --editorMenu-编辑--纵菜单
private void init_editorMenu(){
editorMenu = new Menu("编辑");
rutrunMi = new MenuItem("撤销");
jianqMi =new MenuItem("剪切");
copyMi = new MenuItem("复制");
toCopyMi = new MenuItem("粘贴");
deleteMi = new MenuItem("删除");
seleteMi = new MenuItem("查找");
seleNextMi = new MenuItem("查找下一个");
tiHuanMi = new MenuItem("替换");
zDaoMi = new MenuItem("转到");
allMi = new MenuItem("全选");
timeMi = new MenuItem("时间/日期");
editorMenu.add(rutrunMi);
editorMenu.addSeparator();
editorMenu.add(jianqMi);
editorMenu.add(copyMi);
editorMenu.add(toCopyMi);
editorMenu.add(deleteMi);
editorMenu.addSeparator();
editorMenu.add(seleteMi);
editorMenu.add(seleNextMi);
editorMenu.add(tiHuanMi);
editorMenu.add(zDaoMi);
editorMenu.addSeparator();
editorMenu.add(allMi);
editorMenu.add(timeMi);
}
//初始化 --formatMenu-格式--纵菜单
private void init_formatMenu(){
formatMenu = new Menu("格式");
huanghMi = new MenuItem("自动换行");
zitiMi = new MenuItem("字体");
formatMenu.add(huanghMi);
formatMenu.add(zitiMi);
}
// 初始化 --seekMenu-查看--纵菜单
private void init_seekMenu(){
seekMenu =new Menu("查看");
seekMi = new MenuItem("状态栏");
seekMenu.add(seekMi);
}
// 初始化 --helpMenu-查看--纵菜单
private void init_helpMenu(){
helpMenu =new Menu("查看");
seeHelpMi = new MenuItem("查看帮助文档");
aboutJSBmi = new MenuItem("关于记事本");
helpMenu.add(seeHelpMi);
helpMenu.addSeparator();
helpMenu.add(aboutJSBmi);
}
}
看的出来, awt 还是非常的麻烦,期待Swing啊
---------------------------------------------------------------------------------------------------------------------------------------------
----------
android培训、
java培训、期待与您交流!----------
----------------------------------------------