swing 按钮重复提交问题

duhongltz 2008-12-19 02:59:49
我的示例代码
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class MyTestFrame extends JFrame {

/**
* @param args
*/
private JPanel panel;
private JButton button;
private JTextField textField;
public MyTestFrame(){
super();
init();
}
private void init(){
setSize(800, 600);
setContentPane(getPanel());
this.setResizable(false);
setTitle("TestFrame");
setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
this.setBackground(Color.WHITE);
this.addWindowListener(new WindowListener() {
public void windowActivated(WindowEvent e) {

}

public void windowClosed(WindowEvent e) {

}

public void windowClosing(WindowEvent e) {
System.exit(0);
}

public void windowDeactivated(WindowEvent e) {

}

public void windowDeiconified(WindowEvent e) {

}

public void windowIconified(WindowEvent e) {

}

public void windowOpened(WindowEvent e) {

}

});


}
private JPanel getPanel(){
if(panel==null){
panel = new JPanel();
panel.setBackground(Color.WHITE);
panel.setLayout(null);
button = new JButton();
button.setBounds(370, 200, 60, 20);
button.setText("OK");
button.addActionListener(new ActionListener(){

@Override
public void actionPerformed(ActionEvent e) {
textField.setText(textField.getText()+"A");
try {
Thread.sleep(500);//模拟业务所需时间
} catch (InterruptedException e1) {


}

}

});
textField = new JTextField();
textField.setBounds(350, 160, 100, 20);
panel.add(button);
panel.add(textField);
}
return panel;
}

public static void main(String[] args) {
new MyTestFrame().setVisible(true);

}

}

当我在textField中输入内容 然后处理,处理结束。将结果写入textField。用户根据情况决定是否继续执行处理,所以不能使用enable=false。问题是,如果不小心双击就会造成不必要的处理。如何避免用户连续点击问题。在处理结束时,弹出对话框会解决这个问题。有没有个更好的解决办法。还有为什么弹出对话框就能解决?重新设定了事件派发还是remove了事件。还有在事件中设置 button.setEnable(false),那么后续事件 也就是连续点击事件就不会触发,是什么道理,连续点击的事件是否进入了事件派发线程。手头没有好的swing书籍。推荐一本。问题较多,谢谢!
...全文
262 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qqlpp 2008-12-19
  • 打赏
  • 举报
回复
不懂,帮顶
gongfuliang 2008-12-19
  • 打赏
  • 举报
回复
可以这么实现,比较简单。

最好配合光标的设置:


try {
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
button.setEnabled(false);
textField.setText(textField.getText() + "A");
try {
Thread.sleep(500);// 模拟业务所需时间
} catch (InterruptedException e1) {

}
} finally {
button.setEnabled(true);
setCursor(Cursor.getDefaultCursor());
}
duhongltz 2008-12-19
  • 打赏
  • 举报
回复
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class MyTestFrame extends JFrame {

/**
* @param args
*/
private JPanel panel;
private JButton button;
private JTextField textField;

public MyTestFrame() {
super();
init();
}

private void init() {
setSize(800, 600);
setContentPane(getPanel());
this.setResizable(false);
setTitle("TestFrame");
setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
this.setBackground(Color.WHITE);
this.addWindowListener(new WindowListener() {
public void windowActivated(WindowEvent e) {

}

public void windowClosed(WindowEvent e) {

}

public void windowClosing(WindowEvent e) {
System.exit(0);
}

public void windowDeactivated(WindowEvent e) {

}

public void windowDeiconified(WindowEvent e) {

}

public void windowIconified(WindowEvent e) {

}

public void windowOpened(WindowEvent e) {

}

});

}

private JPanel getPanel() {
if (panel == null) {
panel = new JPanel();
panel.setBackground(Color.WHITE);
panel.setLayout(null);
button = new JButton();
button.setBounds(370, 200, 60, 20);
button.setText("OK");
button.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
new Thread() {

public void run() {
try {
button.setEnabled(false);
textField.setText(textField.getText() + "A");
try {
Thread.sleep(500);// 模拟业务所需时间
} catch (InterruptedException e1) {

}
} finally {
button.setEnabled(true);
}
}
}.start();

}

});
textField = new JTextField();
textField.setBounds(350, 160, 100, 20);
panel.add(button);
panel.add(textField);
}
return panel;
}

public static void main(String[] args) {
new MyTestFrame().setVisible(true);

}

}

修改如上实现了目的 不知合理不?
gongfuliang 2008-12-19
  • 打赏
  • 举报
回复
晕,你的问题就是要打到所谓的锁屏问题吧。

连续点击的事件会添加到事件派发线程队列中,当事件派发线程空闲时顺序执行,所以就有可能在长时间事件处理,界面不友好会造成多次点击(比如我们在打游戏的时候应该对用户的心情有很深的了解)。

锁屏分为假锁 和 真锁:

1、假锁:就是通过setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));实现,最好通过try/catch/finally实现,在最开始的设置光标WAIT,
在finally中设置setCursor(Cursor.getDefaultCursor()); 实际上就是给用户警示,我已经开始处理业务了。

2、真锁:我当初的实现就是接管事件派发线程,event.getNextEvent()如果是Button触发的,抛弃不执行。//不过并不提倡这么做。

还有就是通过setEnabled(状态)来处理,同样也是要在finally中setEnabled(true);

设置setEnable(false),实际上还是有Action的,只是Button的状态并不满足事件的触发条件而已,并不是将监听remove
if (b) {
stateMask |= ENABLED;
} else {
stateMask &= ~ENABLED;
// unarm and unpress, just in case
stateMask &= ~ARMED;
stateMask &= ~PRESSED;
}

建议去看看 O'reilly的Java Swing
内容: 1 转换基本数据类型;运算符;计算阶乘; 2 复数类;java的参数传递;自定义形状类;类的加载顺序;方法和变量在继承时的覆盖和隐藏;排序类; 3数字 数字类;格式化数字;转换数字进制;生成随机数; 4数组和集合 使用Arrays类;动态调整数组长度;java为数据结构中的列表定义了一个接口类java.util.list同时提供了3个实现类,分别是ArrayList、Vector、LinkedList使用; 生成不重复的随机数序列;列表、集合与数组的互相转换;java为数据结构中的映射定义一个接口java.util.Map,有四个实现类HashMap Hashtable LinkedHashMap TreeMap用法和区别;对Map排序; 5字符串 使用String;判断一个字符串是否是合法的java标识符;使用StringBuffer;IP地址转化成整数,整数转化成IP地址; 十八为身份证格式验证;表达式解析器;字符串编码的转换;字符串对齐器;密码加密和验证(MD5); 制作命令行程序;使用正则表达式操作字符串;使用正则表达式验证电话号码的格式; 6java异常处理 throw和throws、try和catch;自定义异常类;使用finally;使用异常的技巧和原则; 7 IO输入输出流 获取文件的基本信息;列出指定目录下的文件,并可过滤文件;创建文件和目录;删除文件和目录;移动文件和目录; 复制文件和目录;一个简单的文件搜索器; 多种方式读文件内容, 按字节读取文件内容、按字符读取文件内容、按行读取文件内容、随机读取文件内容; 多种方式写文件内容, 按字节写文件内容、按字符写文件内容、按行写文件内容 ; 添加内容到文件结尾;文件的分割和合并;使用StreamTokenizer统计文件的字符数; 序列化和反序列化对象(将不长用的对象暂时持久化到文件中为对象的序列化,反之用时再把对象恢复到内存为反序列化); 控制对象的序列化和反序列化; 读jar包的资源文件;用zip格式压缩 和解压文件;操作Excel文件;操作Pdf文件;自定义日志文件类; 8线程 线程的启动 和停止;线程的互斥;线程的协作;线程join;生产者、消费者问题;线程的优先级;列出虚拟机中所有的线程;守护线程Daemon;线程池;一个死锁的例子; 定时器Timer:包括在指定时间执行任务,在指定时间之后执行任务以及在某个时间之后每隔时间段重复执行的任务; 9 Java GUI 日历:使用swing和awt实现一个图形化的日历可以查询星期、日期和年份信息(CalenderTrain.java);标准计算器(Callulator.java);更改组建外观,对日历设置几个显示外观(lookandfeel.java);自定义对话框DialogWindows;制作欢迎界面SplashWindow.java; 10 java图形 一个圆形按钮,当单击按钮时颜色发生变化CircleButton.java; 捕捉屏幕相当于键盘上的PrintScreen,CsreenCaputure.java; 缩放图片JPGTransforme.java; 2d图形,实现一个2d画板,能够画2d的线、圆和矩形,能指定图形的颜色并且能够撤销和恢复图形,command.java; 3d图形,Graphic3d.java; 一个时钟程序,能够显示星期和日期,变化背景和透明度Clock.java; 11 java多媒体 滚动的消息,实现一个简单的动画,具有滚动效果的文本消息RollingMessage.java; 三维弹球,BouncingB.java; 贪吃蛇游戏SnakeModel.java; java的声音处理,介绍java中如何处理声音,包括实现响铃,播放wav,au等音频文件,以及控制声音的大小和音量,Beep.java; 媒体播放器,JMFMediaPlayer.java; 12反射 是java程序开发的特征之一,允许java程序对自身进行检查,并能直接操作程序的内部属性; instanceof操作符,instanceof.java; 获取类的信息,ViewClassInfoJrame.java; 动态调用类的方法,CallMetod.java; 13、网络编程 获取URL信息,主要是使用URLConnection类,GetUrlInfo.java; web浏览器,webbrowser.java; 获取IP地址和域名,GetIpAddress.java; Http客户端,httpClient.java; 基本socket编程,介绍socket编程的基本步骤,启动socket服务器后,在打开socket的客户端,在输入框里输入消息发送到服务器,服务器受到消息后返回给客户端; Http服务器,httpsever.java; 一个支持多线程的服务器框架,GeneralServer.java; 代理服务器,ProxyServer.java; telnet客户端,访问系统的telnet服务实质上是与telnet服务建立socket连接,默认的telnet服务的端口是23,TelnetClient.java; UDP编程,包括收发udp报文; 聊天室服务器端,Chatserver.java;聊天室客户端,ChatClient.java; Ftp客户端,Mainframe.java; 14数据库 连接各种数据库DBconnector.java; 获得数据库和表的元数据Getmetadata.java; 查询和更新数据库OperateDatadb.java; 批处理,介绍如何一次执行一批sql语句,这些sql语句用插入、更新和删除等相关操作; 提交和回滚transaction.java; 使用PreparedStatement,动态执行sql语句,UsingPreparedStatement.java; 读写二进制数据,BinaryData.java; 读写Blob数据,blob数据常以二进制形式存储比较大的文件数据,如图片、视频文件等,本文介绍如何往数据库中读写blob数据,BlobData.java; 使用ResultSet更新数据库,UpdateWithResultSet.java; 使用RowSet,.UsingRowSet.java; 调用存储过程,StorageProcedure.java; 一个数据库连接池,JDBCInfo.java; 15 applet java可以编写两类程序,applications和applet,applications可以在控制台直接运行,与其他高级编程语言没有太大区别,而java的特色在于它具有编制小应用程序的功能,applet可以在internet上传输并在兼容java的web浏览器中运行的程序; applet时钟,Clock.java; 处理鼠标和键盘,用户在applet上按下键盘时,该实列能把按下的建显示出来,点击鼠标时能把鼠标事件和鼠标坐标显示出来,MouseAndKeyapplet.java; 英文打字小游戏,TypingGame.java; applet间通信; 汉诺塔游戏, 16 j2se5.0 新特性 自动装箱和拆箱; 新的for循环; 枚举类型; 静态导入; 格式化输出; 使用ProcessBuilder执行本地命令; 泛型编程; 监控和管理虚拟机;新的线程执行架构; 线程锁; 线程条件; 线程同步装置:semaphore countdownlatch cyclicbarrier exchanger; 17 java与xml 用dom处理xml文档; 用sax处理xml文档; 用xslt转换xml; 对象与xml的转换; 18 java mail 使用smtp协议发送简单邮件; 发送带附件的邮件; 给多人发送邮件; 使用pop3接收邮件; 19jsp与servlet 获取客户端的真实ip地址; jsp无刷新聊天室; 设置和读取cookie; 上传文件; 用servlet生成图形验证码; 用servlet实现分页查看数据库;
很不错的python书 第1部分 Python核心  第1章 欢迎来到Python世界    1.1 什么是Python    1.2 起源    1.3 特点     1.3.1 高级     1.3.2 面向对象     1.3.3 可升级     1.3.4 可扩展     1.3.5 可移植性     1.3.6 易学     1.3.7 易读     1.3.8 易维护     1.3.9 健壮性     1.3.10 高效的快速原型开发工具     1.3.11 内存管理器     1.3.12 解释性和(字节)编译性    1.4 下载和安装Python    1.5 运行Python     1.5.1 命令行上的交互式解释器     1.5.2 从命令行启动脚本     1.5.3 集成开发环境     1.5.4 其他的集成开发环境和执行环境    1.6 Python文档    1.7 比较Python(Python与其他语言的比较)    1.8 其他实现    1.9 练习   第2章 快速入门    2.1 程序输出,print语句及“Hello World!”    2.2 程序输入和raw_input()内建函数    2.3 注释    2.4 操作符    2.5 变量和赋值    2.6 数字    2.7 字符串    2.8 列表和元组    2.9 字典    2.10 代码块及缩进对齐    2.11 if语句    2.12 while循环    2.13 for循环和range()内建函数    2.14 列表解析    2.15 文件和内建函数open()、file()    2.16 错误和异常    2.17 函数     2.17.1 如何定义函数     2.17.2 如何调用函数     2.17.3 默认参数    2.18 类    2.19 模块     2.19.1 如何导入模块     2.19.2 如何访问一个模块函数或访问一个模块变量    2.20 实用的函数    2.21 练习   第3章 Python基础    3.1 语句和语法     3.1.1 注释(#)     3.1.2 继续(\)     3.1.3 多个语句构成代码组(:)     3.1.4 代码组由不同的缩进分隔     3.1.5 同一行书写多个语句(;)     3.1.6 模块    3.2 变量赋值     3.2.1 赋值操作符     3.2.2 增量赋值     3.2.3 多重赋值     3.2.4 “多元”赋值    3.3 标识符     3.3.1 合法的Python标识符     3.3.2 关键字     3.3.3 内建     3.3.4 专用下划线标识符    3.4 基本风格指南     3.4.1 模块结构和布局     3.4.2 在主程序中书写测试代码    3.5 内存管理     3.5.1 变量定义     3.5.2 动态类型     3.5.3 内存分配     3.5.4 引用计数     3.5.5 垃圾收集    3.6 第一个Python程序    3.7 相关模块和开发工具    3.8 练习   第4章 Python对象    4.1 Python 对象    4.2 标准类型    4.3 其他内建类型     4.3.1 类型对象和type类型对象     4.3.2 None--Python的Null对象    4.4 内部类型     4.4.1 代码对象     4.4.2 帧对象     4.4.3 跟踪记录对象     4.4.4 切片对象     4.4.5 省略对象     4.4.6 XRange 对象    4.5 标准类型操作符     4.5.1 对象值的比较     4.5.2 对象身份比较     4.5.3 布尔类型    4.6 标准类型内建函数     4.6.1 type()     4.6.2 cmp()     4.6.3 str()和repr()(及``操作符)     4.6.4 type()和isinstance()     4.6.5 Python类型操作符和内建函数总结    4.7 类型工厂函数    4.8 标准类型的分类     4.8.1 存储模型     4.8.2 更新模型     4.8.3 访问模型    4.9 不支持的类型    4.10 练习   第5章 数字    5.1 数字简介     5.1.1 如何创建数值对象并用其赋值(数字对象)     5.1.2 如何更新数字对象     5.1.3 如何删除数字对象    5.2 整型     5.2.1 布尔型     5.2.2 标准整型     5.2.3 长整型     5.2.4 整型和长整型的统一    5.3 双精度浮点型    5.4 复数    5.5 操作符     5.5.1 混合模式操作符     5.5.2 标准类型操作符     5.5.3 算术操作符     5.5.4 *位操作符(只适用于整型)    5.6 内建函数与工厂函数     5.6.1 标准类型函数     5.6.2 数字类型函数     5.6.3 仅用于整型的函数    5.7 其他数字类型     5.7.1 布尔“数”     5.7.2 十进制浮点型    5.8 相关模块    5.9 练习   第6章 序列:字符串、列表和元组    6.1 序列     6.1.1 标准类型操作符     6.1.2 序列类型操作符     6.1.3 内建函数(BIF)    6.2 字符串    6.3 字符串和操作符     6.3.1 标准类型操作符     6.3.2 序列操作符切片([]和[:])    6.4 只适用于字符串的操作符     6.4.1 格式化操作符(%)     6.4.2 字符串模板: 更简单的替代品     6.4.3 原始字符串操作符(r/R)     6.4.4 Unicode字符串操作符(u/U)    6.5 内建函数     6.5.1 标准类型函数     6.5.2 序列类型函数     6.5.3 字符串类型函数    6.6 字符串内建函数     6.7 字符串的独特特性     6.7.1 特殊字符串和控制字符     6.7.2 三引号     6.7.3 字符串不变性    6.8 Unicode     6.8.1 术语     6.8.2 什么是Unicode     6.8.3 怎样使用Unicode     6.8.4 Codec是什么     6.8.5 编码解码     6.8.6 把Unicode应用到实际应用中     6.8.7 从现实中得来的教训     6.8.8 Python的Unicode支持    6.9 相关模块    6.10 字符串关键点总结   6.11 列表    6.12 操作符     6.12.1 标准类型操作符     6.12.2 序列类型操作符     6.12.3 列表类型操作符和列表解析    6.13 内建函数     6.13.1 标准类型函数     6.13.2 序列类型函数     6.13.3 列表类型内建函数    6.14 列表类型的内建函数    6.15 列表的特殊特性    6.16 元组    6.17 元组操作符和内建函数     6.17.1 标准类型操作符、序列类型操作符和内建函数     6.17.2 元组类型操作符和内建函数、内建方法    6.18 元组的特殊特性     6.18.1 不可变性给元组带来了什么影响     6.18.2 元组也不是那么“不可变”     6.18.3 默认集合类型     6.18.4 单元素元组     6.18.5 字典的关键字    6.19 相关模块    6.20 *拷贝Python对象、浅拷贝和深拷贝    6.21 序列类型小结    6.22 练习   第7章 映像和集合类型    7.1 映射类型:字典     7.1.1 如何创建字典和给字典赋值     7.1.2 如何访问字典中的值     7.1.3 如何更新字典     7.1.4 如何删除字典元素和字典    7.2 映射类型操作符     7.2.1 标准类型操作符     7.2.2 映射类型操作符    7.3 映射类型的内建函数和工厂函数     7.3.1 标准类型函数[type()、str()和cmp()]     7.3.2 映射类型相关的函数    7.4 映射类型内建方法    7.5 字典的键     7.5.1 不允许一个键对应多个值     7.5.2 键必须是可哈希的    7.6 集合类型     7.6.1 如何创建集合类型和给集合赋值     7.6.2 如何访问集合中的值     7.6.3 如何更新集合     7.6.4 如何删除集合中的成员和集合    7.7 集合类型操作符     7.7.1 标准类型操作符(所有的集合类型)     7.7.2 集合类型操作符(所有的集合类型)     7.7.3 集合类型操作符(仅适用于可变集合)    7.8 内建函数     7.8.1 标准类型函数     7.8.2 集合类型工厂函数    7.9 集合类型内建方法     7.9.1 方法(所有的集合方法)     7.9.2 方法(仅适用于可变集合)     7.9.3 操作符和内建方法比较    7.10 集合类型总结表    7.11 相关模块    7.12 练习   第8章 条件和循环    8.1 if语句     8.1.1 多重条件表达式     8.1.2 单一语句的代码块    8.2 else语句    8.3 elif(即else-if)语句    8.4 条件表达式(即“三元操作符”)    8.5 while语句     8.5.1 一般语法     8.5.2 计数循环     8.5.3 无限循环    8.6 for语句     8.6.1 一般语法     8.6.2 用于序列类型     8.6.3 用于迭代器类型     8.6.4 range()内建函数     8.6.5 xrange() 内建函数     8.6.6 与序列相关的内建函数    8.7 break语句    8.8 continue语句    8.9 pass语句    8.10 再谈else语句    8.11 迭代器和iter()函数     8.11.1 什么是迭代器     8.11.2 为什么要迭代器     8.11.3 如何迭代     8.11.4 使用迭代器     8.11.5 可变对象和迭代器     8.11.6 如何创建迭代器    8.12 列表解析    8.13 生成器表达式    8.14 相关模块    8.15 练习   第9章 文件和输入输出    9.1 文件对象    9.2 文件内建函数(open()和file())     9.2.1 工厂函数file()     9.2.2 通用换行符支持(UNS)    9.3 文件内建方法     9.3.1 输入     9.3.2 输出     9.3.3 文件内移动     9.3.4 文件迭代     9.3.5 其他     9.3.6 文件方法杂项    9.4 文件内建属性    9.5 标准文件    9.6 命令行参数    9.7 文件系统    9.8 文件执行    9.9 永久存储模块     9.9.1 pickle和marshal模块     9.9.2 DBM风格的模块     9.9.3 shelve模块    9.10 相关模块    9.11 练习   第10章 错误和异常    10.1 什么是异常     10.1.1 错误     10.1.2 异常    10.2 Python 中的异常    10.3 检测和处理异常     10.3.1 try-except语句     10.3.2 包装内建函数     10.3.3 带有多个except的try语句     10.3.4 处理多个异常的except语句     10.3.5 捕获所有异常     10.3.6 “异常参数”     10.3.7 在应用使用我们封装的函数     10.3.8 else子句     10.3.9 finally子句     10.3.10 try-finally语句     10.3.11 try-except-else-finally:厨房一锅端  10.4 上下文管理     10.4.1 with语句     10.4.2 *上下文管理协议    10.5 *字符串作为异常    10.6 触发异常    10.7 断言    10.8 标准异常    10.9 *创建异常    10.10 (现在)为什么用异常    10.11 到底为什么要异常    10.12 异常和sys模块    10.13 相关模块    10.14 练习   第11章 函数和函数式编程    11.1 什么是函数?     11.1.1 函数vs过程     11.1.2 返回值与函数类型    11.2 调用函数     11.2.1 函数操作符     11.2.2 关键字参数    11.2.3 默认参数     11.2.4 参数组    11.3 创建函数     11.3.1 def语句     11.3.2 声明与定义比较     11.3.3 前向引用     11.3.4 函数属性     11.3.5 内部/内嵌函数     11.3.6 *函数(与方法)装饰器    11.4 传递函数    11.5 Formal Arguments     11.5.1 位置参数     11.5.2 默认参数    11.6 可变长度的参数     11.6.1 非关键字可变长参数(元组)     11.6.2 关键字变量参数(字典)     11.6.3 调用带有可变长参数对象函数    11.7 函数式编程     11.7.1 匿名函数与lambda     11.7.2 内建函数apply()、filter()、map()、reduce()     11.7.3 偏函数应用    11.8 变量作用域     11.8.1 全局变量与局部变量     11.8.2 globa语句     11.8.3 作用域的数字     11.8.4 闭包     11.8.5 作用域和lambda     11.8.6 变量作用域和名称空间    11.9 *递归     11.10 生成器     11.10.1 简单的生成器特性        11.10.2 加强的生成器特性    11.11 练习   第12章 模块    12.1 什么是模块    12.2 模块和文件     12.2.1 模块名称空间     12.2.2 搜索路径和路径搜索    12.3 名称空间     12.3.1 名称空间与变量作用域比较     12.3.2 名称查找、确定作用域、覆盖     12.3.3 无限制的名称空间    12.4 导入模块     12.4.1 import语句     12.4.2 from-import语句     12.4.3 多行导入     12.4.4 扩展的import语句(as)    12.5 模块导入的特性     12.5.1 载入时执行模块     12.5.2 导入(import)和加载(load)     12.5.3 导入到当前名称空间的名称     12.5.4 被导入到导入者作用域的名字     12.5.5 关于__future__     12.5.6 警告框架     12.5.7 从ZIP文件中导入模块     12.5.8 “新的”导入钩子    12.6 模块内建函数     12.6.1 __import__()     12.6.2 globals()和locals()        12.6.3 reload()    12.7 包     12.7.1 目录结构     12.7.2 使用from-import导入包    12.8 模块的其他特性     12.8.1 自动载入的模块     12.8.2 阻止属性导入     12.8.3 不区分大小的导入     12.8.4 源代码编码     12.8.5 导入循环     12.8.6 模块执行    12.9 相关模块    12.10 练习   第13章 面向对象编程    13.1 引言    13.2 面向对象编程     13.2.1 面向对象设计与面向对象编程的关系     13.2.2 现实中的问题     13.2.3 *常用术语    13.3 类     13.3.1 创建类     13.3.2 声明与定义    13.4 类属性     13.4.1 类的数据属性     13.4.2 Methods     13.4.3 决定类的属性     13.4.4 特殊的类属性    13.5 实例     13.5.1 初始化:通过调用类对象来创建实例     13.5.2 __init__()“构造器”方法     13.5.3 __new__()“构造器”方法     13.5.4 __del__()“解构器”方法    13.6 实例属性     13.6.1 “实例化”实例属性(或创建一个更好的构造器)     13.6.2 查看实例属性     13.6.3 特殊的实例属性     13.6.4 建类型属性     13.6.5 实例属性vs类属性    13.7 绑定和方法调用     13.7.1 调用绑定方法     13.7.2 调用非绑定方法    13.8 静态方法和类方法     13.8.1 staticmethod()和classmethod()内建函数     13.8.2 使用函数修饰符    13.9 组合    13.10 子类和派生    13.11 继承     13.11.1 __bases__类属性     13.11.2 通过继承覆盖方法     13.11.3 从标准类型派生     13.11.4 多重继承    13.12 类、实例和其他对象的内建函数     13.12.1 issubclass()     13.12.2 isinstance()     13.12.3 hasattr()、getattr()、setattr()、delattr()     13.12.4 dir()     13.12.5 super()     13.12.6 vars()    13.13 用特殊方法定制类     13.13.1 简单定制(RoundFloat2)     13.13.2 数值定制(Time60)     13.13.3 迭代器(RandSeq和AnyIter)     13.13.4 *多类型定制(NumStr)    13.14 私有化    13.15 *授权     13.15.1 包装     13.15.2 实现授权    13.16 新式类的高级特性(Python 2.2+)     13.16.1 新式类的通用特性     13.16.2 __slots__类属性     13.16.3 __getattribute__()特殊方法     13.16.4 描述符     13.16.5 元类和__metaclass__    13.17 相关模块和文档    13.18 练习   第14章 执行环境    14.1 可调用对象     14.1.1 函数     14.1.2 方法     14.1.3 类     14.1.4 类的实例    14.2 代码对象    14.3 可执行的对象声明和内建函数     14.3.1 callable()     14.3.2 compile()     14.3.3 eval()     14.3.4 exec     14.3.5 input()     14.3.6 使用Python在运行时生成和执行Python代码    14.4 执行其他(Python)程序     14.4.1 导入     14.4.2 execfile()     14.4.3 将模块作为脚本执行    14.5 执行其他(非Python)程序     14.5.1 os.system()     14.5.2 os.popen()     14.5.3 os.fork()、os.exec*()、os.wait*()     14.5.4 os.spawn*()     14.5.5 subprocess 模块     14.5.6 相关函数    14.6 受限执行    14.7 结束执行     14.7.1 sys.exit() and SystemExit     14.7.2 sys.exitfunc()     14.7.3 os._exit() 函数     14.7.4 os.kill() Function    14.8 各种操作系统接口    14.9 相关模块    14.10 练习  第2部分 高级主题  第15章 正则表达式    15.1 引言/动机    15.2 正则表达式使用的特殊符号和字符     15.2.1 用管道符号(|)匹配多个正则表达式模式     15.2.2 匹配任意一个单个的字符(.)     15.2.3 从字符串的开头或结尾或单词边界开始匹配(^/$ /\b /\B )     15.2.4 创建字符类([])     15.2.5 指定范围(-)和否定(^)     15.2.6 使用闭包操作符(*,+,?,{})实现多次出现/重复匹配     15.2.7 特殊字符表示、字符集     15.2.8 用圆括号(())组建组    15.3 正则表达式和Python语言     15.3.1 re模块:核心函数和方法     15.3.2 使用compile()编译正则表达式     15.3.3 匹配对象和group()、groups()方法    15.3.4 用match()匹配字符串     15.3.5 search()在一个字符串中查找一个模式(搜索与匹配的比较)     15.3.6 匹配多个字符串(|)     15.3.7 匹配任意单个字符(.)     15.3.8 创建字符集合([])     15.3.9 重复、特殊字符和子组     15.3.10 从字符串的开头或结尾匹配及在单词边界上的匹配     15.3.11 用findall()找到每个出现的匹配部分     15.3.12 用sub()(和subn())进行搜索和替换     15.3.13 用split()分割(分隔模式)    15.4 正则表达式示例     15.4.1 匹配一个字符串     15.4.2 搜索与匹配的比较,“贪婪”匹配    15.5 练习   第16章 网络编程    16.1 引言     16.1.1 什么是客户端/服务器架构     16.1.2 客户端/服务器网络编程    16.2 套接字:通信端点     16.2.1 什么是套接字     16.2.2 套接字地址:主机与端口     16.2.3 面向连接与无连接    16.3 Python中的网络编程     16.3.1 socket()模块函数     16.3.2 套接字对象(内建)方法     16.3.3 创建一个TCP服务器     16.3.4 创建TCP客户端     16.3.5 运行我们的客户端与TCP服务器     16.3.6 创建一个UDP服务器     16.3.7 创建一个UDP客户端     16.3.8 执行UDP服务器和客户端     16.3.9 Socket模块属性    16.4 *SocketServer模块     16.4.1 创建一个SocketServerTCP服务器     16.4.2 创建SocketServerTCP客户端     16.4.3 执行TCP服务器和客户端    16.5 Twisted框架介绍     16.5.1 创建一个Twisted Reactor TCP服务器     16.5.2 创建一个Twisted Reactor TCP客户端     16.5.3 执行TCP服务器和客户端    16.6 相关模块    16.7 练习   第17章 网络客户端编程    17.1 什么是因特网客户端    17.2 文件传输     17.2.1 文件传输网际协议     17.2.2 文件传输协议(FTP)     17.2.3 Python和FTP     17.2.4 ftplib.FTP类方法     17.2.5 交互式FTP示例     17.2.6 客户端FTP程序举例     17.2.7 FTP的其他方面    17.3 网络新闻     17.3.1 Usenet与新闻组     17.3.2 网络新闻传输协议(NNTP)     17.3.3 Python和NNTP     17.3.4 nntplib.NNTP类方法     17.3.5 交互式NNTP举例     17.3.6 客户端程序NNTP举例     17.3.7 NNTP的其他方面    17.4 电子邮件     17.4.1 电子邮件系统组件和协议     17.4.2 发送电子邮件     17.4.3 Python和SMTP     17.4.4 smtplib.SMTP类方法     17.4.5 交互式SMTP示例     17.4.6 SMTP的其他方面     17.4.7 接收电子邮件     17.4.8 POP和IMAP     17.4.9 Python和POP3     17.4.10 交互式POP3举例     17.4.11 poplib.POP3类方法     17.4.12 客户端程序SMTP和POP3举例    17.5 相关模块     17.5.1 电子邮件     17.5.2 其他网络协议    17.6 练习   第18章 多线程编程    18.1 引言/动机    18.2 线程和进程     18.2.1 什么是进程     18.2.2 什么是线程    18.3 Python、线程和全局解释器锁     18.3.1 全局解释器锁(GIL)     18.3.2 退出线程     18.3.3 在Python中使用线程     18.3.4 没有线程支持的情况     18.3.5 Python的threading模块    18.4 thread模块    18.5 threading模块     18.5.1 Thread类     18.5.2 斐波那契、阶乘和累加和     18.5.3 threading模块中的其他函数        18.5.4 生产者-消费者问题和Queue模块    18.6 相关模块    18.7 练习   第19章 图形用户界面编程    19.1 简介     19.1.1 什么是Tcl、Tk和Tkinter     19.1.2 安装和使用Tkinter 533    19.1.3 客户端/服务器架构 534   19.2 Tkinter与Python编程 534    19.2.1 Tkinter模块:把Tk引入你的程序     19.2.2 GUI程序开发简介     19.2.3 顶层窗口:Tkinter.Tk()     19.2.4 Tk组件    19.3 Tkinter举例     19.3.1 标签组件     19.3.2 按钮组件     19.3.3 标签和按钮组件     19.3.4 标签、按钮和进度条组件     19.3.5 偏函数应用举例     19.3.6 中级Tkinter范例    19.4 其他GUI简介     19.4.1 Tk Interface eXtensions (Tix)     19.4.2 Python MegaWidgets (PMW)     19.4.3 wxWidgets和wxPython     19.4.4 GTK+和PyGTK    19.5 相关模块和其他GUI    19.6 练习   第20章 Web编程    20.1 介绍     20.1.1 Web应用:客户端/服务器计算     20.1.2 因特网    20.2 使用Python进行Web应用:创建一个简单的Web客户端     20.2.1 统一资源定位符     20.2.2 urlparse模块     20.2.3 urllib模块     20.2.4 urllib2模块    20.3 高级Web客户端    20.4 CGI:帮助Web服务器处理客户端数据     20.4.1 CGI介绍     20.4.2 CGI应用程序     20.4.3 cgi模块  20.5 建立CGI应用程序     20.5.1 建立Web服务器     20.5.2 建立表单页     20.5.3 生成结果页     20.5.4 生成表单和结果页面     20.5.5 全面交互的Web站点  20.6 在CGI中使用Unicode编码    20.7 高级CGI     20.7.1 Mulitipart表单提交和文件的上传     20.7.2 多值字段     20.7.3 cookie     20.7.4 使用高级CGI    20.8 Web(HTTP)服务器    20.9 相关模块    20.10 练习   第21章 数据库编程    21.1 介绍     21.1.1 持久存储     21.1.2 基本的数据库操作和SQL语言     21.1.3 数据库和Python    21.2 Python数据库应用程序程序员接口(DB-API)     21.2.1 模块属性     21.2.2 连接对象     21.2.3 游标对象     21.2.4 类型对象和构造器     21.2.5 关系数据库     21.2.6 数据库和Python:接口程序     21.2.7 使用数据库接口程序举例    21.3 对象-关系管理器(ORM)     21.3.1 考虑对象,而不是SQL     21.3.2 Python和ORM     21.3.3 雇员数据库举例     21.3.4 总结    21.4 相关模块    21.5 练习   第22章 扩展Python 623   22.1 引言/动机     22.1.1 什么是扩展     22.1.2 为什么要扩展Python    22.2 创建Python扩展     22.2.1 创建您的应用程序代码     22.2.2 用样板来包装你的代码     22.2.3 编译     22.2.4 导入和测试     22.2.5 引用计数     22.2.6 线程和全局解释器锁(GIL)  22.3 相关话题    22.4 练习  第23章 其他话题    23.1 Web服务    23.2 用Win32的COM来操作微软Office     23.2.1 客户端COM编程     23.2.2 微软Excel     23.2.3 微软Word 第1部分 Python核心    23.2.4 微软PowerPoint     23.2.5 微软Outlook     23.2.6 中等规模的例子  23.3 用Jython写Python和Java的程序     23.3.1 什么是Jython     23.3.2 Swing GUI开发(Java或者Python!)    23.4 练习     23.2.4 微软PowerPoint     23.2.5 微软Outlook     23.2.6 中等规模的例子    23.3 用Jython写Python和Java的程序     23.3.1 什么是Jython     23.3.2 Swing GUI开发(Java或者Python!)    23.4 练习
全部代码出自电子工业出版社夏先波的《Java JDK实例宝典》一书,本书以J2SE 5.0为开发环境,选取Java应用的典型实例,循序渐进地介绍了Java语言的各种开发方法和技巧,实例代码注释详细规范,思路清晰。
第1章 Java基础
1.1 转换基本数据类型
1.2 Java的运算符
1.3 控制程序的流程
1.4 计算阶乘
1.5 实现命令行程序
第2章 Java面向对象程序设计
2. 1 复数类
2. 2 equals.chashCode和clone方法
2. 3 Java的参数传递
2. 4 自定义形状类
2. 5 类的加载顺序
2. 6 方法和变量在继承时的覆盖与隐藏
2. 7 排序类
2. 8 Singleton单例模式
2. 9 Factory工厂模式
2. 10 Adapter适配器模式
第3章 数字
3. 1 数字与数字封装类
3. 2 格式化数字
3. 3 数字的舍入
3. 4 转换数字的进制
3. 5 生成随机数
3. 6 处理大数字
第4章 数组与集合
4. 1 使用Arrays
4. 2 求质数.
4. 3 动态调整数组长度
4. 4 矩阵
4. 5 ArrayList. Vector和LinkedList
4. 6 生成不重复的随机数序列
4. 7 自定义队列
4. 8 对List排序
4. 9 HashSet. LinkedHashSet和TreeSet
4. 10 列表. 集合与数组的互相转换
4. 11 HashMap. Hashtable. LinkedHashMap和TreeMap
4. 12 对Map排序
4. 13 Properties属性文件
第5章 字符串
5. 1 使用String
5. 2 基本数据类型与字符串的转化
5. 3 判断Java标识符
5. 4 使用StringBuffer
5. 5 IP地址转化成整数
5. 6 18位身份证格式验证
5. 7 表达式解析器
5. 8 字符串编码的转换
5. 9 字符串对齐器
5. 10 密码加密与验证
5. 11 制作命令行程序
5. 12 使用StringTokenizer
5. 13 使用正则表达式操作字符串
5. 14 使用正则表达式验证电话号码的格式
第6章 Java异常处理
6. 1 throw. throws. try和catch
6. 2 自定义异常类
6. 3 使用finally
6. 4 使用异常的技巧与原则
第7章 IO——输入输出流
7. 1 获取文件的属性信息
7. 2 列出指定目录下的文件
7. 3 创建文件和目录
7. 4 删除文件和目录
7. 5 移动文件和目录
7. 6 复制文件和目录
7. 7 一个简单的文件搜索器
7. 8 读文件
7. 9 写文件
7. 10 添加内容到文件尾
7. 11 文件的分割与合并
7. 12 从键盘接收数据并输出到文件
7. 13 使用StreamTokenizer统计文件的字符数
7. 14 序列化和反序列化对象
7. 15 控制对象的序列化和反序列
7. 16 读jar包的资源文件
7. 17 用Zip格式压缩和解压缩文件
7. 18 操作Excel文件
7. 19 操作PDF文件
7. 20 自定义日志文件类
第8章 线程
8. 1 定义和启动线程
8. 2 停止线程
8. 3 线程的互斥
8. 4 线程的协作
8. 5 线程join
8. 6 生产者. 消费者问题
8. 7 线程优先级
8. 8 列出虚拟机中所有的线程
8. 9 守护线程Daemon
8. 10 线程池
8. 11 一个死锁的例子
8. 12 定时器Timer
第9章 Java GUI
9. 1 日历
9. 2 开窗户游戏
9. 3 标准型计算器
9. 4 更改组件的外观
9. 5 自定义对话框
9. 6 制作欢迎画面
9. 7 一个简单的编辑器
9. 8 Swing的Drag和Drop
第10章 Java图形
10. 1 一个圆形的按钮
10. 2 捕捉屏幕
10. 3 缩放图片
10. 4 2D图形
10. 5 3D图形..
10. 6 一个时钟程序
第11章 Java多媒体
11. 1 滚动的消息
11. 2 三维弹球
11. 3 贪吃蛇游戏
11. 4 Java声音处理
11. 5 媒体播放器
第12章 反射
12. 1 instanceof操作符
12. 2 获取类的信息
12. 3 动态调用类的方法
第13章 网络编程
13. 1 获取URL的信息
13. 2 Web浏览器
13. 3 获取IP地址和域名
13. 4 HTTP客户端
13. 5 基本的Socket编程
13. 6 HTTP服务器
13. 7 一个支持多线程的服务器框架
13. 8 代理服务器
13. 9 Telnet客户端
13. 10 UDP编程
13. 11 聊天室服务器端
13. 12 聊天室客户端
13. 13 FTP客户端
第14章 数据库
14. 1 连接各种数据库
14. 2 获得数据库和表的元数据
14. 3 查询和更新数据库
14. 4 批处理
14. 5 提交与回滚事务
14. 6 使用PreparedStatement
14. 7 读写二进制数据
14. 8 读写Blob数据
14. 9 使用ResultSet更新数据库
14. 10 使用RowSet
14. 11 调用存储过程
14. 12 一个数据库连接池
第15章 Applet
15. 1 Applet时钟
15. 2 处理鼠标和键盘事件
15. 3 英文打字游戏
15. 4 Applet间通信
15. 5 汉诺塔游戏
第16章 J2SE 5. 0新特性
16. 1 自动装箱和拆箱
16. 2 新的for循环
16. 3 枚举类型
16. 4 静态导入
16. 5 可变长参数Varargs
16. 6 格式化输出
16. 7 使用ProcessBuilder执行本地命令
16. 8 泛型编程
16. 9 注释功能Annotation
16. 10 监控与管理虚拟机
16. 11 线程——Callable和Future
16. 12 线程——任务执行架构
16. 13 线程——锁Lock
16. 14 线程——条件Condition
16. 15 线程——Semaphore
16. 16 线程——CountDownLatch
16. 17 线程——Cycli Barrier
16. 18 线程——Exchanger
16. 19 线程——BlockingQueue
第17章 Java与XML
17. 1 用DOM处理XML文档
17. 2 用SAX处理XML文档
17. 3 用XSLT转换XML
17. 4 对象与XML的转换
第18章 Java Mail
18. 1 使用SMTP协议发送简单邮件
18. 2 发送带附件的邮件
18. 3 给多人发送邮件
18. 4 使用POP3接收邮件
第19章 JSP与Servlet
19. 1 获取客户端的真实IP地址
19. 2 设置矛口读取Cookie
19. 3 JSP无刷新聊天室
19. 4 上传文件
19. 5 用Servlet生成图形验证码
19. 6 用Servlet实现分页查看数据库

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧