Java学习疑惑(8)----可视化编程, 对Java中事件驱动模型的理解
我们编写程序就是为了方便用户使用, 我觉得UI设计的核心就是简洁, 操作过于繁琐的程序让很大一部分用户敬而远之. 即使功能强大, 但是人们更愿意使用易于操作的软件. 近年流行起来的操作手势和逐渐趋于成熟的语言控制以及其他更加易于操作的方式很可能会颠覆鼠标键盘的操作方式, 我相信这一天必将到来.
电影<<普罗米修斯>>中画面
我记得我去年编写了我的第一个用户界面, 现在想起来当时非常令我困惑的有两项:
- 不知道该如何将自己原来的功能代码与新建的图形界面联系在一起, 对众多的监听器不知从何下手.
- 不论我怎样修改代码, 界面都是那么地奇丑无比. 对各式各样的布局管理器一筹莫展. 以至于在我分享代码的时候直接忽略了图形界面这块, 交由更加擅长设计UI界面的程序员完善.
- 创建操作系统风格的界面
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
ClassNotFoundException - 如果无法找到LookAndFeel 类InstantiationException - 如果无法创建一个该类的新实例IllegalAccessException - 如果该类或初始化程序不可访问UnsupportedLookAndFeelException - 如果lnf.isSupportedLookAndFeel() 为 falseClassCastException - 如果className 没有标识扩展LookAndFeel 的类- 给各个组件添加合适的监听器
事件源:能够接收外部事件的源体。例如窗体(Component) 面板(Panel) 文本框(TextField)等等
侦听器:能够接收事件源通知的对象。例如MouseListener KeyListener
事件处理程序:用于处理事件的对象。Event
import java.awt.*;
import java.awt.event.*;
import javax.swing.*; class ListenerDemo {
JFrame frame;
JPanel panel;
JButton atk;
JButton fig;
JTextField text; public ListenerDemo() {
init();
addListener();
} public void init() {
frame = new JFrame("Test");
frame.setSize(200, 100);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //这里其实是添加了一个窗体监听器WindowsListener,
// 设置用户按下窗体上CLOSE按钮发生的事件
panel = new JPanel(); atk = new JButton("ATK");
fig = new JButton("FIG");
text = new JTextField(15); frame.add(panel);
panel.add(text);
panel.add(atk);
panel.add(fig); frame.setVisible(true);
} public void addListener() {
ActionListener listener = new ActionListener() { // 定义了一个ActionListener(用于接收操作事件的侦听器)
public void actionPerformed(ActionEvent e) {
JButton button = (JButton)e.getSource();
String name = button.getText();
text.setText("你按下的按钮是 :" + name);
// button.removeActionListener(this); // 取消这段代码的注释, 那么按钮的侦听事件只会执行一次
}
}; atk.addActionListener(listener);
fig.addActionListener(listener);
} public static void main(String[] args) {
ListenerDemo demo = new ListenerDemo();
}
}
上面的事例实现了一个非常简单的事件驱动模型, 在此就以模型的结构描述一下事件从发生到结束是怎么样进行的.
- KeyListener该侦听器接收键盘事件. 主要侦听动作有按下, 释放和键入某个键
- MouseListener用于侦听组件上的鼠标事件(按下、释放、单击、进入或离开), 需要实现发生类似事件响应功能可选择使用.
- ComponentListener 用于接收组件事件的侦听器, 当组件的可见性, 位置和大小发生改变时就会产生响应. 调用对应的方法.
Java学习疑惑(8)----可视化编程, 对Java中事件驱动模型的理解的更多相关文章
- Java学习之Swing Gui编程
Java学习之Swing Gui编程 0x00 前言 前面的使用的Gui是基于Awt 去进行实现,但是在现实写Gui中 AWT实际运用会比较少. 0x01 Swing 概述 AWT 和Swing 区别 ...
- java学习笔记15--多线程编程基础2
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note15.html,转载请注明源地址. 线程的生命周期 1.线程的生命周期 线程从产生到消亡 ...
- Java学习之AWT GUI编程
Java学习之AWT GUI编程 0x00 前言 既然前面提到了要重写冰蝎和一些反序列化工具,当然就不能随便说说而已.在编写这些工具还是要使用图形化工具来的方便一些,所以提前把GUI的框架给学习一遍. ...
- Java学习心得之 Linux下搭建Java环境
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Java学习心得之 Linux下搭建Java环境 1.前言2.JDK安装3.配置环境变量4. ...
- Java 学习第一步-JDK安装和Java环境变量配置
Java学习第一步——JDK安装及Java环境变量配置 [原文] 2014-05-30 9:09 Java SE 阿超 9046 views Java作为当下很主流的编程语言,学习Java的朋 ...
- java学习笔记14--多线程编程基础1
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note14.html,转载请注明源地址. 多线程编程基础 多进程 一个独立程序的每一次运行称为 ...
- Java学习笔记(十六)——Java RMI
[前面的话] 最近过的好舒服,每天过的感觉很充实,一些生活和工作的技巧注意了就会发现,其实生活也是可以过的如此的有滋有味,满足现在的状况,并且感觉很幸福. 学习java RMI的原因是最近在使用dub ...
- 疯狂Java学习笔记(84)----------大约 Java 对象序列化,你不知道 5 事
几年前,.当一个软件团队一起用 Java 书面申请.我认识比一般程序猿多知道一点关于 Java 对象序列化的知识所带来的优点. 关于本系列 您认为自己懂 Java 编程?其实,大多数程序猿对于 Jav ...
- java学习路线之必会的java基础教程
大数据产业已进入发展的“快车道”,急需大量优秀的大数据人才作为后盾.如果你是Java编程出身,那学习大数据自然是锦上添花:但如果你是刚刚接触大数据技术,还在Java编程基础阶段,这篇文章非常值得你看! ...
随机推荐
- mysql 存在该记录则更新,不存在则插入记录的sql
转 http://www.cnblogs.com/zeroone/articles/2298929.html , ‘yourname') ON DUPLICATE KEY UPDATE auto_na ...
- java版括号匹配检测
做一个空栈,读入字符直到结尾.如果读入一个封闭符号,空栈时报错;非空时弹出栈尾字符,如果不匹配则报错.否则读入为开放字符,压入栈中.最后如果栈空,返回true. 其中用到MyStack类,详情请见 p ...
- Log4J使用笔记(转)
转自:http://www.cnblogs.com/eflylab/archive/2007/01/11/618001.html Log4J是Apache的一个开放源代码的项目.通过使用Log4J,程 ...
- Delphi 把一个ICO转换为BMP
// 方法1 var Icon : TIcon; Bitmap : TBitmap; begin Icon := TIcon.Create; Bitmap := TBitmap.Create; Ico ...
- cdoj 秋实大哥带我飞 最短路走法 含0权边
//做完这题以后终于理解白书上的边为什么要那样定义了 可以很方便的在o(1) 时间内找到反向边 解法:先跑一边最短路,然后检查最短路上有没有0权边(dfs就好,但是每条边只能走一次,这里就需要用异或找 ...
- 10-2[RF] OOB validation
main idea: 在使用bootstrap生成gi的训练集时,会有一部分数据没有被选中,使用这一部分数据(OOB)进行validation. 1.数据没有被选中的概率 假设训练集大小为N,使用bo ...
- uva 193 Graph Coloring(图染色 dfs回溯)
Description You are to write a program that tries to find an optimal coloring for a given graph. Col ...
- 用Meta 取消流量器缓存实现每次访问都刷新页面方便调试
如果想禁止浏览器从本地缓存中调阅页面,可以设置网页不保存在缓存中,每次访问都刷新页面,下面是Meta在这方便的用法,需要的朋友可以参考下: <!-- 禁止浏览器从本地缓存中调阅页面.--> ...
- C++ STL 一般总结
以下内容来源网上 经过整合而成(转载) 一.一般介绍 STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库.它被容纳于C++标准程序库( ...
- 《Qt编程的艺术》——8.2 显示目录层次
现在我们准备通过创建一个小程序来获得关于InterView的实践经验,使用QDirModel和拿来就用的view,来在四个不同的view中显示主目录,如图8.5所示.在代码里,除了例行公事先实例化一个 ...