﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-MyJava-随笔分类-Swing</title><link>http://www.blogjava.net/Sprite-bei/category/19046.html</link><description>&lt;font size="3"&gt;&lt;br&gt;&lt;font color="#ff6600"&gt;天行健  君子以自强不息&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;/font&gt;</description><language>zh-cn</language><lastBuildDate>Mon, 23 Apr 2007 21:55:21 GMT</lastBuildDate><pubDate>Mon, 23 Apr 2007 21:55:21 GMT</pubDate><ttl>60</ttl><item><title>java Swing 曲线面板(4.23更新)</title><link>http://www.blogjava.net/Sprite-bei/archive/2007/04/23/112987.html</link><dc:creator>zht</dc:creator><author>zht</author><pubDate>Mon, 23 Apr 2007 09:05:00 GMT</pubDate><guid>http://www.blogjava.net/Sprite-bei/archive/2007/04/23/112987.html</guid><wfw:comment>http://www.blogjava.net/Sprite-bei/comments/112987.html</wfw:comment><comments>http://www.blogjava.net/Sprite-bei/archive/2007/04/23/112987.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/Sprite-bei/comments/commentRss/112987.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sprite-bei/services/trackbacks/112987.html</trackback:ping><description><![CDATA[<span style="COLOR: #ff6600">大家看看如果有什么问题的话跟贴反应也可以加我MSN和我交流,<br>也希望大家有什么好的功能建议提出来,<br>我会尽快完善功能.<br>MSN见首页公告<br><span>功<span>能说明<br>面板：&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;提供鼠标点击修改功能<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;提供鼠标移动数据跟随显示功能<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;提供数据批量修改功能(右键拖拽选取，按键盘上下键修改)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数据修改提示曲线&nbsp;(两条绿色的细线)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数据修改回溯(键盘ESC键)<br>面板右键菜单：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;保存图片<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;颜色修改<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;标题字体修改<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数据分时段修改<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是否允许修改<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;曲线跟踪提示<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是否有数据跟踪显示<br>主菜单：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;修改UImanager<br>数据显示表格：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;显示数据<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;修改数据(输入数据后回车或者点击别的行)<br>树面板：删除曲线</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;颜色修改<br></span><a href="http://www.blogjava.net/Files/Sprite-bei/curve.rar"><u><span>下载链接 </span></u></a><br><span>jdk版本 1.6</span> <br>截图：<br><img alt="" src="http://www.blogjava.net/images/blogjava_net/sprite-bei/pic.PNG" border=0></span> 
<img src ="http://www.blogjava.net/Sprite-bei/aggbug/112987.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sprite-bei/" target="_blank">zht</a> 2007-04-23 17:05 <a href="http://www.blogjava.net/Sprite-bei/archive/2007/04/23/112987.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JComboBox 弹出 宽面板</title><link>http://www.blogjava.net/Sprite-bei/archive/2007/04/11/109890.html</link><dc:creator>zht</dc:creator><author>zht</author><pubDate>Wed, 11 Apr 2007 06:08:00 GMT</pubDate><guid>http://www.blogjava.net/Sprite-bei/archive/2007/04/11/109890.html</guid><wfw:comment>http://www.blogjava.net/Sprite-bei/comments/109890.html</wfw:comment><comments>http://www.blogjava.net/Sprite-bei/archive/2007/04/11/109890.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Sprite-bei/comments/commentRss/109890.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sprite-bei/services/trackbacks/109890.html</trackback:ping><description><![CDATA[<p>（转）<br>package comboBox;</p>
<p>import java.awt.Dimension;<br>import java.util.Vector;</p>
<p>import javax.swing.ComboBoxModel;<br>import javax.swing.JComboBox;<br>import javax.swing.JFrame;</p>
<p>public class WideComboBox extends JComboBox {</p>
<p>&nbsp;public WideComboBox() {<br>&nbsp;}</p>
<p>&nbsp;public WideComboBox(final Object items[]) {<br>&nbsp;&nbsp;super(items);<br>&nbsp;}</p>
<p>&nbsp;public WideComboBox(Vector items) {<br>&nbsp;&nbsp;super(items);<br>&nbsp;}</p>
<p>&nbsp;public WideComboBox(ComboBoxModel aModel) {<br>&nbsp;&nbsp;super(aModel);<br>&nbsp;}</p>
<p>&nbsp;private boolean layingOut = false;</p>
<p>&nbsp;public void doLayout() {<br>&nbsp;&nbsp;try {<br>&nbsp;&nbsp;&nbsp;layingOut = true;<br>&nbsp;&nbsp;&nbsp;super.doLayout();<br>&nbsp;&nbsp;} finally {<br>&nbsp;&nbsp;&nbsp;layingOut = false;<br>&nbsp;&nbsp;}<br>&nbsp;}</p>
<p>&nbsp;public Dimension getSize() {<br>&nbsp;&nbsp;Dimension dim = super.getSize();<br>&nbsp;&nbsp;if (!layingOut)<br>&nbsp;&nbsp;&nbsp;dim.width = Math.max(dim.width, getPreferredSize().width);<br>&nbsp;&nbsp;return dim;<br>&nbsp;}</p>
<p>&nbsp;public static void main(String[] args) {<br>&nbsp;&nbsp;JFrame jf = new JFrame();<br>&nbsp;&nbsp;WideComboBox wc = new WideComboBox(new String[] { "11111111111111",<br>&nbsp;&nbsp;&nbsp;&nbsp;"22222222222222", "333" });<br>&nbsp;&nbsp;jf.getContentPane().add(wc);<br>&nbsp;&nbsp;jf.setVisible(true);<br>&nbsp;}<br>}<br></p>
<img src ="http://www.blogjava.net/Sprite-bei/aggbug/109890.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sprite-bei/" target="_blank">zht</a> 2007-04-11 14:08 <a href="http://www.blogjava.net/Sprite-bei/archive/2007/04/11/109890.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java Swing 曲线面板</title><link>http://www.blogjava.net/Sprite-bei/archive/2007/04/10/109591.html</link><dc:creator>zht</dc:creator><author>zht</author><pubDate>Tue, 10 Apr 2007 03:34:00 GMT</pubDate><guid>http://www.blogjava.net/Sprite-bei/archive/2007/04/10/109591.html</guid><wfw:comment>http://www.blogjava.net/Sprite-bei/comments/109591.html</wfw:comment><comments>http://www.blogjava.net/Sprite-bei/archive/2007/04/10/109591.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/Sprite-bei/comments/commentRss/109591.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sprite-bei/services/trackbacks/109591.html</trackback:ping><description><![CDATA[这个是我自己写的一个小曲线面板 功能比较简单<br>目前还没想出还需要加一些别的其他功能<br><span style="COLOR: #ff6600">大家看看如果有什么问题的话跟贴反应也可以加我MSN和我交流<br>也希望大家有什么好的功能建议提出来<br>我会尽快完善功能</span><br><br><br>目前完成功能<br>面板：提供鼠标点击修改功能<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数据修改提示曲线&nbsp;那两条绿色的细线<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数据修改回溯 键盘ESC键<br>面板菜单：保存图片<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;颜色修改<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;标题字体修改<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数据分时段修改<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是否允许修改<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;曲线跟踪提示<br>树面板：删除曲线<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;颜色修改<br><a href="http://www.blogjava.net/Files/Sprite-bei/Curve_fatx.rar">下载链接 </a><br>jdk版本 1.6 
<img src ="http://www.blogjava.net/Sprite-bei/aggbug/109591.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sprite-bei/" target="_blank">zht</a> 2007-04-10 11:34 <a href="http://www.blogjava.net/Sprite-bei/archive/2007/04/10/109591.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>APPLET调用本地资源</title><link>http://www.blogjava.net/Sprite-bei/archive/2007/02/07/98481.html</link><dc:creator>zht</dc:creator><author>zht</author><pubDate>Wed, 07 Feb 2007 01:06:00 GMT</pubDate><guid>http://www.blogjava.net/Sprite-bei/archive/2007/02/07/98481.html</guid><wfw:comment>http://www.blogjava.net/Sprite-bei/comments/98481.html</wfw:comment><comments>http://www.blogjava.net/Sprite-bei/archive/2007/02/07/98481.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/Sprite-bei/comments/commentRss/98481.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sprite-bei/services/trackbacks/98481.html</trackback:ping><description><![CDATA[步骤一：（打包class文件）   <br />    <br />  　　在命令行中执行以下的语句：jar   -cvf   MyApplet.jar   class   <br />    <br />  步骤二：（在网页中嵌入Applet）   <br />    <br />  　　这个网页的名字叫做FileReaderApplet.html，下面是嵌入Applet部分的写法：   <br />    <br />  ＜APPLET   <br />  CODEBASE   =   "."   <br />  CODE   =   "jcomponent.FileReaderApplet.class"   <br />  ARCHIVE   ="MyClass.jar"   <br />  NAME   =   "TestApplet"   <br />  WIDTH   =   400   <br />  HEIGHT   =   300   <br />  HSPACE   =   0   <br />  VSPACE   =   0   <br />  ALIGN   =   middle   <br />  ＞   <br />  ＜/APPLET＞     <br />    <br />    <br />  　　完成这个步骤后，这个Applet已经可以显示了。但是还不能读写本地的文件系统。   <br />    <br />  　　步骤三：（生成证书及签名）   <br />    <br />  　　请在命令行环境下执行以下的命令：   <br />    <br />  　　   1、keytool   -genkey   -keystore   pepper.store   -alias   pepper   <br />    <br />  　　这个命令用来产生一个密匙库，执行完毕后应该在c:/admin中产生一个pepper.store的文件，这里的pepper是我自己的名字，你可以对它进行修改。另外在执行命令的时候还有提示你输入密匙库的密码，这里你一定要记住，否则后面要用的时候无法输入。   <br />    <br />  　　2、keytool   -export   -keystore   pepper.store   -alias   pepper   -file   pepper.cert   <br />    <br />  　　这个命令用来产生签名时所要用的证书，同样这里的pepper也可以换成你自己需要的名字。这个命令执行完后在c:/admin中产生一个pepper.cert的文件。   <br />    <br />  　　4、   jarsigner   -keystore   pepper.store   MyApplet.jar   pepper   <br />    <br />  　　这个命令用上面产生的证书将我们的jar文件进行了签名。   <br />    <br />  　　步骤四：（修改文件）   <br />    <br />  　　1、   在c:/admin中产生一个名为applet.policy的文件，其内容如下：   <br />    <br />  keystore   "file:c:   /admin/pepper.store",   "JKS";   <br />    <br />  grant   signedBy   "pepper"   <br />  {   permission   java.io.FilePermission   "＜＜ALL   FILES＞＞",   "read";   <br />  };   <br />      <br />    <br />  　　这个文件让由pepper签名的Applet拥有本地所有文件的读权限。   <br />    <br />  　　2、   修改${java.home}/jre/lib/security目录下的java.security，找到下面这两行：   <br />    <br />  policy.url.1=file:${java.home}/lib/security/java.policy   <br />  policy.url.2=file:${user.home}/.java.policy     <br />    <br />  　　在下面添写第三行   <br />    <br />  policy.url.3=file:c:   /admin/applet.policy     <br />    <br />  　　完成这个修改后我们在前面创建的applet.policy文件才有效。   <br />    <br />  　　步骤五：（转换html文件）   <br />    <br />  　　运行前面提到的HTMLConvert工具，将原有的FileReaderApplet.html转化成下面的形式：   <br />    <br />  ＜!--"CONVERTED_APPLET"--＞   <br />  ＜!--   CONVERTER   VERSION   1.3   --＞   <br />  ＜OBJECT   classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"   <br />  WIDTH   =   400   HEIGHT   =   300   NAME   =   "TestApplet"   ALIGN   =   middle   VSPACE   =   0   HSPACE   =   0   codebase="<a href="http://java.sun.com/products/plugin/1.3/jinstall-13-win32.cab#Version=1,3,0,0">http://java.sun.com/products/plugin/1.3/jinstall-13-win32.cab#Version=1,3,0,0</a>"＞   <br />  ＜PARAM   NAME   =   CODE   VALUE   =   "jcomponent.FileReaderApplet.class"   ＞   <br />  ＜PARAM   NAME   =   CODEBASE   VALUE   =   "."   ＞   <br />  ＜PARAM   NAME   =   ARCHIVE   VALUE   =   "MyApplet.jar"   ＞   <br />  ＜PARAM   NAME   =   NAME   VALUE   =   "TestApplet"   ＞   <br />    <br />  ＜PARAM   NAME="type"   VALUE="application/x-java-applet;version=1.3"＞   <br />  ＜PARAM   NAME="scriptable"   VALUE="false"＞   <br />  ＜COMMENT＞   <br />  ＜EMBED   type="application/x-java-applet;version=1.3"   CODE   =   "jcomponent.FileReaderApplet.class"   CODEBASE   =   "."   ARCHIVE   =   "MyApplet.jar"   NAME   =   "TestApplet"   WIDTH   =   400   HEIGHT   =   300   ALIGN   =   middle   VSPACE   =   0   HSPACE   =   0   scriptable=false   pluginspage="<a href="http://java.sun.com/products/plugin/1.3/plugin-install.html">http://java.sun.com/products/plugin/1.3/plugin-install.html</a>"＞＜NOEMBED＞＜/COMMENT＞   <br />    <br />  ＜/NOEMBED＞＜/EMBED＞   <br />  ＜/OBJECT＞   <br />    <br />  ＜!--   <br />  ＜APPLET   CODE   =   "jcomponent.FileReaderApplet.class"   CODEBASE   =   "."   ARCHIVE   =   "MyApplet.jar"   WIDTH   =   400   HEIGHT   =   300   NAME   =   "TestApplet"   ALIGN   =   middle   VSPACE   =   0   HSPACE   =   0＞   <br />    <br />    <br />  ＜/APPLET＞   <br />  --＞   <br />  ＜!--"END_CONVERTED_APPLET"--＞     <br />    <br />    <br />  大家不要看到这里的写法很复杂，但是这些都是由HTMLConvert工具自动实现的。这个工具有命令行和图形界面两种运行方式。   <br />    <br />  　　好了，现在这个Applet可以运行读写文件的功能了。如果你要考虑在Internet上实现这个Applet，那么你也不需要在所有的客户端均做上面的步骤，你只需要在你的服务器上创建一个目录，例如c:/admin，将这个目录映射为<a href="http://www.testApplet.com/admin">www.testApplet.com/admin</a>。这里的<a href="http://www.testApplet.com">www.testApplet.com</a>是一个假定的网址，将pepper.cert、pepper.store、FileReaderApplet.html、MyApplet.jar以及applet.policy放在这个目录中，然后修改applet.policy文件如下：   <br />    <br />  keystore   "http://   <a href="http://www.testApplet.com/admin/pepper.store">www.testApplet.com/admin/pepper.store</a>",   "JKS";   <br />    <br />  grant   signedBy   "pepper"   <br />  {   permission   java.io.FilePermission   "＜＜ALL   FILES＞＞",   "read";   <br />  };     <br />    <br />  　　3、   而每个客户端仅仅需要修改一下它们的${java.home}/jre/lib/security目录下的java.security文件如下：   <br />    <br />  policy.url.1=file:${java.home}/lib/security/java.policy   <br />  policy.url.2=file:${user.home}/.java.policy   <br />  policy.url.3=   http://   <a href="http://www.testApplet.com/admin/applet.policy">www.testApplet.com/admin/applet.policy</a>     <br />    <br />  　　当然每个客户端还是需要安装JRE的,而且一定要安装与软件相符合JRE版本<br /><img src ="http://www.blogjava.net/Sprite-bei/aggbug/98481.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sprite-bei/" target="_blank">zht</a> 2007-02-07 09:06 <a href="http://www.blogjava.net/Sprite-bei/archive/2007/02/07/98481.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java 反射机制</title><link>http://www.blogjava.net/Sprite-bei/archive/2007/02/06/98300.html</link><dc:creator>zht</dc:creator><author>zht</author><pubDate>Tue, 06 Feb 2007 06:27:00 GMT</pubDate><guid>http://www.blogjava.net/Sprite-bei/archive/2007/02/06/98300.html</guid><wfw:comment>http://www.blogjava.net/Sprite-bei/comments/98300.html</wfw:comment><comments>http://www.blogjava.net/Sprite-bei/archive/2007/02/06/98300.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Sprite-bei/comments/commentRss/98300.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sprite-bei/services/trackbacks/98300.html</trackback:ping><description><![CDATA[Java 的反射机制是使其具有动态特性的非常关键的一种机制，也是在JavaBean 中广泛应用的一种特性。 <br />运用JavaBean 的最常见的问题是：根据指定的类名，类字段名和所对应的数据，得到该类的实例，下面的一个例子演示了这一实现。 <br />-|Base.java //抽象基类 <br />|Son1.java //基类扩展1 <br />|Son2.java //基类扩展2 <br />|Util.java <br />/** <br />* @author metaphy <br />* create 2005-4-14 9:06:56 <br />* 说明： <br />*/ <br />（1）Base.java 抽象基类只是一个定义 <br />public abstract class Base { <br />} <br />（2）Son1.java /Son2.java 是已经实现的JavaBean <br />public class Son1 extends Base{ <br />private int id ; <br />private String name ; <br /><br />public int getId() { <br />return id; <br />} <br />public void setId(int id) { <br />this.id = id; <br />} <br />public String getName() { <br />return name; <br />} <br />public void setName(String name) { <br />this.name = name; <br />} <br /><br />public void son1Method(String s){ <br />System.out.println(s) ; <br />} <br />} <br />（3） <br />public class Son2 extends Base{ <br />private int id; <br />private double salary; <br /><br />public int getId() { <br />return id; <br />} <br />public void setId(int id) { <br />this.id = id; <br />} <br />public double getSalary() { <br />return salary; <br />} <br />public void setSalary(double salary) { <br />this.salary = salary; <br />} <br />} <br />（4）Util.java 演示了如何根据指定的类名，类字段名和所对应的数据，得到一个类的实例 <br />import java.lang.reflect.Method; <br />public class Util { <br />//此方法的最大好处是没有类名Son1,Son2 可以通过参数来指定，程序里面根本不用出现 <br />public static Base convertStr2ServiceBean(String beanName,String fieldSetter,String paraValue){ <br />Base base = null ; <br />try { <br />Class cls = Class.forName(beanName) ; <br />base = (Base)cls.newInstance() ; <br />Class[] paraTypes = new Class[]{String.class }; <br />Method method = cls.getMethod(fieldSetter, paraTypes) ; <br />String[] paraValues = new String[]{paraValue} ; <br />method.invoke(base, paraValues) ; <br />} catch (Throwable e) { <br />System.err.println(e); <br />} <br />return base ; <br />} <br /><br /><br />public static void main(String[] args){ <br />Son1 son1 =(Son1) Util.convertStr2ServiceBean("trying.reflect.Son1","setName","wang da sha"); <br />System.out.println("son1.getName() :"+son1.getName()) ; <br />} <br />} <br />//调用结果： <br />//son1.getName() :wang da sha <br /><br />谢谢！希望能给大家一点启发！ <br />－－－－－－－－－－－－－－－－－－－－ <br />附： <br />//下面这篇文档来源于Internet，作者不详 <br />Reflection 是 Java 程序开发语言的特征之一，它允许运行中的 Java 程序对自身进行检查，或者说“自审”，并能直接操作程序的内部属性。例如，使用它能获得 Java 类中各成员的名称并显示出来。 <br />Java 的这一能力在实际应用中也许用得不是很多，但是在其它的程序设计语言中根本就不存在这一特性。例如，Pascal、C 或者 C++ 中就没有办法在程序中获得函数定义相关的信息。 <br />JavaBean 是 reflection 的实际应用之一，它能让一些工具可视化的操作软件组件。这些工具通过 reflection 动态的载入并取得 Java 组件(类) 的属性。 <br />1. 一个简单的例子 <br />考虑下面这个简单的例子，让我们看看 reflection 是如何工作的。 <br />import java.lang.reflect.*; <br />public class DumpMethods { <br />public static void main(String args[]) { <br />try { <br />Class c = Class.forName(args[0]); <br />Method m[] = c.getDeclaredMethods(); <br />for (int i = 0; i &lt; m.length; i++) <br />System.out.println(m[i].toString()); <br />} catch (Throwable e) { <br />System.err.println(e); <br />} <br />} <br />} <br />按如下语句执行： <br />java DumpMethods java.util.Stack <br />它的结果输出为： <br />public java.lang.Object java.util.Stack.push(java.lang.Object) <br />public synchronized java.lang.Object java.util.Stack.pop() <br />public synchronized java.lang.Object java.util.Stack.peek() <br />public boolean java.util.Stack.empty() <br />public synchronized int java.util.Stack.search(java.lang.Object) <br />这样就列出了java.util.Stack 类的各方法名以及它们的限制符和返回类型。 <br />这个程序使用 Class.forName 载入指定的类，然后调用 getDeclaredMethods 来获取这个类中定义了的方法列表。java.lang.reflect.Methods 是用来描述某个类中单个方法的一个类。 <br />2.开始使用 Reflection <br />用于 reflection 的类，如 Method，可以在 java.lang.relfect 包中找到。使用这些类的时候必须要遵循三个步骤：第一步是获得你想操作的类的 java.lang.Class 对象。在运行中的 Java 程序中，用 java.lang.Class 类来描述类和接口等。 <br />下面就是获得一个 Class 对象的方法之一： <br />Class c = Class.forName("java.lang.String"); <br />这条语句得到一个 String 类的类对象。还有另一种方法，如下面的语句： <br />Class c = int.class; <br />或者 <br />Class c = Integer.TYPE; <br />它们可获得基本类型的类信息。其中后一种方法中访问的是基本类型的封装类 (如 Integer) 中预先定义好的 TYPE 字段。 <br />第二步是调用诸如 getDeclaredMethods 的方法，以取得该类中定义的所有方法的列表。 <br />一旦取得这个信息，就可以进行第三步了——使用 reflection API 来操作这些信息，如下面这段代码： <br />Class c = Class.forName("java.lang.String"); <br />Method m[] = c.getDeclaredMethods(); <br />System.out.println(m[0].toString()); <br />它将以文本方式打印出 String 中定义的第一个方法的原型。 <br />在下面的例子中，这三个步骤将为使用 reflection 处理特殊应用程序提供例证。 <br />模拟 instanceof 操作符 <br />得到类信息之后，通常下一个步骤就是解决关于 Class 对象的一些基本的问题。例如，Class.isInstance 方法可以用于模拟 instanceof 操作符： <br />class A { <br />} <br />public class instance1 { <br />public static void main(String args[]) { <br />try { <br />Class cls = Class.forName("A"); <br />boolean b1 = cls.isInstance(new Integer(37)); <br />System.out.println(b1); <br />boolean b2 = cls.isInstance(new A()); <br />System.out.println(b2); <br />} catch (Throwable e) { <br />System.err.println(e); <br />} <br />} <br />} <br />在这个例子中创建了一个 A 类的 Class 对象，然后检查一些对象是否是 A 的实例。Integer(37) 不是，但 new A() 是。 <br />3.找出类的方法 <br />找出一个类中定义了些什么方法，这是一个非常有价值也非常基础的 reflection 用法。下面的代码就实现了这一用法： <br />import java.lang.reflect.*; <br />public class method1 { <br />private int f1(Object p, int x) throws NullPointerException { <br />if (p == null) <br />throw new NullPointerException(); <br />return x; <br />} <br />public static void main(String args[]) { <br />try { <br />Class cls = Class.forName("method1"); <br />Method methlist[] = cls.getDeclaredMethods(); <br />for (int i = 0; i &lt; methlist.length; i++) { <br />Method m = methlist[i]; <br />System.out.println("name = " + m.getName()); <br />System.out.println("decl class = " + m.getDeclaringClass()); <br />Class pvec[] = m.getParameterTypes(); <br />for (int j = 0; j &lt; pvec.length; j++) <br />System.out.println("param #" + j + " " + pvec[j]); <br />Class evec[] = m.getExceptionTypes(); <br />for (int j = 0; j &lt; evec.length; j++) <br />System.out.println("exc #" + j + " " + evec[j]); <br />System.out.println("return type = " + m.getReturnType()); <br />System.out.println("-----"); <br />} <br />} catch (Throwable e) { <br />System.err.println(e); <br />} <br />} <br />} <br />这个程序首先取得 method1 类的描述，然后调用 getDeclaredMethods 来获取一系列的 Method 对象，它们分别描述了定义在类中的每一个方法，包括 public 方法、protected 方法、package 方法和 private 方法等。如果你在程序中使用 getMethods 来代替 getDeclaredMethods，你还能获得继承来的各个方法的信息。 <br />取得了 Method 对象列表之后，要显示这些方法的参数类型、异常类型和返回值类型等就不难了。这些类型是基本类型还是类类型，都可以由描述类的对象按顺序给出。 <br />输出的结果如下： <br />name = f1 <br />decl class = class method1 <br />param #0 class java.lang.Object <br />param #1 int <br />exc #0 class java.lang.NullPointerException <br />return type = int <br />----- <br />name = main <br />decl class = class method1 <br />param #0 class [Ljava.lang.String; <br />return type = void <br />----- <br /><br />4.获取构造器信息 <br />获取类构造器的用法与上述获取方法的用法类似，如： <br />import java.lang.reflect.*; <br />public class constructor1 { <br />public constructor1() { <br />} <br />protected constructor1(int i, double d) { <br />} <br />public static void main(String args[]) { <br />try { <br />Class cls = Class.forName("constructor1"); <br />Constructor ctorlist[] = cls.getDeclaredConstructors(); <br />for (int i = 0; i &lt; ctorlist.length; i++) { <br />Constructor ct = ctorlist[i]; <br />System.out.println("name = " + ct.getName()); <br />System.out.println("decl class = " + ct.getDeclaringClass()); <br />Class pvec[] = ct.getParameterTypes(); <br />for (int j = 0; j &lt; pvec.length; j++) <br />System.out.println("param #" + j + " " + pvec[j]); <br />Class evec[] = ct.getExceptionTypes(); <br />for (int j = 0; j &lt; evec.length; j++) <br />System.out.println("exc #" + j + " " + evec[j]); <br />System.out.println("-----"); <br />} <br />} catch (Throwable e) { <br />System.err.println(e); <br />} <br />} <br />} <br />这个例子中没能获得返回类型的相关信息，那是因为构造器没有返回类型。 <br />这个程序运行的结果是： <br />name = constructor1 <br />decl class = class constructor1 <br />----- <br />name = constructor1 <br />decl class = class constructor1 <br />param #0 int <br />param #1 double <br />----- <br />5.获取类的字段(域) <br />找出一个类中定义了哪些数据字段也是可能的，下面的代码就在干这个事情： <br /><br />import java.lang.reflect.*; <br />public class field1 { <br />private double d; <br />public static final int i = 37; <br />String s = "testing"; <br />public static void main(String args[]) { <br />try { <br />Class cls = Class.forName("field1"); <br />Field fieldlist[] = cls.getDeclaredFields(); <br />for (int i = 0; i &lt; fieldlist.length; i++) { <br />Field fld = fieldlist[i]; <br />System.out.println("name = " + fld.getName()); <br />System.out.println("decl class = " + fld.getDeclaringClass()); <br />System.out.println("type = " + fld.getType()); <br />int mod = fld.getModifiers(); <br />System.out.println("modifiers = " + Modifier.toString(mod)); <br />System.out.println("-----"); <br />} <br />} catch (Throwable e) { <br />System.err.println(e); <br />} <br />} <br />} <br />这个例子和前面那个例子非常相似。例中使用了一个新东西 Modifier，它也是一个 reflection 类，用来描述字段成员的修饰语，如“private int”。这些修饰语自身由整数描述，而且使用 Modifier.toString 来返回以“官方”顺序排列的字符串描述 (如“static”在“final”之前)。这个程序的输出是： <br />name = d <br />decl class = class field1 <br />type = double <br />modifiers = private <br />----- <br />name = i <br />decl class = class field1 <br />type = int <br />modifiers = public static final <br />----- <br />name = s <br />decl class = class field1 <br />type = class java.lang.String <br />modifiers = <br />----- <br />和获取方法的情况一下，获取字段的时候也可以只取得在当前类中申明了的字段信息 (getDeclaredFields)，或者也可以取得父类中定义的字段 (getFields) 。 <br /><br />6.根据方法的名称来执行方法 <br />文本到这里，所举的例子无一例外都与如何获取类的信息有关。我们也可以用 reflection 来做一些其它的事情，比如执行一个指定了名称的方法。下面的示例演示了这一操作： <br />import java.lang.reflect.*; <br />public class method2 { <br />public int add(int a, int b) { <br />return a + b; <br />} <br />public static void main(String args[]) { <br />try { <br />Class cls = Class.forName("method2"); <br />Class partypes[] = new Class[2]; <br />partypes[0] = Integer.TYPE; <br />partypes[1] = Integer.TYPE; <br />Method meth = cls.getMethod("add", partypes); <br />method2 methobj = new method2(); <br />Object arglist[] = new Object[2]; <br />arglist[0] = new Integer(37); <br />arglist[1] = new Integer(47); <br />Object retobj = meth.invoke(methobj, arglist); <br />Integer retval = (Integer) retobj; <br />System.out.println(retval.intvalue()); <br />} catch (Throwable e) { <br />System.err.println(e); <br />} <br />} <br />} <br />假如一个程序在执行的某处的时候才知道需要执行某个方法，这个方法的名称是在程序的运行过程中指定的 (例如，JavaBean 开发环境中就会做这样的事)，那么上面的程序演示了如何做到。 <br />上例中，getMethod 用于查找一个具有两个整型参数且名为 add 的方法。找到该方法并创建了相应的 Method 对象之后，在正确的对象实例中执行它。执行该方法的时候，需要提供一个参数列表，这在上例中是分别包装了整数 37 和 47 的两个 Integer 对象。执行方法的返回的同样是一个 Integer 对象，它封装了返回值 84。 <br />7.创建新的对象 <br />对于构造器，则不能像执行方法那样进行，因为执行一个构造器就意味着创建了一个新的对象 (准确的说，创建一个对象的过程包括分配内存和构造对象)。所以，与上例最相似的例子如下： <br />import java.lang.reflect.*; <br />public class constructor2 { <br />public constructor2() { <br />} <br />public constructor2(int a, int b) { <br />System.out.println("a = " + a + " b = " + b); <br />} <br />public static void main(String args[]) { <br />try { <br />Class cls = Class.forName("constructor2"); <br />Class partypes[] = new Class[2]; <br />partypes[0] = Integer.TYPE; <br />partypes[1] = Integer.TYPE; <br />Constructor ct = cls.getConstructor(partypes); <br />Object arglist[] = new Object[2]; <br />arglist[0] = new Integer(37); <br />arglist[1] = new Integer(47); <br />Object retobj = ct.newInstance(arglist); <br />} catch (Throwable e) { <br />System.err.println(e); <br />} <br />} <br />} <br />根据指定的参数类型找到相应的构造函数并执行它，以创建一个新的对象实例。使用这种方法可以在程序运行时动态地创建对象，而不是在编译的时候创建对象，这一点非常有价值。 <br />8.改变字段(域)的值 <br />reflection 的还有一个用处就是改变对象数据字段的值。reflection 可以从正在运行的程序中根据名称找到对象的字段并改变它，下面的例子可以说明这一点： <br />import java.lang.reflect.*; <br />public class field2 { <br />public double d; <br />public static void main(String args[]) { <br />try { <br />Class cls = Class.forName("field2"); <br />Field fld = cls.getField("d"); <br />field2 f2obj = new field2(); <br />System.out.println("d = " + f2obj.d); <br />fld.setDouble(f2obj, 12.34); <br />System.out.println("d = " + f2obj.d); <br />} catch (Throwable e) { <br />System.err.println(e); <br />} <br />} <br />} <br />这个例子中，字段 d 的值被变为了 12.34。 <br />9.使用数组 <br />本文介绍的 reflection 的最后一种用法是创建的操作数组。数组在 Java 语言中是一种特殊的类类型，一个数组的引用可以赋给 Object 引用。观察下面的例子看看数组是怎么工作的： <br />import java.lang.reflect.*; <br />public class array1 { <br />public static void main(String args[]) { <br />try { <br />Class cls = Class.forName("java.lang.String"); <br />Object arr = Array.newInstance(cls, 10); <br />Array.set(arr, 5, "this is a test"); <br />String s = (String) Array.get(arr, 5); <br />System.out.println(s); <br />} catch (Throwable e) { <br />System.err.println(e); <br />} <br />} <br />} <br />例中创建了 10 个单位长度的 String 数组，为第 5 个位置的字符串赋了值，最后将这个字符串从数组中取得并打印了出来。 <br />下面这段代码提供了一个更复杂的例子： <br />import java.lang.reflect.*; <br />public class array2 { <br />public static void main(String args[]) { <br />int dims[] = new int[]{5, 10, 15}; <br />Object arr = Array.newInstance(Integer.TYPE, dims); <br />Object arrobj = Array.get(arr, 3); <br />Class cls = arrobj.getClass().getComponentType(); <br />System.out.println(cls); <br />arrobj = Array.get(arrobj, 5); <br />Array.setInt(arrobj, 10, 37); <br />int arrcast[][][] = (int[][][]) arr; <br />System.out.println(arrcast[3][5][10]); <br />} <br />} <br />例中创建了一个 5 x 10 x 15 的整型数组，并为处于 [3][5][10] 的元素赋了值为 37。注意，多维数组实际上就是数组的数组，例如，第一个 Array.get 之后，arrobj 是一个 10 x 15 的数组。进而取得其中的一个元素，即长度为 15 的数组，并使用 Array.setInt 为它的第 10 个元素赋值。 <br />注意创建数组时的类型是动态的，在编译时并不知道其类型。<br /><img src ="http://www.blogjava.net/Sprite-bei/aggbug/98300.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sprite-bei/" target="_blank">zht</a> 2007-02-06 14:27 <a href="http://www.blogjava.net/Sprite-bei/archive/2007/02/06/98300.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Serializable序列化</title><link>http://www.blogjava.net/Sprite-bei/archive/2007/02/06/98195.html</link><dc:creator>zht</dc:creator><author>zht</author><pubDate>Tue, 06 Feb 2007 02:23:00 GMT</pubDate><guid>http://www.blogjava.net/Sprite-bei/archive/2007/02/06/98195.html</guid><wfw:comment>http://www.blogjava.net/Sprite-bei/comments/98195.html</wfw:comment><comments>http://www.blogjava.net/Sprite-bei/archive/2007/02/06/98195.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Sprite-bei/comments/commentRss/98195.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sprite-bei/services/trackbacks/98195.html</trackback:ping><description><![CDATA[序列化的过程就是对象写入字节流和从字节流中读取对象。将对象状态转换成字节流之后，可以用java.io包中的各种字节流类将其保存到文件中，管道到另一线程中或通过网络连接将对象数据发送到另一主机。对象序列化功能非常简单、强大，在RMI、Socket、JMS、EJB都有应用。对象序列化问题在网络编程中并不是最激动人心的课题，但却相当重要，具有许多实用意义。
<p>    一：对象序列化可以实现分布式对象。主要应用例如：RMI要利用对象序列化运行远程主机上的服务，就像在本地机上运行对象时一样。</p><p>    二：java对象序列化不仅保留一个对象的数据，而且递归保存对象引用的每个对象的数据。可以将整个对象层次写入字节流中，可以保存在文件中或在网络连接上传递。利用对象序列化可以进行对象的“深复制”，即复制对象本身及引用的对象本身。序列化一个对象可能得到整个对象序列。</p><p>    从上面的叙述中，我们知道了对象序列化是java编程中的必备武器，那么让我们从基础开始，好好学习一下它的机制和用法。</p><p>    java序列化比较简单，通常不需要编写保存和恢复对象状态的定制代码。实现java.io.Serializable接口的类对象可以转换成字节流或从字节流恢复，不需要在类中增加任何代码。只有极少数情况下才需要定制代码保存或恢复对象状态。这里要注意：不是每个类都可序列化，有些类是不能序列化的，例如涉及线程的类与特定JVM有非常复杂的关系。</p><p>    序列化机制：</p><p>    序列化分为两大部分：序列化和反序列化。序列化是这个过程的第一部分，将数据分解成字节流，以便存储在文件中或在网络上传输。反序列化就是打开字节流并重构对象。对象序列化不仅要将基本数据类型转换成字节表示，有时还要恢复数据。恢复数据要求有恢复数据的对象实例。ObjectOutputStream中的序列化过程与字节流连接，包括对象类型和版本信息。反序列化时，JVM用头信息生成对象实例，然后将对象字节流中的数据复制到对象数据成员中。下面我们分两大部分来阐述：</p><p>    处理对象流：</p><p>    （序列化过程和反序列化过程）</p><p>    java.io包有两个序列化对象的类。ObjectOutputStream负责将对象写入字节流，ObjectInputStream从字节流重构对象。</p><p>    我们先了解ObjectOutputStream类吧。ObjectOutputStream类扩展DataOutput接口。</p><p>    writeObject()方法是最重要的方法，用于对象序列化。如果对象包含其他对象的引用，则writeObject()方法递归序列化这些对象。每个ObjectOutputStream维护序列化的对象引用表，防止发送同一对象的多个拷贝。（这点很重要）由于writeObject()可以序列化整组交叉引用的对象，因此同一ObjectOutputStream实例可能不小心被请求序列化同一对象。这时，进行反引用序列化，而不是再次写入对象字节流。</p><p>    下面，让我们从例子中来了解ObjectOutputStream这个类吧。</p><p>    // 序列化 today's date 到一个文件中.<br />    FileOutputStream f = new FileOutputStream("tmp");<br />    ObjectOutputStream s = new ObjectOutputStream(f);<br />    s.writeObject("Today");<br />    s.writeObject(new Date());<br />    s.flush();<br />    现在，让我们来了解ObjectInputStream这个类。它与ObjectOutputStream相似。它扩展DataInput接口。ObjectInputStream中的方法镜像DataInputStream中读取Java基本数据类型的公开方法。readObject()方法从字节流中反序列化对象。每次调用readObject()方法都返回流中下一个Object。对象字节流并不传输类的字节码，而是包括类名及其签名。readObject()收到对象时，JVM装入头中指定的类。如果找不到这个类，则readObject()抛出ClassNotFoundException,如果需要传输对象数据和字节码，则可以用RMI框架。ObjectInputStream的其余方法用于定制反序列化过程。</p><p>    例子如下：</p><p>    //从文件中反序列化 string 对象和 date 对象<br />    FileInputStream in = new FileInputStream("tmp");<br />    ObjectInputStream s = new ObjectInputStream(in);<br />    String today = (String)s.readObject();<br />    Date date = (Date)s.readObject();<br />    定制序列化过程:</p><p>    序列化通常可以自动完成，但有时可能要对这个过程进行控制。java可以将类声明为serializable，但仍可手工控制声明为static或transient的数据成员。</p><p>    例子：一个非常简单的序列化类。</p><p>    public class simpleSerializableClass implements Serializable{<br />    String sToday="Today:";<br />    transient Date dtToday=new Date();<br />    }<br />    序列化时，类的所有数据成员应可序列化除了声明为transient或static的成员。将变量声明为transient告诉JVM我们会负责将变元序列化。将数据成员声明为transient后，序列化过程就无法将其加进对象字节流中，没有从transient数据成员发送的数据。后面数据反序列化时，要重建数据成员（因为它是类定义的一部分），但不包含任何数据，因为这个数据成员不向流中写入任何数据。记住，对象流不序列化static或transient。我们的类要用writeObject()与readObject()方法以处理这些数据成员。使用writeObject()与readObject()方法时，还要注意按写入的顺序读取这些数据成员。</p><p>    关于如何使用定制序列化的部分代码如下：</p><p>    //重写writeObject()方法以便处理transient的成员。</p><p>    public void writeObject(ObjectOutputStream outputStream) throws IOException{<br />    outputStream.defaultWriteObject();//使定制的writeObject()方法可以<br />    利用自动序列化中内置的逻辑。</p><p>    outputStream.writeObject(oSocket.getInetAddress());<br />    outputStream.writeInt(oSocket.getPort());<br />    }<br />    //重写readObject()方法以便接收transient的成员。</p><p>    private void readObject(ObjectInputStream inputStream) throws IOException,ClassNotFoundException{<br />    inputStream.defaultReadObject();//defaultReadObject()补充自动序列化<br />    InetAddress oAddress=(InetAddress)inputStream.readObject();<br />    int iPort =inputStream.readInt();<br />    oSocket = new Socket(oAddress,iPort);<br />    iID=getID();<br />    dtToday =new Date();<br />    }<br />    完全定制序列化过程:</p><p>    如果一个类要完全负责自己的序列化，则实现Externalizable接口而不是Serializable接口。Externalizable接口定义包括两个方法writeExternal()与readExternal()。利用这些方法可以控制对象数据成员如何写入字节流.类实现Externalizable时，头写入对象流中，然后类完全负责序列化和恢复数据成员，除了头以外，根本没有自动序列化。这里要注意了。声明类实现Externalizable接口会有重大的安全风险。writeExternal()与readExternal()方法声明为public，恶意类可以用这些方法读取和写入对象数据。如果对象包含敏感信息，则要格外小心。这包括使用安全套接或加密整个字节流。到此为至，我们学习了序列化的基础部分知识。<br /><br /></p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> se;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.awt.BorderLayout;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.awt.FlowLayout;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.awt.event.ActionEvent;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.awt.event.ActionListener;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.io.FileInputStream;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.io.FileOutputStream;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.io.ObjectInputStream;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.io.ObjectOutputStream;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> javax.swing.JButton;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> javax.swing.JPanel;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> javax.swing.JTree;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> javax.swing.WindowConstants;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_474_1972_Open_Image" onclick="this.style.display='none'; Codehighlighter1_474_1972_Open_Text.style.display='none'; Codehighlighter1_474_1972_Closed_Image.style.display='inline'; Codehighlighter1_474_1972_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_474_1972_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_474_1972_Closed_Text.style.display='none'; Codehighlighter1_474_1972_Open_Image.style.display='inline'; Codehighlighter1_474_1972_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> NewJFrame </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> javax.swing.JFrame </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> ActionListener </span><span id="Codehighlighter1_474_1972_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_474_1972_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> JPanel jp;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> JTree jTree1;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> JPanel cen_JP;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> JButton save_JBn;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_614_678_Open_Image" onclick="this.style.display='none'; Codehighlighter1_614_678_Open_Text.style.display='none'; Codehighlighter1_614_678_Closed_Image.style.display='inline'; Codehighlighter1_614_678_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_614_678_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_614_678_Closed_Text.style.display='none'; Codehighlighter1_614_678_Open_Image.style.display='inline'; Codehighlighter1_614_678_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> main(String[] args) </span><span id="Codehighlighter1_614_678_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_614_678_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        NewJFrame inst </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> NewJFrame();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        inst.setVisible(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_701_728_Open_Image" onclick="this.style.display='none'; Codehighlighter1_701_728_Open_Text.style.display='none'; Codehighlighter1_701_728_Closed_Image.style.display='inline'; Codehighlighter1_701_728_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_701_728_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_701_728_Closed_Text.style.display='none'; Codehighlighter1_701_728_Open_Image.style.display='inline'; Codehighlighter1_701_728_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> NewJFrame() </span><span id="Codehighlighter1_701_728_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_701_728_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">super</span><span style="COLOR: #000000">();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        initGUI();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_755_1660_Open_Image" onclick="this.style.display='none'; Codehighlighter1_755_1660_Open_Text.style.display='none'; Codehighlighter1_755_1660_Closed_Image.style.display='inline'; Codehighlighter1_755_1660_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_755_1660_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_755_1660_Closed_Text.style.display='none'; Codehighlighter1_755_1660_Open_Image.style.display='inline'; Codehighlighter1_755_1660_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> initGUI() </span><span id="Codehighlighter1_755_1660_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_755_1660_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_763_1607_Open_Image" onclick="this.style.display='none'; Codehighlighter1_763_1607_Open_Text.style.display='none'; Codehighlighter1_763_1607_Closed_Image.style.display='inline'; Codehighlighter1_763_1607_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_763_1607_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_763_1607_Closed_Text.style.display='none'; Codehighlighter1_763_1607_Open_Image.style.display='inline'; Codehighlighter1_763_1607_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_763_1607_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_763_1607_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            FileInputStream f </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> FileInputStream(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">c:/t.txt</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            ObjectInputStream s </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ObjectInputStream(f);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            cen_JP </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (JPanel) s.readObject();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);<br /><img id="Codehighlighter1_977_1263_Open_Image" onclick="this.style.display='none'; Codehighlighter1_977_1263_Open_Text.style.display='none'; Codehighlighter1_977_1263_Closed_Image.style.display='inline'; Codehighlighter1_977_1263_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_977_1263_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_977_1263_Closed_Text.style.display='none'; Codehighlighter1_977_1263_Open_Image.style.display='inline'; Codehighlighter1_977_1263_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span><span id="Codehighlighter1_977_1263_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_977_1263_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                jp </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> JPanel();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                FlowLayout jpLayout </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> FlowLayout();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                jp.setLayout(jpLayout);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                getContentPane().add(jp, BorderLayout.NORTH);<br /><img id="Codehighlighter1_1128_1258_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1128_1258_Open_Text.style.display='none'; Codehighlighter1_1128_1258_Closed_Image.style.display='inline'; Codehighlighter1_1128_1258_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1128_1258_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1128_1258_Closed_Text.style.display='none'; Codehighlighter1_1128_1258_Open_Image.style.display='inline'; Codehighlighter1_1128_1258_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                </span><span id="Codehighlighter1_1128_1258_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1128_1258_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                    save_JBn </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> JButton();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                    jp.add(save_JBn);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                    save_JBn.setText(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">save</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                    save_JBn.addActionListener(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />            }</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_1268_1570_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1268_1570_Open_Text.style.display='none'; Codehighlighter1_1268_1570_Closed_Image.style.display='inline'; Codehighlighter1_1268_1570_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1268_1570_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1268_1570_Closed_Text.style.display='none'; Codehighlighter1_1268_1570_Open_Image.style.display='inline'; Codehighlighter1_1268_1570_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            </span><span id="Codehighlighter1_1268_1570_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1268_1570_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">                cen_JP = new JPanel();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">                BorderLayout cen_JPLayout = new BorderLayout();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">                cen_JP.setLayout(cen_JPLayout);</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">                getContentPane().add(cen_JP, BorderLayout.CENTER);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">                {<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">                    jTree1 = new JTree();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">                    cen_JP.add(jTree1, BorderLayout.CENTER);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">                }</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /></span><span style="COLOR: #000000">            }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            pack();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            setSize(</span><span style="COLOR: #000000">400</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">300</span><span style="COLOR: #000000">);<br /><img id="Codehighlighter1_1629_1657_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1629_1657_Open_Text.style.display='none'; Codehighlighter1_1629_1657_Closed_Image.style.display='inline'; Codehighlighter1_1629_1657_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1629_1657_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1629_1657_Closed_Text.style.display='none'; Codehighlighter1_1629_1657_Open_Image.style.display='inline'; Codehighlighter1_1629_1657_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        }</span></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (Exception e) </span><span id="Codehighlighter1_1629_1657_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1629_1657_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            e.printStackTrace();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_1707_1969_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1707_1969_Open_Text.style.display='none'; Codehighlighter1_1707_1969_Closed_Image.style.display='inline'; Codehighlighter1_1707_1969_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1707_1969_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1707_1969_Closed_Text.style.display='none'; Codehighlighter1_1707_1969_Open_Image.style.display='inline'; Codehighlighter1_1707_1969_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> actionPerformed(ActionEvent e) </span><span id="Codehighlighter1_1707_1969_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1707_1969_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        FileOutputStream f;<br /><img id="Codehighlighter1_1737_1889_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1737_1889_Open_Text.style.display='none'; Codehighlighter1_1737_1889_Closed_Image.style.display='inline'; Codehighlighter1_1737_1889_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1737_1889_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1737_1889_Closed_Text.style.display='none'; Codehighlighter1_1737_1889_Open_Image.style.display='inline'; Codehighlighter1_1737_1889_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_1737_1889_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1737_1889_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            f </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> FileOutputStream(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">c:/t.txt</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            ObjectOutputStream s </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ObjectOutputStream(f);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            s.writeObject(cen_JP);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            s.flush();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            s.close();<br /><img id="Codehighlighter1_1912_1965_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1912_1965_Open_Text.style.display='none'; Codehighlighter1_1912_1965_Closed_Image.style.display='inline'; Codehighlighter1_1912_1965_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1912_1965_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1912_1965_Closed_Text.style.display='none'; Codehighlighter1_1912_1965_Open_Image.style.display='inline'; Codehighlighter1_1912_1965_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        }</span></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000"> (Exception e1) </span><span id="Codehighlighter1_1912_1965_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1912_1965_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> TODO 自动生成 catch 块</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            e1.printStackTrace();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><img src ="http://www.blogjava.net/Sprite-bei/aggbug/98195.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sprite-bei/" target="_blank">zht</a> 2007-02-06 10:23 <a href="http://www.blogjava.net/Sprite-bei/archive/2007/02/06/98195.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>颜色选择程序</title><link>http://www.blogjava.net/Sprite-bei/archive/2007/02/02/97585.html</link><dc:creator>zht</dc:creator><author>zht</author><pubDate>Fri, 02 Feb 2007 09:06:00 GMT</pubDate><guid>http://www.blogjava.net/Sprite-bei/archive/2007/02/02/97585.html</guid><wfw:comment>http://www.blogjava.net/Sprite-bei/comments/97585.html</wfw:comment><comments>http://www.blogjava.net/Sprite-bei/archive/2007/02/02/97585.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Sprite-bei/comments/commentRss/97585.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sprite-bei/services/trackbacks/97585.html</trackback:ping><description><![CDATA[颜色选择对话框<br /><img alt="closechose" src="C:\Documents and Settings\zhangtao\桌面\未命名.bmp" temp_src="C:\Documents and Settings\zhangtao\桌面\未命名.bmp" /><br /><hr /><hr /><br /><a href="/Files/Sprite-bei/clo.rar">可执行程序链接</a><img src ="http://www.blogjava.net/Sprite-bei/aggbug/97585.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sprite-bei/" target="_blank">zht</a> 2007-02-02 17:06 <a href="http://www.blogjava.net/Sprite-bei/archive/2007/02/02/97585.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JTextPane 修改字体颜色</title><link>http://www.blogjava.net/Sprite-bei/archive/2007/01/25/95996.html</link><dc:creator>zht</dc:creator><author>zht</author><pubDate>Thu, 25 Jan 2007 08:58:00 GMT</pubDate><guid>http://www.blogjava.net/Sprite-bei/archive/2007/01/25/95996.html</guid><wfw:comment>http://www.blogjava.net/Sprite-bei/comments/95996.html</wfw:comment><comments>http://www.blogjava.net/Sprite-bei/archive/2007/01/25/95996.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Sprite-bei/comments/commentRss/95996.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sprite-bei/services/trackbacks/95996.html</trackback:ping><description><![CDATA[
		<p>
				<br />import java.awt.BorderLayout;<br />import java.awt.Color;<br />import java.awt.event.ActionEvent;<br />import java.awt.event.ActionListener;</p>
		<p>import javax.swing.JButton;<br />import javax.swing.JEditorPane;<br />import javax.swing.JPanel;<br />import javax.swing.JScrollPane;<br />import javax.swing.JTextPane;<br />import javax.swing.UIManager;<br />import javax.swing.WindowConstants;<br />import javax.swing.text.AttributeSet;<br />import javax.swing.text.DefaultStyledDocument;<br />import javax.swing.text.Document;<br />import javax.swing.text.EditorKit;<br />import javax.swing.text.MutableAttributeSet;<br />import javax.swing.text.SimpleAttributeSet;<br />import javax.swing.text.StyleConstants;<br />import javax.swing.text.StyledDocument;<br />import javax.swing.text.StyledEditorKit;</p>
		<p>public class NewJFrame extends javax.swing.JFrame implements ActionListener {<br /> private JPanel jp1;</p>
		<p> private JButton color;</p>
		<p> private JTextPane jep;</p>
		<p> private JScrollPane jsp;</p>
		<p> private JButton font;</p>
		<p> /**<br />  * Auto-generated main method to display this JFrame<br />  */<br /> public static void main(String[] args) {<br />  NewJFrame inst = new NewJFrame();<br />  inst.setVisible(true);<br /> }</p>
		<p> public NewJFrame() {<br />  super();<br />  initGUI();<br /> }</p>
		<p> private void initGUI() {<br />  try {<br />   BorderLayout thisLayout = new BorderLayout();<br />   getContentPane().setLayout(thisLayout);<br />   setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);<br />   {<br />    jp1 = new JPanel();<br />    getContentPane().add(jp1, BorderLayout.NORTH);<br />    {<br />     font = new JButton();<br />     font.addActionListener(this);<br />     jp1.add(font);<br />     font.setText("font");<br />    }<br />    {<br />     color = new JButton();<br />     jp1.add(color);<br />     color.addActionListener(this);<br />     color.setText("color");<br />    }<br />   }<br />   {<br />    jsp = new JScrollPane();<br />    getContentPane().add(jsp, BorderLayout.CENTER);<br />    {<br />     jep = new JTextPane();<br />     jsp.setViewportView(jep);<br />     jep.setDocument(new DefaultStyledDocument());<br />    }<br />   }<br />   pack();<br />   setSize(400, 300);<br />  } catch (Exception e) {<br />   e.printStackTrace();<br />  }<br /> }</p>
		<p> public static void setFontSize(JEditorPane editor, int size) {<br />  if (editor != null) {<br />   if ((size &gt; 0) &amp;&amp; (size &lt; 512)) {<br />    MutableAttributeSet attr = new SimpleAttributeSet();<br />    StyleConstants.setFontSize(attr, size);<br />    setCharacterAttributes(editor, attr, false);<br />   } else {<br />    UIManager.getLookAndFeel().provideErrorFeedback(editor);<br />   }<br />  }<br /> }</p>
		<p> public static void setForeground(JEditorPane editor, Color fg) {<br />  if (editor != null) {<br />   if (fg != null) {<br />    MutableAttributeSet attr = new SimpleAttributeSet();<br />    StyleConstants.setForeground(attr, fg);<br />    setCharacterAttributes(editor, attr, false);<br />   } else {<br />    UIManager.getLookAndFeel().provideErrorFeedback(editor);<br />   }<br />  }<br /> }</p>
		<p> public static final void setCharacterAttributes(JEditorPane editor,<br />   AttributeSet attr, boolean replace) {<br />  int p0 = editor.getSelectionStart();<br />  int p1 = editor.getSelectionEnd();<br />  if (p0 != p1) {<br />   StyledDocument doc = getStyledDocument(editor);<br />   doc.setCharacterAttributes(p0, p1 - p0, attr, replace);<br />  }<br />  StyledEditorKit k = getStyledEditorKit(editor);<br />  MutableAttributeSet inputAttributes = k.getInputAttributes();<br />  if (replace) {<br />   inputAttributes.removeAttributes(inputAttributes);<br />  }<br />  inputAttributes.addAttributes(attr);<br /> }</p>
		<p> protected static final StyledDocument getStyledDocument(JEditorPane e) {<br />  Document d = e.getDocument();<br />  if (d instanceof StyledDocument) {<br />   return (StyledDocument) d;<br />  }<br />  throw new IllegalArgumentException("document must be StyledDocument");<br /> }</p>
		<p> protected static final StyledEditorKit getStyledEditorKit(JEditorPane e) {<br />  EditorKit k = e.getEditorKit();<br />  if (k instanceof StyledEditorKit) {<br />   return (StyledEditorKit) k;<br />  }<br />  throw new IllegalArgumentException("EditorKit must be StyledEditorKit");<br /> }</p>
		<p> public void actionPerformed(ActionEvent e) {<br />  Object obj = e.getSource();<br />  if (obj == font) {<br />   JEditorPane editor = jep;<br />   setFontSize(editor, 20);<br />  }<br />  if (obj == color) {<br />   JEditorPane editor = jep;<br />   setForeground(editor, Color.red);<br />  }<br /> }</p>
		<p>}</p>
<img src ="http://www.blogjava.net/Sprite-bei/aggbug/95996.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sprite-bei/" target="_blank">zht</a> 2007-01-25 16:58 <a href="http://www.blogjava.net/Sprite-bei/archive/2007/01/25/95996.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UIManager改变</title><link>http://www.blogjava.net/Sprite-bei/archive/2007/01/25/95863.html</link><dc:creator>zht</dc:creator><author>zht</author><pubDate>Thu, 25 Jan 2007 02:38:00 GMT</pubDate><guid>http://www.blogjava.net/Sprite-bei/archive/2007/01/25/95863.html</guid><wfw:comment>http://www.blogjava.net/Sprite-bei/comments/95863.html</wfw:comment><comments>http://www.blogjava.net/Sprite-bei/archive/2007/01/25/95863.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Sprite-bei/comments/commentRss/95863.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sprite-bei/services/trackbacks/95863.html</trackback:ping><description><![CDATA[
		<p> class ControlPanel extends JPanel {<br />  JCheckBox checkBox = new JCheckBox("UIResource");</p>
		<p>  JRadioButton motifButton = new JRadioButton("Motif"),<br />    windowsButton = new JRadioButton("Windows"),<br />    metalButton = new JRadioButton("Metal");</p>
		<p>  public ControlPanel() {<br />   ActionListener listener = new RadioHandler();<br />   ButtonGroup group = new ButtonGroup();</p>
		<p>   group.add(motifButton);<br />   group.add(windowsButton);<br />   group.add(metalButton);</p>
		<p>   motifButton.addActionListener(listener);<br />   windowsButton.addActionListener(listener);<br />   metalButton.addActionListener(listener);</p>
		<p>   add(motifButton);<br />   add(windowsButton);<br />   add(metalButton);<br />  }</p>
		<p>  class RadioHandler implements ActionListener {<br />   public void actionPerformed(ActionEvent e) {<br />    JRadioButton src = (JRadioButton) e.getSource();</p>
		<p>    try {<br />     if (src == motifButton)<br />      UIManager.setLookAndFeel("com.sun.java.swing.plaf."<br />        + "motif.MotifLookAndFeel");</p>
		<p>     else if (src == windowsButton)<br />      UIManager.setLookAndFeel("com.sun.java.swing.plaf."<br />        + "windows.WindowsLookAndFeel");</p>
		<p>     else if (src == metalButton)<br />      UIManager.setLookAndFeel("javax.swing.plaf.metal."<br />        + "MetalLookAndFeel");<br />    } catch (Exception ex) {<br />     ex.printStackTrace();<br />    }<br />  <font color="#ff0000">  SwingUtilities.updateComponentTreeUI(getContentPane());<br /></font>   }<br />  }<br /> }</p>
<img src ="http://www.blogjava.net/Sprite-bei/aggbug/95863.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sprite-bei/" target="_blank">zht</a> 2007-01-25 10:38 <a href="http://www.blogjava.net/Sprite-bei/archive/2007/01/25/95863.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UndoManager测试</title><link>http://www.blogjava.net/Sprite-bei/archive/2007/01/25/95848.html</link><dc:creator>zht</dc:creator><author>zht</author><pubDate>Thu, 25 Jan 2007 01:46:00 GMT</pubDate><guid>http://www.blogjava.net/Sprite-bei/archive/2007/01/25/95848.html</guid><wfw:comment>http://www.blogjava.net/Sprite-bei/comments/95848.html</wfw:comment><comments>http://www.blogjava.net/Sprite-bei/archive/2007/01/25/95848.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Sprite-bei/comments/commentRss/95848.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sprite-bei/services/trackbacks/95848.html</trackback:ping><description><![CDATA[
		<p>package urdo;</p>
		<p>import java.awt.BorderLayout;<br />import java.awt.event.ActionEvent;<br />import java.awt.event.InputEvent;<br />import java.awt.event.KeyEvent;</p>
		<p>import javax.swing.AbstractAction;<br />import javax.swing.Action;<br />import javax.swing.JButton;<br />import javax.swing.JMenu;<br />import javax.swing.JMenuBar;<br />import javax.swing.JMenuItem;<br />import javax.swing.JPanel;<br />import javax.swing.JScrollPane;<br />import javax.swing.JTextArea;<br />import javax.swing.KeyStroke;<br />import javax.swing.UIManager;<br />import javax.swing.WindowConstants;<br />import javax.swing.event.UndoableEditEvent;<br />import javax.swing.event.UndoableEditListener;<br />import javax.swing.undo.CannotRedoException;<br />import javax.swing.undo.CannotUndoException;<br />import javax.swing.undo.UndoManager;</p>
		<p>public class NewJFrame extends javax.swing.JFrame {<br /> private JPanel jp1;</p>
		<p> private JButton jb1;</p>
		<p> private JButton jb2;</p>
		<p> private JMenuItem jm12;</p>
		<p> private JMenuItem jm11;</p>
		<p> private JMenu jm;</p>
		<p> private JMenuBar jMenuBar1;</p>
		<p> private JTextArea jta;</p>
		<p> private JScrollPane jsp;</p>
		<p> /**<br />  * Auto-generated main method to display this JFrame<br />  */<br /> public static void main(String[] args) {<br />  NewJFrame inst = new NewJFrame();<br />  inst.setVisible(true);<br /> }</p>
		<p> public NewJFrame() {<br />  super();<br />  initGUI();<br /> }</p>
		<p> private void initGUI() {<br />  try {<br />   setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);<br />   {<br />    jMenuBar1 = new JMenuBar();<br />    setJMenuBar(jMenuBar1);<br />    {<br />     jm = new JMenu();<br />     jMenuBar1.add(jm);<br />     jm.setText("jm");<br />     {<br />      jm11 = new JMenuItem(redoAction);<br />      jm.add(jm11);<br />      jm11.setText("re");<br />     }<br />     {<br />      jm12 = new JMenuItem(undoAction);<br />      jm.add(jm12);<br />      jm12.setText("undo");<br />     }<br />     jm12.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,<br />       InputEvent.CTRL_MASK));<br />    }<br />   }<br />   {<br />    jp1 = new JPanel();<br />    getContentPane().add(jp1, BorderLayout.NORTH);<br />    jp1.setPreferredSize(new java.awt.Dimension(392, 35));<br />    {<br />     jb1 = new JButton(redoAction);<br />     jp1.add(jb1);<br />     jb1.setText("redo");<br />    }<br />    //    jb1.registerKeyboardAction(redoAction, KeyStroke.getKeyStroke(<br />    //      KeyEvent.VK_Y, KeyEvent.CTRL_DOWN_MASK, true),<br />    //      JComponent.WHEN_IN_FOCUSED_WINDOW);<br />    {<br />     jb2 = new JButton(undoAction);<br />     jp1.add(jb2);<br />     jb2.setText("undo");<br />    }<br />    //    jb2.registerKeyboardAction(undoAction, KeyStroke.getKeyStroke(<br />    //      KeyEvent.VK_Z, KeyEvent.CTRL_DOWN_MASK, true),<br />    //      JComponent.WHEN_IN_FOCUSED_WINDOW);</p>
		<p>   }<br />   {<br />    jsp = new JScrollPane();<br />    getContentPane().add(jsp, BorderLayout.CENTER);<br />    {<br />     jta = new JTextArea();<br />     jsp.setViewportView(jta);<br />     jta.getDocument().addUndoableEditListener(undoHandler);<br />    }<br />   }<br />   pack();<br />   setSize(400, 300);<br />  } catch (Exception e) {<br />   e.printStackTrace();<br />  }<br /> }</p>
		<p> protected UndoableEditListener undoHandler = new UndoHandler();</p>
		<p> protected UndoManager undo = new UndoManager();</p>
		<p> private UndoAction undoAction = new UndoAction();</p>
		<p> private RedoAction redoAction = new RedoAction();</p>
		<p> class UndoHandler implements UndoableEditListener {</p>
		<p>  /**<br />   * Messaged when the Document has created an edit, the edit is<br />   * added to &lt;code&gt;undo&lt;/code&gt;, an instance of UndoManager.<br />   */<br />  public void undoableEditHappened(UndoableEditEvent e) {<br />   undo.addEdit(e.getEdit());<br />   undoAction.update();<br />   redoAction.update();<br />  }<br /> }</p>
		<p> class UndoAction extends AbstractAction {<br />  public UndoAction() {<br />   super();<br />   setEnabled(false);<br />  }</p>
		<p>  public void actionPerformed(ActionEvent e) {<br />   try {<br />    undo.undo();<br />   } catch (CannotUndoException ex) {<br />    ex.printStackTrace();<br />   }<br />   update();<br />   redoAction.update();<br />  }</p>
		<p>  protected void update() {<br />   if (undo.canUndo()) {<br />    setEnabled(true);<br />    //    System.out.println(undo.getUndoPresentationName());<br />    putValue(Action.NAME, undo.getUndoPresentationName());<br />   } else {<br />    setEnabled(false);<br />    putValue(Action.NAME, "撤消");<br />   }<br />  }<br /> }</p>
		<p> class RedoAction extends AbstractAction {<br />  public RedoAction() {<br />   super();<br />   setEnabled(false);<br />  }</p>
		<p>  public void actionPerformed(ActionEvent e) {<br />   try {<br />    undo.redo();<br />   } catch (CannotRedoException ex) {<br />    ex.printStackTrace();<br />   }<br />   update();<br />   undoAction.update();<br />  }</p>
		<p>  protected void update() {<br />   if (undo.canRedo()) {<br />    setEnabled(true);<br />    putValue(Action.NAME, undo.getRedoPresentationName());<br />   } else {<br />    setEnabled(false);<br />    putValue(Action.NAME, "重做");<br />   }<br />  }<br /> }<br />}<br /></p>
<img src ="http://www.blogjava.net/Sprite-bei/aggbug/95848.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sprite-bei/" target="_blank">zht</a> 2007-01-25 09:46 <a href="http://www.blogjava.net/Sprite-bei/archive/2007/01/25/95848.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>截屏和透明组件</title><link>http://www.blogjava.net/Sprite-bei/archive/2007/01/15/93951.html</link><dc:creator>zht</dc:creator><author>zht</author><pubDate>Mon, 15 Jan 2007 06:29:00 GMT</pubDate><guid>http://www.blogjava.net/Sprite-bei/archive/2007/01/15/93951.html</guid><wfw:comment>http://www.blogjava.net/Sprite-bei/comments/93951.html</wfw:comment><comments>http://www.blogjava.net/Sprite-bei/archive/2007/01/15/93951.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Sprite-bei/comments/commentRss/93951.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sprite-bei/services/trackbacks/93951.html</trackback:ping><description><![CDATA[
		<p>
				<font color="#ff0000">桌面截图功能</font>
				<br />
				<br />import javax.swing.*;<br />import java.awt.*;<br />import java.awt.event.ActionEvent;<br />import java.awt.event.ActionListener;<br />import java.awt.event.MouseAdapter;<br />import java.awt.event.MouseEvent;<br />import java.awt.event.MouseMotionListener;</p>
		<p>/**<br /> * 用Java模拟出QQ桌面截图功能<br /> */</p>
		<p>public class Test extends JFrame {</p>
		<p> private static final long serialVersionUID = -267804510087895906L;</p>
		<p> private JButton button = null;<br /> <br /> private JLabel imgLabel = null;</p>
		<p> public Test() {<br />  button = new JButton("模拟屏幕（点右键退出）");<br />  button.addActionListener(new ActionListener() {<br />   public void actionPerformed(ActionEvent e) {<br />    try {<br />     new ScreenWindow(imgLabel);<br />    } catch (Exception e1) {<br />     JOptionPane.showConfirmDialog(null, "出现意外错误！", "系统提示", JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE);<br />    }<br />   }<br />  });<br />  JPanel pane = new JPanel();<br />  pane.setBackground(Color.WHITE);<br />  imgLabel = new JLabel();<br />  pane.add(imgLabel);<br />  JScrollPane spane = new JScrollPane(pane);<br />  this.getContentPane().add(button, BorderLayout.NORTH);<br />  this.getContentPane().add(spane);<br />  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br />  this.setSize(300, 200);<br />  this.setLocationRelativeTo(null);<br />  this.setVisible(true);<br /> }</p>
		<p> public static void main(String[] args) {<br />  new Test();<br /> }<br />}</p>
		<p>class ScreenWindow extends JFrame {</p>
		<p> private static final long serialVersionUID = -3758062802950480258L;<br /> <br /> private boolean isDrag = false;</p>
		<p> private int x = 0;</p>
		<p> private int y = 0;</p>
		<p> private int xEnd = 0;</p>
		<p> private int yEnd = 0;</p>
		<p> public ScreenWindow(final JLabel imgLabel) throws AWTException, InterruptedException {<br />  Dimension screenDims = Toolkit.getDefaultToolkit().getScreenSize();<br />  JLabel label = new JLabel(new ImageIcon(ScreenImage.getScreenImage(0, 0, screenDims.width, screenDims.height)));<br />  label.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));<br />  label.addMouseListener(new MouseAdapter() {<br />   public void mouseClicked(MouseEvent e) {<br />    if (e.getButton() == MouseEvent.BUTTON3) {<br />     dispose();<br />    }<br />   }</p>
		<p>   public void mousePressed(MouseEvent e) {<br />    x = e.getX();<br />    y = e.getY();<br />   }</p>
		<p>   public void mouseReleased(MouseEvent e) {<br />    if (isDrag) {<br />     xEnd = e.getX();<br />     yEnd = e.getY();<br />     if(x &gt; xEnd){<br />      int temp = x;<br />      x = xEnd;<br />      xEnd = temp;<br />     }<br />     if(y &gt; yEnd){<br />      int temp = y;<br />      y = yEnd;<br />      yEnd = temp;<br />     }<br />     try {<br />      imgLabel.setIcon(new ImageIcon(ScreenImage.getScreenImage(x, y, xEnd - x, yEnd - y)));<br />     } catch (Exception ex) {<br />      JOptionPane.showConfirmDialog(null, "出现意外错误！", "系统提示", JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE);<br />     }<br />     dispose();<br />    }<br />   }<br />  });<br />  label.addMouseMotionListener(new MouseMotionListener() {<br />   public void mouseDragged(MouseEvent e) {<br />    if(!isDrag)<br />     isDrag = true;<br />   }</p>
		<p>   public void mouseMoved(MouseEvent e) {<br />    /** 拖动过程的虚线选取框需自己实现 */<br />   }<br />  });<br />  this.setUndecorated(true);<br />  this.getContentPane().add(label);<br />  this.setSize(screenDims.width, screenDims.height);<br />  this.setVisible(true);<br />  this.setExtendedState(JFrame.MAXIMIZED_BOTH);<br /> }<br />}</p>
		<p>class ScreenImage {</p>
		<p> public static Image getScreenImage(int x, int y, int w, int h) throws AWTException, InterruptedException {<br />  Robot robot = new Robot();<br />  Image screen = robot.createScreenCapture(new Rectangle(x, y, w, h)).getScaledInstance(w, h, Image.SCALE_SMOOTH);<br />  MediaTracker tracker = new MediaTracker(new Label());<br />  tracker.addImage(screen, 1);<br />  tracker.waitForID(0);<br />  return screen;<br /> }<br />}<br /><br /><font color="#ff0000">截屏</font><br /><br />public class GuiCamera {<br /> private String fileName; //文件的前缀 </p>
		<p> private String defaultName = "GuiCamera";</p>
		<p> static int serialNum = 0;</p>
		<p> private String imageFormat; //图像文件的格式 </p>
		<p> private String defaultImageFormat = "png";</p>
		<p> Dimension d = Toolkit.getDefaultToolkit().getScreenSize();</p>
		<p> /**************************************************************** <br />  * 默认的文件前缀为GuiCamera，文件格式为PNG格式 <br />  * The default construct will use the default  <br />  * Image file surname "GuiCamera",  <br />  * and default image format "png" <br />  ****************************************************************/<br /> public GuiCamera() {<br />  fileName = defaultName;<br />  imageFormat = defaultImageFormat;</p>
		<p> }</p>
		<p> /**************************************************************** <br />  * @param s the surname of the snapshot file <br />  * @param format the format of the  image file,  <br />  * it can be "jpg" or "png" <br />  * 本构造支持JPG和PNG文件的存储 <br />  ****************************************************************/<br /> public GuiCamera(String s, String format) {</p>
		<p>  fileName = s;<br />  imageFormat = format;<br /> }</p>
		<p> /**************************************************************** <br />  * 对屏幕进行拍照 <br />  * snapShot the Gui once <br />  ****************************************************************/<br /> public void snapShot() {</p>
		<p>  try {<br />   //拷贝屏幕到一个BufferedImage对象screenshot <br />   BufferedImage screenshot = (new Robot())<br />     .createScreenCapture(new Rectangle(0, 0,<br />       (int) d.getWidth(), (int) d.getHeight()));<br />   serialNum++;<br />   //根据文件前缀变量和文件格式变量，自动生成文件名 <br />   String name = fileName + String.valueOf(serialNum) + "."<br />     + imageFormat;<br />   File f = new File(name);<br />   System.out.print("Save File " + name);<br />   //将screenshot对象写入图像文件 <br />   ImageIO.write(screenshot, imageFormat, f);<br />   System.out.print("..Finished!\n");<br />  } catch (Exception ex) {<br />   System.out.println(ex);<br />  }<br /> }</p>
		<p> public static void main(String[] args) {<br />  GuiCamera cam = new GuiCamera("d:\\Hello", "png");// </p>
		<p>  cam.snapShot();<br /> }<br />}<br /><br /><font color="#ff0000">透明窗体</font><br /><font color="#000000">public class TransparentBackground extends JComponent implements<br />  ComponentListener, WindowFocusListener, Runnable {<br /> private JFrame frame;</font></p>
		<p>
				<font color="#000000"> private Image background; </font>
		</p>
		<p>
				<font color="#000000"> private long lastupdate = 0; </font>
		</p>
		<p>
				<font color="#000000"> public boolean refreshRequested = true; </font>
		</p>
		<p>
				<font color="#000000"> public TransparentBackground(JFrame frame) {<br />  this.frame = frame;<br />  updateBackground();<br />  frame.addComponentListener(this);<br />  frame.addWindowFocusListener(this);<br />  new Thread(this).start();<br /> } </font>
		</p>
		<p>
				<font color="#000000"> public void componentShown(ComponentEvent evt) {<br />  repaint();<br /> } </font>
		</p>
		<p>
				<font color="#000000"> public void componentResized(ComponentEvent evt) {<br />  repaint();<br /> } </font>
		</p>
		<p>
				<font color="#000000"> public void componentMoved(ComponentEvent evt) {<br />  repaint();<br /> } </font>
		</p>
		<p>
				<font color="#000000"> public void componentHidden(ComponentEvent evt) {<br /> } </font>
		</p>
		<p>
				<font color="#000000"> public void windowGainedFocus(WindowEvent evt) {<br />  refresh();<br /> } </font>
		</p>
		<p>
				<font color="#000000"> public void windowLostFocus(WindowEvent evt) {<br />   refresh();<br /> } </font>
		</p>
		<p>
				<font color="#000000"> public void refresh() {<br />  if (frame.isVisible()) {<br />   repaint();<br />   refreshRequested = true;<br />   lastupdate = new Date().getTime();<br />  }<br /> } </font>
		</p>
		<p>
				<font color="#000000"> public void run() {<br />  try {<br />   while (true) {<br />    Thread.sleep(250);<br />    long now = new Date().getTime();<br />    if (refreshRequested &amp;&amp; ((now - lastupdate) &gt; 1000)) {<br />     if (frame.isVisible()) {<br />      Point location = frame.getLocation();<br />//      frame.setVisible(false);<br />      updateBackground();<br />//      frame.setVisible(true);<br />      frame.setLocation(location);<br />      refresh();<br />     }<br />     lastupdate = now;<br />     refreshRequested = false;<br />    }<br />   }<br />  } catch (Exception ex) {<br />   ex.printStackTrace();<br />  }<br /> } </font>
		</p>
		<p>
				<font color="#000000"> public static void main(String[] args) {<br />  JFrame frame = new JFrame("Transparent Window");<br />  frame.setUndecorated(true); </font>
		</p>
		<p>
				<font color="#000000">  TransparentBackground bg = new TransparentBackground(frame);<br />  // bg.snapBackground();<br />  bg.setLayout(new BorderLayout()); </font>
		</p>
		<p>
				<font color="#000000">  JPanel panel = new JPanel() {<br />   public void paintComponent(Graphics g) {<br />    g.setColor(Color.blue);<br />    Image img = new ImageIcon("d:/moon.gif").getImage();<br />    g.drawImage(img, 150, 150, null);<br />   // g.drawLine(0,0, 600, 500);<br />   }<br />  };<br />  panel.setOpaque(false);<br />  JLabel jl=new JLabel(new ImageIcon("d:/moon.gif"));<br />  <br />  <br />  bg.add("North", jl);<br />  bg.add("Center", panel); </font>
		</p>
		<p>
				<font color="#000000">  frame.getContentPane().add("Center", bg);<br />  frame.pack();<br />  Toolkit tk = Toolkit.getDefaultToolkit();<br />  Dimension dim = tk.getScreenSize();<br />  frame.setSize((int) dim.getWidth(), (int) dim.getHeight());<br />  frame.setLocationRelativeTo(null);<br />  frame.show();<br /> } </font>
		</p>
		<p>
				<font color="#000000"> public void updateBackground() {<br />  try {<br />   Robot rbt = new Robot();<br />   Toolkit tk = Toolkit.getDefaultToolkit();<br />   Dimension dim = tk.getScreenSize();<br />   background = rbt.createScreenCapture(new Rectangle(0, 0, (int) dim<br />     .getWidth(), (int) dim.getHeight()));<br />  } catch (Exception ex) {<br />   // p(ex.toString( ));<br />   // 此方法没有申明过，因为无法得知上下文。因为不影响执行效果，先注释掉它<br />   ex.printStackTrace();<br />  }<br /> } </font>
		</p>
		<p>
				<font color="#000000"> public void paintComponent(Graphics g) {<br />  Point pos = this.getLocationOnScreen();<br />  Point offset = new Point(-pos.x, -pos.y);<br />  g.drawImage(background, offset.x, offset.y, null);<br /> }<br />} </font>
		</p>
<img src ="http://www.blogjava.net/Sprite-bei/aggbug/93951.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sprite-bei/" target="_blank">zht</a> 2007-01-15 14:29 <a href="http://www.blogjava.net/Sprite-bei/archive/2007/01/15/93951.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>将组件保存成图片</title><link>http://www.blogjava.net/Sprite-bei/archive/2007/01/15/93942.html</link><dc:creator>zht</dc:creator><author>zht</author><pubDate>Mon, 15 Jan 2007 05:51:00 GMT</pubDate><guid>http://www.blogjava.net/Sprite-bei/archive/2007/01/15/93942.html</guid><wfw:comment>http://www.blogjava.net/Sprite-bei/comments/93942.html</wfw:comment><comments>http://www.blogjava.net/Sprite-bei/archive/2007/01/15/93942.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Sprite-bei/comments/commentRss/93942.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sprite-bei/services/trackbacks/93942.html</trackback:ping><description><![CDATA[
		<p>/**<br />     * 将某个组件上的图形或组件另存为文件<br />     * @param comp<br />     * @param filename<br />     * @return<br />     */<br />    public static boolean saveToJPEG(Component comp) {<br />        boolean result = true;<br />        try {<br />            int w = comp.getWidth();<br />            int h = comp.getHeight();<br />            BufferedImage<br />                image = (BufferedImage) comp.createImage(w, h);<br />            Graphics2D g2 = image.createGraphics();<br />            comp.print(g2);</p>
		<p>            String filename = LocalAccess.getSaveFileName(comp,"JavaComponent.jpg");<br />            if(filename==null)return false;<br />            BufferedOutputStream bos =<br />                new BufferedOutputStream(new FileOutputStream(filename));<br />            com.sun.image.codec.jpeg.JPEGImageEncoder encoder = com.sun.image.codec.jpeg.JPEGCodec.createJPEGEncoder(bos);<br />            com.sun.image.codec.jpeg.JPEGEncodeParam jep = encoder.getDefaultJPEGEncodeParam(image);<br />            jep.setQuality(1.0f, false);<br />            encoder.setJPEGEncodeParam(jep);<br />            encoder.encode(image);<br />            bos.close();<br />        }<br />        catch (Exception e) {<br />            result = false;<br />            e.printStackTrace();<br />        }<br />        return result;<br />    }<br /></p>
<img src ="http://www.blogjava.net/Sprite-bei/aggbug/93942.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sprite-bei/" target="_blank">zht</a> 2007-01-15 13:51 <a href="http://www.blogjava.net/Sprite-bei/archive/2007/01/15/93942.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>破解alloy look&amp;feel 1.4.4</title><link>http://www.blogjava.net/Sprite-bei/archive/2007/01/11/93099.html</link><dc:creator>zht</dc:creator><author>zht</author><pubDate>Thu, 11 Jan 2007 03:00:00 GMT</pubDate><guid>http://www.blogjava.net/Sprite-bei/archive/2007/01/11/93099.html</guid><wfw:comment>http://www.blogjava.net/Sprite-bei/comments/93099.html</wfw:comment><comments>http://www.blogjava.net/Sprite-bei/archive/2007/01/11/93099.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Sprite-bei/comments/commentRss/93099.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sprite-bei/services/trackbacks/93099.html</trackback:ping><description><![CDATA[
		<p>
		</p>
		<hr />
  alloy的许可证分成四个部分，每个部分之间用#号分隔，第一部分是许可证过期时间，第二部分是用户名，第三和第四部分是两个36进制的整数，其中第三部分是校验码，第四部分是一个随机数（我是这么认为的，第四部分写死成一个常量也没有什么关系）。   <br />      好了，了解了许可证的构造之后，我们来了解一下alloy检验许可证是否合法和过期的过程。   <br />      一：分离许可证的各个部分。   <br />      二：判断日期部分的长度，如果长度大于1，就构造一个过期时间，否则过期时间为null。（这下子我们就可以通过使日期部分的长度不超过1来让alloy永不过期了^-^）。   <br />      三：调用Long.parseLong(String,   int)方法解析出第三和第四部分两个36进制整数的10进制的值。   <br />      四：使用java.util.zip.CRC32来计算校验值，计算的过程是把从第四部分得到的10进值整数对127取模，然后加上第一、二两个部分（包括中间的#号），这样就构造出一个字符串，然后调用CRC32.update()方法计算这个字符串的校验值。   <br />      五：使用getValue()方法从CRC32中取得校验值，然后将这个校验值与从第三部分获得的10进制数值比较，如果相等，则校验成功。随后就是判断当前日期是否过期的操作了。   <br />      这大致就是alloy验证许可证的过程，我们反过来做一遍，就可以得到我们自己的许可证了。下面就是我写的构造许可证的方法，供大家参考。   <br />    <br />  public   String   generate(String   user)   <br />  {   <br />          String   exp   =   "x";   <br />          String   rand   =   "torresg";   <br />          long   l   =   Long.parseLong(rand,   36);   <br />          CRC32   crc32   =   new   CRC32();   <br />          crc32.update((l   %   127L   +   exp   +   "#"   +   user).getBytes());   <br />          String   checksum   =   Long.toString(crc32.getValue(),   36);   <br />          return   exp   +   "#"   +   user   +   "#"   +   checksum   +   "#"   +   rand;   <br />  }   <br />    <br />  另外就是过期时间不能为空，因为alloy中另外某个地方要对这个时间进行处理。为空的话也会验证失败。所以过期时间要使用一个长度为1的字符串。 <br /><br />com.incors.plaf.alloy.AlloyLookAndFeel.setProperty("alloy.licenseCode",<br />    "v#ej_technologies#uwbjzx#e6pck8");<br />  try {<br />   javax.swing.LookAndFeel alloyLnF = new com.incors.plaf.alloy.AlloyLookAndFeel();<p>   javax.swing.UIManager.setLookAndFeel(alloyLnF);<br />  } catch (javax.swing.UnsupportedLookAndFeelException ex) {<br />   // You may handle the exception here<br />   ex.printStackTrace();<br />  }</p><img src ="http://www.blogjava.net/Sprite-bei/aggbug/93099.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sprite-bei/" target="_blank">zht</a> 2007-01-11 11:00 <a href="http://www.blogjava.net/Sprite-bei/archive/2007/01/11/93099.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Swing 知识点</title><link>http://www.blogjava.net/Sprite-bei/archive/2007/01/10/92859.html</link><dc:creator>zht</dc:creator><author>zht</author><pubDate>Wed, 10 Jan 2007 03:39:00 GMT</pubDate><guid>http://www.blogjava.net/Sprite-bei/archive/2007/01/10/92859.html</guid><wfw:comment>http://www.blogjava.net/Sprite-bei/comments/92859.html</wfw:comment><comments>http://www.blogjava.net/Sprite-bei/archive/2007/01/10/92859.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Sprite-bei/comments/commentRss/92859.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sprite-bei/services/trackbacks/92859.html</trackback:ping><description><![CDATA[
		<p>
				<font color="#ff0000">1、界面乱码的问题解决,<br /></font>在主窗体new 之前 <br />Font font = new Font("宋体", Font.PLAIN, 12); <br />Enumeration keys = UIManager.getLookAndFeelDefaults().keys(); <br />while (keys.hasMoreElements()) { <br />Object key = keys.nextElement(); <br />if (UIManager.get(key) instanceof Font) { <br />UIManager.put(key, font); <br />} <br />} <br /><br />文件读写乱码,使用下面两个类进行读写 <br />InputStreamReader(InputStream in, String charsetName) <br />OutputStreamWriter(OutputStream out, String charsetName) <br />注意charsetName就是gb2312之类的了 <br /><font color="#ff0000">2、方法的调用者</font><br /> public static void getCaller(){   <br />     int i;   <br />     StackTraceElement stack[] = (new Throwable()).getStackTrace();   <br />     for (i=0; i &lt; stack.length; i++) {   <br />       StackTraceElement ste=stack[i];   <br />         System.out.println(ste.getClassName()+"."+ste.getMethodName()+"(...)");   <br />       System.out.println(i+"--"+ste.getMethodName());   <br />       System.out.println(i+"--"+ste.getFileName());   <br />       System.out.println(i+"--"+ste.getLineNumber());   <br />     }   <br />   }<br /><br /><font color="#ff0000">3、键盘事件</font><br /> import java.awt.BorderLayout;<br />import java.awt.GridLayout;<br />import java.awt.event.ActionEvent;<br />import java.awt.event.ActionListener;</p>
		<p>import javax.swing.*;</p>
		<p>public class T {<br /> public static void main(String[] args) {<br />  try {<br />   UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());<br />  } catch (Exception e) {<br />  }</p>
		<p>  final JTextField tf = new JTextField();<br />  tf.setEnabled(false);</p>
		<p>  JPanel p = new JPanel(new GridLayout(0, 3, 5, 5));<br />  for (int i = 0; i &lt;= 9; i++) {<br />   final JButton btn = new JButton(String.valueOf(i));<br />   p.add(btn);</p>
		<p>   btn.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(<br />     KeyStroke.getKeyStroke((char) (i + '0')), "PressKeyAction");<br />   btn.getActionMap().put("PressKeyAction", new AbstractAction() {<br />    public void actionPerformed(ActionEvent e) {<br />     btn.doClick();<br />    }<br />   });</p>
		<p>   btn.addActionListener(new ActionListener() {<br />    public void actionPerformed(ActionEvent e) {<br />     tf.setText(tf.getText() + btn.getText());<br />    }<br />   });<br />  }</p>
		<p>  JFrame f = new JFrame();<br />  JComponent contentPane = (JComponent) f.getContentPane();<br />  contentPane.setLayout(new BorderLayout(0, 5));<br />  contentPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));</p>
		<p>  f.getContentPane().add(p, BorderLayout.CENTER);<br />  f.getContentPane().add(tf, BorderLayout.NORTH);<br />  f.pack();<br />  f.setLocationRelativeTo(null);<br />  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br />  f.setVisible(true);<br /> }<br />}</p>
		<p>
				<font color="#ff0000">4、浮点数运算<br /></font> import java.math.BigDecimal;</p>
		<p>
				<br />/**<br />* 由于Java的简单类型不能够精确的对浮点数进行运算，这个工具类提供精<br />* 确的浮点数运算，包括加减乘除和四舍五入。<br />*/</p>
		<p>
				<br />public class Arith {<br /> //默认除法运算精度<br /> private static final int DEF_DIV_SCALE = 10;<br /> //这个类不能实例化<br /> private Arith() {<br /> }<br /> /**<br />  * 提供精确的加法运算。<br />  * @param v1 被加数<br />  * @param v2 加数<br />  * @return 两个参数的和<br />  */<br /> public static float add(float v1, float v2) {<br />  BigDecimal b1 = new BigDecimal(Float.toString(v1));<br />  BigDecimal b2 = new BigDecimal(Float.toString(v2));<br />  return b1.add(b2).floatValue();<br /> }</p>
		<p>
				<br /> /**<br />  * 提供精确的减法运算。<br />  * @param v1 被减数<br />  * @param v2 减数<br />  * @return 两个参数的差<br />  */<br /> public static float sub(float v1, float v2) {<br />  BigDecimal b1 = new BigDecimal(Float.toString(v1));<br />  BigDecimal b2 = new BigDecimal(Float.toString(v2));<br />  return b1.subtract(b2).floatValue();<br /> }<br /> /** <br />  * 提供精确的乘法运算。<br />  * @param v1 被乘数<br />  * @param v2 乘数<br />  * @return 两个参数的积<br />  */<br /> public static float mul(float v1, float v2) {<br />  BigDecimal b1 = new BigDecimal(Float.toString(v1));<br />  BigDecimal b2 = new BigDecimal(Float.toString(v2));<br />  return b1.multiply(b2).floatValue();<br /> }<br /> /**<br />  * 提供（相对）精确的除法运算，当发生除不尽的情况时，精确到<br />  * 小数点以后10位，以后的数字四舍五入。<br />  * @param v1 被除数<br />  * @param v2 除数<br />  * @return 两个参数的商<br />  */<br /> public static float div(float v1, float v2) {<br />  return div(v1, v2, DEF_DIV_SCALE);<br /> }<br /> /**<br />  * 提供（相对）精确的除法运算。当发生除不尽的情况时，由scale参数指<br />  * 定精度，以后的数字四舍五入。<br />  * @param v1 被除数<br />  * @param v2 除数<br />  * @param scale 表示表示需要精确到小数点以后几位。<br />  * @return 两个参数的商<br />  */<br /> public static float div(float v1, float v2, int scale) {<br />  if (scale &lt; 0) {<br />   throw new IllegalArgumentException("The scale must be a positive integer or zero");<br />  }<br />  BigDecimal b1 = new BigDecimal(Float.toString(v1));<br />  BigDecimal b2 = new BigDecimal(Float.toString(v2));<br />  return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).floatValue();<br /> }<br /> /**<br />  * 提供精确的小数位四舍五入处理。<br />  * @param v 需要四舍五入的数字<br />  * @param scale 小数点后保留几位<br />  * @return 四舍五入后的结果<br />  */<br /> public static float round(float v, int scale) {<br />  if (scale &lt; 0) {<br />   throw new IllegalArgumentException("The scale must be a positive integer or zero");<br />  }<br />  BigDecimal b = new BigDecimal(Float.toString(v));<br />  BigDecimal one = new BigDecimal("1");<br />  return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).floatValue();<br /> }<br />};</p>
		<p>
				<font color="#ff0000">5、applet获得焦点</font>
				<br />  this.addComponentListener(new ComponentListener(){</p>
		<p>   public void componentHidden(ComponentEvent e) {<br />    // TODO 自动生成方法存根<br />    <br />   }</p>
		<p>   public void componentMoved(ComponentEvent e) {<br />    // TODO 自动生成方法存根<br />    <br />   }</p>
		<p>   public void componentResized(ComponentEvent e) {<br />    // TODO 自动生成方法存根<br />    <br />   }</p>
		<p>   public void componentShown(ComponentEvent e) {<br />    // TODO 自动生成方法存根<br />    startButton.requestFocusInWindow();<br />   }<br />   <br />  });<br /> JFrame 获得焦点<br /> this.addWindowListener(new WindowAdapter()<br />{<br />        public void windowActivated(WindowEvent e)<br />        {<br />                jinput.requestFocus();<br />        } <br />});</p>
		<p>
				<font color="#ff0000">6、设定JSpinner格式</font>
				<br />((JSpinner.DefaultEditor) j.getEditor()).getTextField()<br />    .setFormatterFactory(<br />      new DefaultFormatterFactory(new NumberFormatter(<br />        new DecimalFormat("#,#"))));</p>
		<p>
				<font color="#ff0000">7、字体</font>
				<br />FontMetrics fm = label.getFontMetrics(font); // font为你所使用的字体<br />int strWidth = fm.stringWidth("字符串"); // 这样可以得到字符串的长度(像素),字符串的高度一般是字体的大小<br />int width = 200; // 矩形的长度<br />int high = 50; // 矩形的高<br />drawString("字符串", (width - strWidth) / 2, (high - font.getSize()) / 2 + font.getSize());<br /><br /><font color="#ff0000">8、translate(800,600)</font><br />   将系统坐标逻辑移到(800,600)以后再画图像就以这个逻辑原点为参照点，用完以后要translate(-800,-600)回去</p>
<img src ="http://www.blogjava.net/Sprite-bei/aggbug/92859.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sprite-bei/" target="_blank">zht</a> 2007-01-10 11:39 <a href="http://www.blogjava.net/Sprite-bei/archive/2007/01/10/92859.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>去除单击以激活 未验证</title><link>http://www.blogjava.net/Sprite-bei/archive/2007/01/09/92625.html</link><dc:creator>zht</dc:creator><author>zht</author><pubDate>Tue, 09 Jan 2007 07:26:00 GMT</pubDate><guid>http://www.blogjava.net/Sprite-bei/archive/2007/01/09/92625.html</guid><wfw:comment>http://www.blogjava.net/Sprite-bei/comments/92625.html</wfw:comment><comments>http://www.blogjava.net/Sprite-bei/archive/2007/01/09/92625.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Sprite-bei/comments/commentRss/92625.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sprite-bei/services/trackbacks/92625.html</trackback:ping><description><![CDATA[
		<p>
				<font color="#000000" size="1">&lt;html&gt;<br />&lt;head&gt;</font>
		</p>
		<p>
				<font color="#000000" size="1">&lt;meta http-equiv="Content-Type" content="text/html; charset=GBK"&gt;<br />&lt;title&gt;<br />负荷预测系统1<br />&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;</font>
		</p>
		<p>
				<font color="#000000" size="1">&lt;p  align= "center"&gt;<br /> &lt;!--&lt;script language="JavaScript" src="temp.js"&gt; --&gt;<br /> <br /> &lt;script language="JavaScript"&gt;<br /> document.write('&lt;object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"  width="100%"  height="100%" name="DFApplet"&gt;\n');<br />    document.write('&lt;param  name="code"  value="applet.NewJApplet"&gt;\n');<br />    document.write('&lt;param  name="archive"  value="."&gt;\n');<br />    document.write('&lt;param  name="codebase"  value="."&gt;\n');<br />    document.write('&lt;param  name="applet"  value="applet.NewJApplet"&gt;\n');<br />    document.write('&lt;/object&gt;\n');<br /> &lt;/script&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</font>
		</p>
<img src ="http://www.blogjava.net/Sprite-bei/aggbug/92625.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sprite-bei/" target="_blank">zht</a> 2007-01-09 15:26 <a href="http://www.blogjava.net/Sprite-bei/archive/2007/01/09/92625.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>applet 加载提示</title><link>http://www.blogjava.net/Sprite-bei/archive/2007/01/09/92622.html</link><dc:creator>zht</dc:creator><author>zht</author><pubDate>Tue, 09 Jan 2007 07:22:00 GMT</pubDate><guid>http://www.blogjava.net/Sprite-bei/archive/2007/01/09/92622.html</guid><wfw:comment>http://www.blogjava.net/Sprite-bei/comments/92622.html</wfw:comment><comments>http://www.blogjava.net/Sprite-bei/archive/2007/01/09/92622.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Sprite-bei/comments/commentRss/92622.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sprite-bei/services/trackbacks/92622.html</trackback:ping><description><![CDATA[
		<font face="Courier New" size="1">&lt;script language="JavaScript"&gt;<br />&lt;!-- Hide script from old browsers<br />　 function init(){<br />　　 // Microsoft Internet Explorer<br />　　 if (document.all){<br />　　 document.all.loading.style.visibility="hidden";<br />　　 document.all.myapplet.style.visibility="visible";<br />　　 document.applets[0].repaint();<br />　　 }<br />　　 // Netscape Navigator<br />　　 else{<br />　　 document.loading.visibility="hide";<br />　　 document.myapplet.visibility="visible";<br />　　 }<br />　 }<br />// --&gt;<br />&lt;/script&gt;<br />&lt;BODY onLoad="init()"&gt;<br />&lt;div id="loading" style="position:absolute;left:150;top:10;"&gt;<br />Please wait while Java applet loads...<br />&lt;/div&gt;<br />&lt;div id="myapplet" style="position:absolute;left:150;top:10;visibility:hidden"&gt;<br />&lt;applet code="charts.charts.class" archive="charts.jar" width="600" height="400" codebase="" VIEWASTEXT&gt;<br />&lt;Param name="xValue" value="1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,<br />23,24,25,26,27,28,29,30"&gt;<br />&lt;Param name="yValue" value="22,21,19,23,18,24,28,30,27,22,20,18,16,18,19,16,17,14,12,<br />13,16,18,19,20,16,17,13,10,14,19,25"&gt;<br />&lt;/applet&gt;<br />&lt;/div&gt;<br />&lt;/BODY&gt;<br /><br /><p>用了2个层，第一个层（id为loading）可以写上一些提示消息。而第2个层(id为myapplet)在一开始是不可见的。当applet下载好了，马上把第2个层显示出来，并把第一个层设为不可见。因此，只要这2个层大小，位置必须完全一致。就可以实现我们的目标。</p><p>　　现在我们只差最后一个问题需要解决：如何知道applet已经完全下载了呢？在IE和netscape中都有提供document.all这个属性，当应页面的全部内容（包括applets,图片，声音等）已经下载后该属性为真。好，这样，我们只需监测document.all是否为真，如果是，那就可以把消息所在的层设为不可见，而applet所在的层设为可见，并刷新applet的显示（因为先前applet的显示被隐藏了），否则则相反处理。</p></font>
<img src ="http://www.blogjava.net/Sprite-bei/aggbug/92622.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sprite-bei/" target="_blank">zht</a> 2007-01-09 15:22 <a href="http://www.blogjava.net/Sprite-bei/archive/2007/01/09/92622.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>