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集群中只有一个主节点,主节点负责管理整个集群,集群的所有节点都会选择同一个节点作为主节点所以无论访问那个节点都可以查看集群的状态信息. 而脑 ...
随机推荐
- python设置utf-8为默认编码
当使用Python编程时,编码问题一直很让人头疼,程序中经常会碰到如下错误提示: UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in ...
- 为什么硬盘明明还有空间,linux却说硬盘空间不足?inode;mkdir: 无法创建目录"shen1": 设备上没有空间
现象:df -h显示硬盘还有14G空间,但是touch file/mkdir directory都失败,提示硬盘没有空间 原因:df -ia查看下inode的使用情况,发现已经爆了,(下图显示使用88 ...
- dom4j的xpath查找xml的指定节点
递归遍历所有节点http://blog.csdn.net/sidihuo/article/details/47318723 获取Document SAXReader saxReader = new S ...
- 微型企业如何使用odoo
作者 jeffery Q913547235 保留所有权利 Odoo可以帮助微型企业提升运营效率,做到电子化,信息化. 管理仓库进销存,建立收货单.交货单,并基于收货.交货情况确认应收款和应付款 ...
- Python+Selenium框架-unittest执行脚本方法之addTest
本文开始介绍如何通过unittest来管理和执行测试用例,这一篇介绍unittest下addTest()方法来加载测试用例到测试套件中去.为了演示效果,我在前面文章的脚本基础上,新建了一个测试脚本,这 ...
- vue项目结构设计
感觉这个写的挺详细的,要详细了解可以看这个→ 结构详细介绍 vue项目结构图: 简单介绍: build目录是一些webpack的文件,配置参数什么的,一般不用动 config是vue项目的基本配置文件 ...
- 03 svn 权限与用户管理
一:权限管理 (1)svn仓库各个作用 svnserve.conf [svn仓库的配置文件] password [svn仓库账号和密码配置文件] authz [svn仓库的访问权限] (2)访问权限 ...
- Geeks LCA最低公共单亲节点
给出一颗二叉树.找到两个值的最小公共节点. 假设两个值都会在树中出现. 假设可能不会出现的话,也非常easy.就查找一遍看两个值是否在树中就能够了.假设不在就直接返回NULL. 基本思想:就是在二叉树 ...
- MySQL 存储过程 (3)
以下介绍下像数据库循环插入数据操作 第一步:建立存储过程用到的信息表
- 【BZOJ1064】[Noi2008]假面舞会 DFS树
[BZOJ1064][Noi2008]假面舞会 Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择 ...