Java面向对象 GUI 补录

知识概要:(1)GUI和CLI

                  (2)AWT和SWING

                  (3)AWT继承关系图

                  (4)布局管理器

                  (5)创建一个简单的窗体

                  (6)事件监听机制的构成

                  (7)熟悉键盘事件、鼠标事件、按钮事件

                  (8)AWT练习:查找指定目录

                  (9)AWT之Menu

                   (10)记事本程序实例

(1)

GUI(图形用户界面)

  GUI

     • Graphical User Interface(图形用户接口)。

     • 用图形的方式,来显示计算机操作的界面,这样更方便更直

        观。

  CLI

     •  Command line User Interface (命令行用户接口)

     •  就是常见的Dos命令行操作。

     •  需要记忆一些常用的命令,操作不直观。

  举例:

     • 比如:创建文件夹,或者删除文件夹等

  Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中。

(2)



Awt和Swing

Awt与Swing 

      • java.Awt :Abstract Window ToolKit (抽象窗口

        工具包),需要调用本地系统方法实现功能。属

        重量级控件。

      • javax.Swing :在AWT的基础上,建立的一套图

        形界面系统,其中提供了更多的组件,而且完全 

        由Java实现。增强了移植性,属轻量级控件。

(3)

(4)

(5)创建一个简单的窗体

<span style="font-size:18px;">

import java.awt.*;
import java.awt.event.*; /*
创建图形化界面:
1,创建frame窗体。
2,对窗体进行基本设置。
比如大小,位置,布局。
3,定义组件。
4,将组件通过窗体的add方法添加到窗体中。
5,让窗体显示,通过setVisible(true) 事件监听机制的特点:
1,事件源。
2,事件。
3,监听器。
4,事件处理。 事件源:就是awt包或者swing包中的那些图形界面组件。 事件:每一个事件源都有自己特有的对应事件和共性事件。 监听器:将可以触发某一个事件的动作(不只一个动作)都已经封装到了监听器中。 以上三者,在java中都已经定义好了。
直接获取其对象来用就可以了。 我们要做的事情是,就是对产生的动作进行处理。 */
class AwtDemo
{
public static void main(String[] args)
{
Frame f = new Frame("my awt");
f.setSize(500,400);
f.setLocation(300,200);
f.setLayout(new FlowLayout()); Button b = new Button("我是一个按钮"); f.add(b); f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.out.println("我关");
System.exit(0);
}
public void windowActivated(WindowEvent e)
{
System.out.println("我活了。"); } public void windowOpened(WindowEvent e)
{
System.out.println("我被打开了,hahahhahah");
} }); f.setVisible(true); //System.out.println("Hello World!");
}
}
/* class MyWin implements WindowListener
{
//覆盖7个方法。可以我只用到了关闭的动作。
//其他动作都没有用到,可是却必须复写。 } //因为WindowListener的子类WindowAdapter已经实现了WindowListener接口。
//并覆盖了其中的所有方法。那么我只要继承自Windowadapter覆盖我需要的方法即可。
class MyWin extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
//System.out.println("window closing---"+e.toString());
System.exit(0);
}
} */ //练习,定义一个窗体,在窗体中添加一个按钮具备关闭该窗体的功能。
</span>

事件监听机制组成

事件源(组件)

 事件(Event)

 监听器(Listener)

事件处理(引发事件后处理方式)

事件监听机制

确定事件源(容器或组件)

 通过事件源对象的addXXXListener()方法将侦听器注册到该

     事件源上。 

    该方法中接收XXXListener的子类对象,或者XXXListener的 

    子类XXXAdapter的子类对象。 

    一般用匿名内部类来表示。 

    在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量

    接收。 

    事件触发后会把事件打包成对象传递给该变量。(其中包括

    事件源对象。通过getSource()或者,getComponent()获取。)

import java.awt.*;
import java.awt.event.*;
class FrameDemo
{
//定义图形中所需组件的引用
private Frame f ;
private Button but; FrameDemo()
{
init();
} public void init()
{
f = new Frame("窗口");
//对frame进行基本设置
f.setBounds(300,100,600,500); f.setLayout(new FlowLayout()); but = new Button("my button"); //将组件添加到fram中
f.add(but);
//添加窗口的事件
myEvent();
//添加按钮事件
buttonEvent(); //显示窗口
f.setVisible(true); }
private void buttonEvent()
{
but.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("退出,按钮干的事情");
System.exit(0);
}
});
}
private void myEvent()
{
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
//让按钮具备退出程序的功能
/*
按钮就是事件源
那么选择哪个监听器呢?
通过关闭窗体示例了解到。想要知道哪个组件具备什么样的监听器
*/
});
}
public static void main(String[] args)
{
new FrameDemo();
} }

(7)鼠标、键盘、按钮事件的了解

import java.awt.*;
import java.awt.event.*; class MouseAndKeyEvent
{
private Frame f;
private Button but;
private TextField tf; MouseAndKeyEvent()
{
init();
} public void init()
{
f = new Frame("my frame"); f.setBounds(300,100,600,500);
f.setLayout(new FlowLayout()); tf = new TextField(20); but = new Button("my button"); 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);
}
}); 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(code+".....是非法的");
e.consume();
} }
}); //给But添加一个键盘监听。
but.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER)
//System.exit(0);
System.out.println("ctrl+enter is run"); //System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"...."+e.getKeyCode());
}
}); /*
but.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("action ok");
}
});
*/ /* but.addMouseListener(new MouseAdapter()
{
private int count = 1;
private int clickCount = 1;
public void mouseEntered(MouseEvent e)
{
System.out.println("鼠标进入到该组件"+count++);
}
public void mouseClicked(MouseEvent e)
{
if(e.getClickCount()==2)
System.out.println("双击动作"+clickCount++);
}
});
*/
} public static void main(String[] args)
{
new MouseAndKeyEvent();
}
}

(8)AWT练习

import java.awt.*;
import java.awt.event.*;
import java.io.*;
class MyWindowDemo
{
private Frame f;
private TextField tf;
private Button but;
private TextArea ta; private Dialog d;
private Label lab;
private Button okBut; MyWindowDemo()
{
init();
}
public void init()
{
f = new Frame("my window");
f.setBounds(300,100,600,500);
f.setLayout(new FlowLayout()); tf = new TextField(60); but = new Button("转到"); ta = new TextArea(25,70); d = new Dialog(f,"提示信息-self",true);
d.setBounds(400,200,240,150);
d.setLayout(new FlowLayout());
lab = new Label();
okBut = new Button("确定"); d.add(lab);
d.add(okBut); f.add(tf);
f.add(but);
f.add(ta); myEvent();
f.setVisible(true);
}
private void myEvent()
{ okBut.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
d.setVisible(false);
}
});
d.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
d.setVisible(false);
}
}); tf.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode()==KeyEvent.VK_ENTER)
showDir();
}
}); but.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
showDir(); }
}); f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
} private void showDir()
{
String dirPath = tf.getText(); File dir = new File(dirPath); if(dir.exists() && dir.isDirectory())
{
ta.setText("");
String[] names = dir.list();
for(String name : names)
{
ta.append(name+"\r\n");
}
}
else
{
String info = "您输入的信息:"+dirPath+"是错误的。请重输";
lab.setText(info);
d.setVisible(true);
}
} public static void main(String[] args)
{
new MyWindowDemo();
}
}

(9)

import java.awt.*;
import java.awt.event.*; class MyMenuDemo
{ private Frame f;
private MenuBar mb;
private Menu m,subMenu;
private MenuItem closeItem,subItem; MyMenuDemo()
{
init();
}
public void init()
{
f = new Frame("my window");
f.setBounds(300,100,500,600);
f.setLayout(new FlowLayout()); mb = new MenuBar(); m = new Menu("文件"); subMenu = new Menu("子菜单"); subItem = new MenuItem("子条目");
closeItem = new MenuItem("退出"); subMenu.add(subItem); m.add(subMenu);
m.add(closeItem);
mb.add(m); f.setMenuBar(mb); myEvent(); f.setVisible(true); }
private void myEvent()
{ 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 MyMenuDemo();
}
}

(10)简单记事本程序的实现

package mymenu;
import java.awt.*;
import java.awt.event.*;
import java.io.*; public class MyMenuTest
{ private Frame f;
private MenuBar bar;
private TextArea ta;
private Menu fileMenu;
private MenuItem openItem,saveItem,closeItem; private FileDialog openDia,saveDia; private File file;
MyMenuTest()
{
init();
}
public void init()
{
f = new Frame("my window");
f.setBounds(300,100,650,600); bar = new MenuBar(); ta = new TextArea(); fileMenu = new Menu("文件"); openItem = new MenuItem("打开");
saveItem = new MenuItem("保存");
closeItem = new MenuItem("退出"); fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(closeItem);
bar.add(fileMenu); f.setMenuBar(bar); openDia = new FileDialog(f,"我要打开",FileDialog.LOAD);
saveDia = new FileDialog(f,"我要保存",FileDialog.SAVE); f.add(ta);
myEvent(); f.setVisible(true); }
private void myEvent()
{ saveItem.addActionListener(new ActionListener()
{ public void actionPerformed(ActionEvent e)
{
if(file==null)
{
saveDia.setVisible(true); String dirPath = saveDia.getDirectory();
String fileName = saveDia.getFile();
if(dirPath==null || fileName==null)
return ;
file = new File(dirPath,fileName);
} try
{
BufferedWriter bufw = new BufferedWriter(new FileWriter(file)); String text = ta.getText(); bufw.write(text);
//bufw.flush();
bufw.close();
}
catch (IOException ex)
{
throw new RuntimeException();
} }
}); openItem.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
openDia.setVisible(true);
String dirPath = openDia.getDirectory();
String fileName = openDia.getFile();
// System.out.println(dirPath+"..."+fileName);
if(dirPath==null || fileName==null)
return ; ta.setText("");
file = new File(dirPath,fileName); try
{
BufferedReader bufr = new BufferedReader(new FileReader(file)); String line = null; while((line=bufr.readLine())!=null)
{
ta.append(line+"\r\n");
} bufr.close();
}
catch (IOException ex)
{
throw new RuntimeException("读取失败");
} }
}); 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 MyMenuTest();
}
} /*
如何制作可以双击执行的jar包呢?
1,将多个类封装到了一个包(package)中。
2,定义一个jar包的配置信息。
定义一个文件a.txt 。文件内容内容为:
Main-Class:(空格)包名.类名(回车)
3,打jar包。
jar -cvfm my.jar a.txt 包名
4,通过winrar程序进行验证,查看该jar的配置文件中是否有自定义的配置信息。 5,通过工具--文件夹选项--文件类型--jar类型文件,通过高级,定义该jar类型文件的打开动作的关联程序。
jdk\bin\javaw.exe -jar 6,双击试试!。哦了。 */

Java面向对象 GUI 补录的更多相关文章

  1. 20145213《Java程序设计》实验二Java面向对象程序设计实验报告

    20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...

  2. Java面向对象的多态

    Java中多态的概念是面向对象中除封装和继承外非常重要的知识点,也是Java面向对象三大特性最后一个特性 多态其实就是指对象存在的多种形态,多态分为引用多态和方法多态 引用多态的含义就是:父类的引用可 ...

  3. Java面向对象 正则表达式

     Java面向对象 正则表达式 知识概要:                (1)正则表达式的特点 (2)正则表达的匹配 (3)正则表达式的切割,替换,获取 (4)正则表达式的练习 正则表达式:符合 ...

  4. 实验二 Java面向对象程序设计 20175301李锦然实验报告

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

  5. Java面向对象程序设计

    北京电子科技学院(BESTI)                                                                                 实    ...

  6. 20155212 实验二 Java面向对象程序设计

    20155212 实验二 Java面向对象程序设计 单元测试 三种代码 用编程去解决问题,必须学会写三种码: 伪代码 产品代码 测试代码 例: MyUtil 类解决一个百分制成绩转成"优.良 ...

  7. 20155319 实验二 Java面向对象程序设计

    20155319 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 (一) ...

  8. 2016-2017-2 20155339 《Java面向对象程序设计》实验三敏捷开发与XP实践实验报告

    2016-2017-2 20155339 <Java面向对象程序设计>实验三敏捷开发与XP实践实验报告 实验内容 XP基础 XP核心实践 相关工具 实验内容 一.在IDEA中使用工具(Co ...

  9. Java面向对象——相关基本定义

    Java面向对象——相关基本定义 摘要:本文简单介绍了面向对象的编程方式,以及与之有关的一些基本定义. 面向对象 什么是面向对象 面向对象编程是一种对现实世界建立计算机模型的一种编程方法.简称OOP( ...

随机推荐

  1. MySQL (六)--外键、联合查询、子查询

    1 外键 外键:foreign key,外面的键(键不在自己表中),如果一张表中有一个字段(非主键)指向另外一张表的主键,那么将该字段称为外键. 1.1 增加外键 外键可以在创建表的时候或创建表之后增 ...

  2. 团队作业1 团队展示&选题

    团队展示&选题 Coding项目地址:https://git.coding.net/wjunren/running.git 一.团队展示 1.队名:Runing Guys 2.队员: 组长:骆 ...

  3. 201521123069 《Java程序设计》 第4周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. (1)文档注释(类注释.方法注释.属性注释.通用注释.) (2)多态性.instanceof ...

  4. 201521123114 《Java程序设计》第3周学习总结

    1. 本章学习总结 2. 书面作业 Q1.代码阅读 以上代码可否编译通过?哪里会出错?为什么?尝试改正? 如果创建3个Test1对象,有内存中有几个i,几个j?请分析原因? 不能编译通过,Test1g ...

  5. Java程序设计——学生基本信息管理系统(团队+个人)

    学生信息管理系统(From:单身贵族) 团队部分 一.团队介绍("单身贵族"): 吴剑通[组长]:201521123056,唯一队员,网络1512班,团支书 二.项目git地址 三 ...

  6. Java程序设计——学生信息系统

    1.团队课程设计博客链接 http://www.cnblogs.com/YYYYYYY/p/7065278.html 2.个人负责模块说明 2.1 管理界面 2.2 清空:单击清空键,可清空数据栏 2 ...

  7. 《MySQL必知必会》[03] 表数据的增删改

    1.增:插入数据 INSERT关键字可以插入新的行到数据库表中: 插入完整的行 插入行的一部分 插入多行 插入某些查询的结果 基本的INSERT语句是: INSERT INTO R(A1, A2, . ...

  8. JUDE-UML工具软件介绍

    JUDE社区版(不考虑破-解). 现在Jude改名为Astah了.JUDE已停止发展,Astah是它的替代品.Jude有3个版: Professional版, Community版(免费),Share ...

  9. 云计算之路-阿里云上:访问阿里云CDN上的图片,自动跳转到百度首页

    昨天有用户向我们反馈一篇博文(一条语句导致CPU持续100%)中的部分图片不能显示,我们的图片访问用的是阿里云CDN,原以为是某个CDN节点不稳定的问题,但在排查时发现这些图片不能显示竟然是因为请求时 ...

  10. JS中基本的一些兼容问题 可能解释的不会太清楚

    做兼容注意: 一如果两个都是属性,用逻辑||做兼容 二如果有一个是方法 用三目运算符做兼容 三多个属性或方法封装函数做兼容 一:谷歌浏览器和火狐浏览器鼠标滚动条兼容 1.document.docume ...