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集群中只有一个主节点,主节点负责管理整个集群,集群的所有节点都会选择同一个节点作为主节点所以无论访问那个节点都可以查看集群的状态信息. 而脑 ...
随机推荐
- flask的restful api模块flask_restful和认证模块flask_httpauth
参考: 1.https://zhuanlan.zhihu.com/p/24629177 2.https://github.com/shengulong/LearnPython/blob/master/ ...
- 基于GPU加速的三维空间分析【转】
基于GPU加速的三维空间分析 标签:supermap地理信息系统gisit 文:李凯 随着三维GIS 的快速发展和应用普及,三维空间分析技术以其应用中的实用性成为当前GIS技术研究的热点领域.面对日益 ...
- 第十讲_图像检索 Image Retrieval
第十讲_图像检索 Image Retrieval 刚要 主要是图像预处理和特征提取+相似度计算 相似颜色检索 算法结构 颜色特征提取:统计图片的颜色成分 颜色特征相似度计算 色差距离 发展:欧式距离- ...
- 浅析 rand7生成rand10 方法 之 思想篇(一)
[问题描写叙述] rand7是一个能生成1-7的随机数.要求利用rand7生成1-10的随机数. [算法思想] 1.组合数学方法 第1次 1 2 3 4 5 6 7 之中用rand7取一个数 第2次从 ...
- poj 2528(区间改动+离散化)
题意:有一个黑板上贴海报.给出每一个海报在黑板上的覆盖区间为l r,问最后多少个海报是可见的. 题解:由于l r取值到1e7,肯定是要离散化的,但普通的离散化会出问题.比方[1,10],[1,4],[ ...
- codeforces 553 D Nudist Beach
题意大概是.给出一个图,保证每一个点至少有一条边以及随意两点间最多一条边.非常显然这个图有众多点集,若我们给每一个点定义一个权值,那每一个点集都有一个最小权值点,如今要求出一个点集,这个点集的最小权值 ...
- 批量杀死mysql进程
http://www.chengyongxu.com/blog/%E6%89%B9%E9%87%8F%E6%9D%80%E6%AD%BBmysql%E8%BF%9B%E7%A8%8B/
- OpenCV for Python 学习笔记 二
今天主要看了OpenCV中的事件以及回调函数,这么说可能不准确,主要是下面这两个函数(OpenCV中还有很多这些函数,可以在 http://docs.opencv.org/trunk/modules/ ...
- iOS学习之iOS沙盒(sandbox)机制和文件操作1
iOS学习之iOS沙盒(sandbox)机制和文件操作 接上篇 iOS学习之iOS沙盒(sandbox)机制和文件操作(一) 我们看看如何获取应用程序沙盒目录.包括真机的沙盒的目录. 1.获取程序的H ...
- 阿里云 访问控制RAM
https://help.aliyun.com/product/28625.html 为用户分配最小权限 别名主要用于 RAM 用户登录以及成功登录后的显示名. 强烈建议您给主账号绑定多因素认证. 设 ...