Java笔记(八)
GUI:
awt和swing:
java.awt:Abstract Window ToolKit(抽象窗口工具包),需要调用本地系统方法实现功能。属于重量级控件。
javax.swing:在awt的基础上,建立的一套图形界面系统,其中提供了更多的组件,而且完全由Java实现。增强了移植性,属于轻量级控件。
创建图形化界面:
(1)创建Frame窗体;
(2)对窗体进行基本设置。如:大小、位置、布局;
(3)定义组件;
(4)将组件通过窗体的add方法添加到窗体中;
(5)让窗体显示,通过setVisible(true)。
事件监听机制的特点:
(1)事件源
(2)事件
(3)监听器
(4)事件处理
事件源:就是awt包或者swing包中的那些图形界面组件。
事件:每一个事件源都有自己特有的对应事件和共性事件。
监听器:将可以触发某一个事件的动作(不止一个)都封装到了监听器中。
以上三者,在Java中都定义好了,直接获取其对象来用就可以。我们只要对产生的动作进行处理。
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent; public class Demo{
//定义该图形中的所需组件的引用
private Frame f;
private Button b;
Demo(){
init();
}
public void init(){
f = new Frame("my frame"); //对frame进行基本设置
f.setBounds(300, 200, 300, 200);
f.setLayout(new FlowLayout()); b = new Button("按钮"); //将组件添加到frame中
f.add(b); //加载一下窗体上的事件
myEvent(); //显示窗体
f.setVisible(true);
}
private void myEvent(){
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}); //让按钮具备退出程序的功能
//此时按钮就是事件源,想要知道哪个组件具备什么样的特有监听器,需要查看该组件对象的功能,通过查阅button的描述,
//发现按钮支持一个特有监听addActionListener
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
}
public static void main(String[] args){
new Demo();
}
}
鼠标事件:
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent; public class Demo{
private Frame f;
private Button b;
Demo(){
init();
}
public void init(){
f = new Frame("my frame"); f.setBounds(300, 200, 300, 200);
f.setLayout(new FlowLayout()); b = new Button("按钮"); f.add(b); myEvent(); f.setVisible(true);
}
private void myEvent(){
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
b.addMouseListener(new MouseAdapter(){
public void mouseEntered(MouseEvent e){
System.out.println("鼠标进入该组件");
} public void mouseClicked(MouseEvent e){
if(e.getClickCount() == 2)
System.out.println("双击动作");
}
});
}
public static void main(String[] args){
new Demo();
}
}
键盘事件:
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.TextField;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent; public class Demo{
private Frame f;
private Button b;
private TextField tf;
Demo(){
init();
}
public void init(){
f = new Frame("my frame"); f.setBounds(300, 200, 300, 200);
f.setLayout(new FlowLayout()); tf = new TextField(20); b = new Button("按钮"); f.add(b);
f.add(tf); myEvent(); f.setVisible(true);
}
private void myEvent(){
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}); //添加键盘监听
b.addKeyListener(new KeyAdapter(){
// public void keyPressed(KeyEvent e){
// //按“ESC”键,程序退出
// if(e.getKeyCode() == KeyEvent.VK_ESCAPE)
// System.exit(0);
// } //Ctrl+回车键,使程序退出
public void keyPressed(KeyEvent e){
if(e.isControlDown() && e.getKeyCode() == KeyEvent.VK_ENTER)
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();
}
}
});
}
public static void main(String[] args){
new Demo();
}
}
例:列出指定目录内容:
import java.awt.Button;
import java.awt.Dialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File; public class Demo{
private Frame f;
private Button b;
private TextField tf;
private TextArea ta;
private Dialog d;
private Label label;
private Button okBut;
Demo(){
init();
}
public void init(){
f = new Frame("练习");
f.setBounds(300, 100, 600, 500);
f.setLayout(new FlowLayout()); b = new Button("转到"); tf = new TextField(60);
ta = new TextArea(25, 70); //参数为true,表明必须先操作Dialog
d = new Dialog(f, "提示信息-self", true);
d.setBounds(400, 200, 240, 150);
d.setLayout(new FlowLayout());
label = new Label();
okBut = new Button("确定");
d.add(label);
d.add(okBut); f.add(tf);
f.add(b);
f.add(ta); myEvent(); f.setVisible(true);
}
public void myEvent(){
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}); b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
showDir();
}
}); d.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
d.setVisible(false);
}
}); okBut.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
d.setVisible(false);
}
}); tf.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
if(e.getKeyCode() == KeyEvent.VK_ENTER){
showDir();
}
}
});
} private void showDir(){
String dirPath = tf.getText();
File file = new File(dirPath);
if(file.exists() && file.isDirectory()){
tf.setText("");
String[] names = file.list();
for(String name : names){
ta.append(name + "\r\n");
}
}
else{
String info = "您输入的信息: " + dirPath + "是错误的。请重新输入!";
label.setText(info);
d.setVisible(true);
}
} public static void main(String[] args) {
new Demo();
}
}
菜单:
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 Demo{
private Frame f;
private MenuBar mb;
private Menu m, subMenu;
private MenuItem closeItem, subItem; Demo(){
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("子菜单");
closeItem = new MenuItem("退出");
subItem = new MenuItem("子条目"); subMenu.add(subItem);
m.add(subMenu);
m.add(closeItem);
mb.add(m);
f.setMenuBar(mb); myEvent(); f.setVisible(true);
} 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);
}
}); } public static void main(String[] args) {
new Demo();
}
}
如图:

打开保存文件:
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;
import java.io.IOException; public class Demo{
private Frame f;
private Menu fileMenu;
private MenuItem openItem, saveItem, closeItem;
private MenuBar bar;
private FileDialog openD, saveD;
private TextArea ta;
private File file;
Demo(){
init();
} public void init(){
f = new Frame("练习");
f.setBounds(300, 100, 650, 600); bar = new MenuBar();
ta = new TextArea();
openItem = new MenuItem("打开");
saveItem = new MenuItem("保存");
closeItem = new MenuItem("退出");
fileMenu = new Menu("文件"); fileMenu.add(openItem);
fileMenu.add(saveItem);
fileMenu.add(closeItem);
bar.add(fileMenu);
f.setMenuBar(bar);
f.add(ta); openD = new FileDialog(f, "打开文件", FileDialog.LOAD);
saveD = new FileDialog(f, "保存文件", FileDialog.SAVE); myEvent(); f.setVisible(true);
} 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);
}
}); //打开选中的文件,显示在TextArea中
openItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
openD.setVisible(true);
String dirPath = openD.getDirectory();
String fileName = openD.getFile();
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");
}
}catch(IOException ex){
throw new RuntimeException("读取失败!");
} }
}); //保存文件
saveItem.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(file == null){
saveD.setVisible(true);
String dirPath = openD.getDirectory();
String fileName = openD.getFile();
if(dirPath == null || fileName == null)
return;
file = new File(dirPath, fileName);
}
try{
BufferedWriter bufw = new BufferedWriter(new FileWriter(file));
String s = ta.getText();
bufw.write(s);
bufw.flush();
bufw.close();
}catch(IOException ex){
throw new RuntimeException("保存失败!");
}
}
}); } public static void main(String[] args) {
new Demo();
}
}
Java笔记(八)的更多相关文章
- Java笔记(八)……数组
数组的概念 同一种类型数据的集合.其实数组就是一个容器. 数组的好处 可以自动给数组中的元素从0开始编号,方便操作这些元素. 数组的格式 元素类型[] 数组名 = new 元素类型[个数]; int[ ...
- Java IO学习笔记八:Netty入门
作者:Grey 原文地址:Java IO学习笔记八:Netty入门 多路复用多线程方式还是有点麻烦,Netty帮我们做了封装,大大简化了编码的复杂度,接下来熟悉一下netty的基本使用. Netty+ ...
- Java学习笔记四:Java的八种基本数据类型
Java的八种基本数据类型 Java语言提供了八种基本类型.六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型. Java基本类型共有八种,基本类型可以分为三类,字符类型char,布 ...
- Java 笔记 —— java 和 javac
Java 笔记 -- java 和 javac h2{ color: #4ABCDE; } a{ text-decoration: none !important; } a:hover{ color: ...
- 《Java笔记——基础语法》
Java笔记--基础语法 一.字符串的拼接: 例如: System.out.println(""+""); 二.换行语句: 例如: Syst ...
- Effective Java笔记一 创建和销毁对象
Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...
- 《MFC游戏开发》笔记八 游戏特效的实现(二):粒子系统
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9360993 作者:七十一雾央 新浪微博:http:// ...
- java笔记00-目录
--2013年7月26日17:49:59 学习java已久,趁最近有空,写一个总结: java笔记01-反射:
- Learning ROS forRobotics Programming Second Edition学习笔记(八)indigo rviz gazebo
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...
- Elasticsearch笔记八之脑裂
Elasticsearch笔记八之脑裂 概述: 一个正常es集群中只有一个主节点,主节点负责管理整个集群,集群的所有节点都会选择同一个节点作为主节点所以无论访问那个节点都可以查看集群的状态信息. 而脑 ...
随机推荐
- 每天进步一点点—SQL优化
一. SQL优化 1. 通过show status 命令了解各种SQL的运行频率 mysql>show status like 'Com_%'; +----------- ...
- Git以及github的使用方法(六),管理修改
现在,假定你已经完全掌握了暂存区的概念.下面,我们要讨论的就是,为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件. 你会问,什么是修改?比如你新增了一行,这就是一个修改 ...
- Foundation框架 - NSException类
NSException类 WBStudentManager.h #import <Foundation/Foundation.h> NSString* const NameInvalidE ...
- 晶振及COMS电路
COMS电路:http://www.docin.com/p-246885507.html 简介:无源晶振和有源晶振 电子线路中的晶体振荡器也分为无源晶振和有源晶振两种类型.无源晶振与有源晶振的英文名称 ...
- WPF 的 MVVM
Model——View——ViewModel http://www.cnblogs.com/fdyang/p/3877309.html
- Python--数据类型整理
数据类型整理-------------------------------------------------------------------------------------------- ...
- 在XP上安装VS2002
在2002 年,随着 .NET 口号的提出与 Windows XP/Office XP 的公布,微软公布了 Visual Studio .NET(内部版本为 7.0). 使用VS2002+Object ...
- [ios]objective-c中Category类别(扩展类)专题总结
本文转载至 http://yul100887.blog.163.com/blog/static/20033613520126333344127/ objective-c类别的作用?通过类别的方式, ...
- EasyDarwin流媒体服务器实现关键帧推送功能
-本篇由团队成员Fantasy供稿! 功能背景 随着社会进步,人们对产品体验要求越来越高.EasyDarwin也不例外.为了能满足用户对链接服 后看到画面时间(也就是我们经常看到的起播时间)短的要求, ...
- find命令用法
关于查找 文件查找: locate非实时查找:根据索引查找 find实时查找:根据文件的各种属性去找到相对应文件 根据文件的各种属性去找到相对应文件 文本搜索: gre ...