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. System.Globalization.CultureInfo.InvariantCulture 解决不同地域字符串格式不同问题

    同样的DateTime.ToShortDateString()   在不同的地域输出格式不同 如在美国的 日期格式为 :  月-日-年 如在中国的 日期格式为 :  年-月-日 一些时候,这个格式就会 ...

  2. 自制IPsec_vpn综合实验

    实验需求 R1.R2间tunnel建立私网: Vpn网关间配置ipsec实现数据加密: 使用tunnel模式下的ESP包头封装: 使用3des加密算法,md5摘要算法: 设置NAT旁路绕行流量: 利用 ...

  3. 转:Java IO流学习总结

    Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  4. JS学习一

    js中的变量输出   [使用JS的三种方式] 1. 在HTML标签中,直接内嵌JS(并不提倡使用): <button onclick="alert('你真点啊!')"> ...

  5. JAVA课程设计+五子棋游戏

    1. 团队课程设计博客链接 http://www.cnblogs.com/yzb123/p/7063424.html 2. 个人负责模块或任务说明 1.在同伴构建好初始框图的情况下,编写一个继承JPa ...

  6. 201521123014 《Java程序设计》第14周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 数据库是为了实现一定目的按某种规则组织起来的"数据"的"集合".常见的数 ...

  7. 201521123081《Java程序设计》 第9周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 参考资料:XMIND 2. 书面作业 本次PTA作业题集 异常 常用异常 Q1. 题目5-1 1.1 截图你的提交结 ...

  8. Java :BufferedWriter类和BufferedReader类的构造方法、主要方法

    BufferedWriter 和 BufferedReader 为带有默认缓冲的字符输出输入流,因为有缓冲区所以效率比没有缓冲区的高. 一.BufferedWriter 类 构造方法:buffered ...

  9. 私人订制——属于你自己的Linux

    一.前言 Linux操作系统至1991年10月5日诞生以来,就其开源性和自由性得到了很多技术大牛的青睐,每个Linux爱好者都为其贡献了自己的一份力,不管是在Linux内核还是开源软件等方面,都为我们 ...

  10. Linux下服务器重启

    Linux关闭和重启系统一般使用相同的命令可以实现. 在Linux系统下常用在关机/重启命令有shutdown.halt.reboot和init,但每个命令的内部工作过程是不同的. 1.shutdow ...