??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲人成黄网在线观看,亚洲AV永久无码精品一福利,亚洲精品天堂成人片AV在线播放http://m.tkk7.com/Sprite-bei/category/19046.html<font size="3"><br><font color="#ff6600">天行? 君子以自Z?lt;/font><br><br></font>zh-cnMon, 23 Apr 2007 21:55:21 GMTMon, 23 Apr 2007 21:55:21 GMT60java Swing 曲线面板(4.23更新)http://m.tkk7.com/Sprite-bei/archive/2007/04/23/112987.htmlzhtzhtMon, 23 Apr 2007 09:05:00 GMThttp://m.tkk7.com/Sprite-bei/archive/2007/04/23/112987.htmlhttp://m.tkk7.com/Sprite-bei/comments/112987.htmlhttp://m.tkk7.com/Sprite-bei/archive/2007/04/23/112987.html#Feedback2http://m.tkk7.com/Sprite-bei/comments/commentRss/112987.htmlhttp://m.tkk7.com/Sprite-bei/services/trackbacks/112987.html大家看看如果有什么问题的话跟贴反应也可以加我MSN和我交流,
也希望大家有什么好的功能徏议提出来,
我会快完善功能.
MSN见首公?br>?span>能说?br>面板Q?nbsp;  
            提供鼠标点击修改功能
            提供鼠标Ud数据跟随昄功能
            提供数据扚w修改功能(右键拖拽选取Q按键盘上下键修?
            数据修改提示曲线 (两条l色的细U?
            数据修改回溯(键盘ESC?
面板右键菜单Q?br>                  保存囄
                  颜色修改
                  标题字体修改
                  数据分时D修?br>                  是否允许修改
                  曲线跟踪提示
                  是否有数据跟t显C?br>主菜单:
            修改UImanager
数据昄表格Q?br>                  昄数据
                  修改数据(输入数据后回车或者点d的行)
树面板:删除曲线

               颜色修改
下蝲链接
jdk版本 1.6
截图Q?br>

zht 2007-04-23 17:05 发表评论
]]>
JComboBox 弹出 宽面?/title><link>http://m.tkk7.com/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://m.tkk7.com/Sprite-bei/archive/2007/04/11/109890.html</guid><wfw:comment>http://m.tkk7.com/Sprite-bei/comments/109890.html</wfw:comment><comments>http://m.tkk7.com/Sprite-bei/archive/2007/04/11/109890.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/Sprite-bei/comments/commentRss/109890.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/Sprite-bei/services/trackbacks/109890.html</trackback:ping><description><![CDATA[<p>Q{Q?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> public WideComboBox() {<br> }</p> <p> public WideComboBox(final Object items[]) {<br>  super(items);<br> }</p> <p> public WideComboBox(Vector items) {<br>  super(items);<br> }</p> <p> public WideComboBox(ComboBoxModel aModel) {<br>  super(aModel);<br> }</p> <p> private boolean layingOut = false;</p> <p> public void doLayout() {<br>  try {<br>   layingOut = true;<br>   super.doLayout();<br>  } finally {<br>   layingOut = false;<br>  }<br> }</p> <p> public Dimension getSize() {<br>  Dimension dim = super.getSize();<br>  if (!layingOut)<br>   dim.width = Math.max(dim.width, getPreferredSize().width);<br>  return dim;<br> }</p> <p> public static void main(String[] args) {<br>  JFrame jf = new JFrame();<br>  WideComboBox wc = new WideComboBox(new String[] { "11111111111111",<br>    "22222222222222", "333" });<br>  jf.getContentPane().add(wc);<br>  jf.setVisible(true);<br> }<br>}<br></p> <img src ="http://m.tkk7.com/Sprite-bei/aggbug/109890.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/Sprite-bei/" target="_blank">zht</a> 2007-04-11 14:08 <a href="http://m.tkk7.com/Sprite-bei/archive/2007/04/11/109890.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java Swing 曲线面板http://m.tkk7.com/Sprite-bei/archive/2007/04/10/109591.htmlzhtzhtTue, 10 Apr 2007 03:34:00 GMThttp://m.tkk7.com/Sprite-bei/archive/2007/04/10/109591.htmlhttp://m.tkk7.com/Sprite-bei/comments/109591.htmlhttp://m.tkk7.com/Sprite-bei/archive/2007/04/10/109591.html#Feedback2http://m.tkk7.com/Sprite-bei/comments/commentRss/109591.htmlhttp://m.tkk7.com/Sprite-bei/services/trackbacks/109591.html目前q没惛_q需要加一些别的其他功?br>大家看看如果有什么问题的话跟贴反应也可以加我MSN和我交流
也希望大家有什么好的功能徏议提出来
我会快完善功能



目前完成功能
面板Q提供鼠标点M改功?br>            数据修改提示曲线 那两条绿色的l线
            数据修改回溯 键盘ESC?br>面板菜单Q保存图?br>                  颜色修改
                  标题字体修改
                  数据分时D修?br>                  是否允许修改
                  曲线跟踪提示
树面板:删除曲线
               颜色修改
下蝲链接
jdk版本 1.6

zht 2007-04-10 11:34 发表评论
]]>
APPLET调用本地资源http://m.tkk7.com/Sprite-bei/archive/2007/02/07/98481.htmlzhtzhtWed, 07 Feb 2007 01:06:00 GMThttp://m.tkk7.com/Sprite-bei/archive/2007/02/07/98481.htmlhttp://m.tkk7.com/Sprite-bei/comments/98481.htmlhttp://m.tkk7.com/Sprite-bei/archive/2007/02/07/98481.html#Feedback2http://m.tkk7.com/Sprite-bei/comments/commentRss/98481.htmlhttp://m.tkk7.com/Sprite-bei/services/trackbacks/98481.html   
    在命令行中执行以下的语句Qjar   -cvf   MyApplet.jar   class  
   
  步骤二:Q在|页中嵌入AppletQ ?
   
    q个|页的名字叫做FileReaderApplet.htmlQ下面是嵌入Applet部分的写法:  
   
  QAPPLET  
  CODEBASE   =   "."  
  CODE   =   "jcomponent.FileReaderApplet.class"  
  ARCHIVE   ="MyClass.jar"  
  NAME   =   "TestApplet"  
  WIDTH   =   400  
  HEIGHT   =   300  
  HSPACE   =   0  
  VSPACE   =   0  
  ALIGN   =   middle  
  Q ?
  Q?APPLETQ   ?
   
   
    完成q个步骤后,q个Applet已经可以昄了。但是还不能d本地的文件系l。 ?
   
    步骤三:Q生成证书及{֐Q ?
   
    请在命o行环境下执行以下的命令:  
   
       1、keytool   -genkey   -keystore   pepper.store   -alias   pepper  
   
    q个命o用来产生一个密匙库Q执行完毕后应该在c:/admin中生一个pepper.store的文Ӟq里的pepper是我自己的名字,你可以对它进行修攏V另外在执行命o的时候还有提CZ输入密匙库的密码Q这里你一定要CQ否则后面要用的时候无法输入。 ?
   
    2、keytool   -export   -keystore   pepper.store   -alias   pepper   -file   pepper.cert  
   
    q个命o用来产生{֐时所要用的证书,同样q里的pepper也可以换成你自己需要的名字。这个命令执行完后在c:/admin中生一个pepper.cert的文件。 ?
   
    4、 ?jarsigner   -keystore   pepper.store   MyApplet.jar   pepper  
   
    q个命o用上面生的证书我们的jar文gq行了签名。 ?
   
    步骤四:Q修ҎӞ  
   
    1、 ?在c:/admin中生一个名为applet.policy的文Ӟ其内容如下:  
   
  keystore   "file:c:   /admin/pepper.store",   "JKS";  
   
  grant   signedBy   "pepper"  
  {   permission   java.io.FilePermission   "Q<ALL   FILESQ>",   "read";  
  };  
     
   
    q个文g让由pepper{֐的Applet拥有本地所有文件的L限。 ?
   
    2、 ?修改${java.home}/jre/lib/security目录下的java.securityQ找C面这两行Q ?
   
  policy.url.1=file:${java.home}/lib/security/java.policy  
  policy.url.2=file:${user.home}/.java.policy    
   
    在下面添写第三行  
   
  policy.url.3=file:c:   /admin/applet.policy    
   
    完成q个修改后我们在前面创徏的applet.policy文g才有效。 ?
   
    步骤五:Q{换html文gQ ?
   
    q行前面提到的HTMLConvert工具Q将原有的FileReaderApplet.html转化成下面的形式Q ?
   
  Q?--"CONVERTED_APPLET"--Q ?
  Q?--   CONVERTER   VERSION   1.3   --Q ?
  QOBJECT   classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"  
  WIDTH   =   400   HEIGHT   =   300   NAME   =   "TestApplet"   ALIGN   =   middle   VSPACE   =   0   HSPACE   =   0   codebase="  QPARAM   NAME   =   CODE   VALUE   =   "jcomponent.FileReaderApplet.class"   Q ?
  QPARAM   NAME   =   CODEBASE   VALUE   =   "."   Q ?
  QPARAM   NAME   =   ARCHIVE   VALUE   =   "MyApplet.jar"   Q ?
  QPARAM   NAME   =   NAME   VALUE   =   "TestApplet"   Q ?
   
  QPARAM   NAME="type"   VALUE="application/x-java-applet;version=1.3"Q ?
  QPARAM   NAME="scriptable"   VALUE="false"Q ?
  QCOMMENTQ ?
  QEMBED   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="
   
  Q?NOEMBEDQ</EMBEDQ ?
  Q?OBJECTQ ?
   
  Q?--  
  QAPPLET   CODE   =   "jcomponent.FileReaderApplet.class"   CODEBASE   =   "."   ARCHIVE   =   "MyApplet.jar"   WIDTH   =   400   HEIGHT   =   300   NAME   =   "TestApplet"   ALIGN   =   middle   VSPACE   =   0   HSPACE   =   0Q ?
   
   
  Q?APPLETQ ?
  --Q ?
  Q?--"END_CONVERTED_APPLET"--Q   ?
   
   
  大家不要看到q里的写法很复杂Q但是这些都是由HTMLConvert工具自动实现的。这个工h命o行和囑Ş界面两种q行方式。 ?
   
    好了Q现在这个Applet可以q行d文g的功能了。如果你要考虑在Internet上实现这个AppletQ那么你也不需要在所有的客户端均做上面的步骤Q你只需要在你的服务器上创徏一个目录,例如c:/adminQ将q个目录映射?a >www.testApplet.com/admin
。这里的www.testApplet.com是一个假定的|址Q将pepper.cert、pepper.store、FileReaderApplet.html、MyApplet.jar以及applet.policy攑֜q个目录中,然后修改applet.policy文g如下Q ?
   
  keystore   "http://      
  grant   signedBy   "pepper"  
  {   permission   java.io.FilePermission   "Q<ALL   FILESQ>",   "read";  
  };    
   
    3、 ?而每个客L仅仅需要修改一下它们的${java.home}/jre/lib/security目录下的java.security文g如下Q ?
   
  policy.url.1=file:${java.home}/lib/security/java.policy  
  policy.url.2=file:${user.home}/.java.policy  
  policy.url.3=   http://  
www.testApplet.com/admin/applet.policy    
   
    当然每个客户端还是需要安装JRE?而且一定要安装与Y件相W合JRE版本


zht 2007-02-07 09:06 发表评论
]]>
java 反射机制http://m.tkk7.com/Sprite-bei/archive/2007/02/06/98300.htmlzhtzhtTue, 06 Feb 2007 06:27:00 GMThttp://m.tkk7.com/Sprite-bei/archive/2007/02/06/98300.htmlhttp://m.tkk7.com/Sprite-bei/comments/98300.htmlhttp://m.tkk7.com/Sprite-bei/archive/2007/02/06/98300.html#Feedback0http://m.tkk7.com/Sprite-bei/comments/commentRss/98300.htmlhttp://m.tkk7.com/Sprite-bei/services/trackbacks/98300.htmlq用JavaBean 的最常见的问题是Q根据指定的cdQ类字段名和所对应的数据,得到该类的实例,下面的一个例子演CZq一实现?
-|Base.java //抽象基类
|Son1.java //基类扩展1
|Son2.java //基类扩展2
|Util.java
/**
* @author metaphy
* create 2005-4-14 9:06:56
* 说明Q?
*/
Q?QBase.java 抽象基类只是一个定?
public abstract class Base {
}
Q?QSon1.java /Son2.java 是已l实现的JavaBean
public class Son1 extends Base{
private int id ;
private String name ;

public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

public void son1Method(String s){
System.out.println(s) ;
}
}
Q?Q?
public class Son2 extends Base{
private int id;
private double salary;

public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
Q?QUtil.java 演示了如何根据指定的cdQ类字段名和所对应的数据,得到一个类的实?
import java.lang.reflect.Method;
public class Util {
//此方法的最大好处是没有cdSon1,Son2 可以通过参数来指定,E序里面Ҏ不用出现
public static Base convertStr2ServiceBean(String beanName,String fieldSetter,String paraValue){
Base base = null ;
try {
Class cls = Class.forName(beanName) ;
base = (Base)cls.newInstance() ;
Class[] paraTypes = new Class[]{String.class };
Method method = cls.getMethod(fieldSetter, paraTypes) ;
String[] paraValues = new String[]{paraValue} ;
method.invoke(base, paraValues) ;
} catch (Throwable e) {
System.err.println(e);
}
return base ;
}


public static void main(String[] args){
Son1 son1 =(Son1) Util.convertStr2ServiceBean("trying.reflect.Son1","setName","wang da sha");
System.out.println("son1.getName() :"+son1.getName()) ;
}
}
//调用l果Q?
//son1.getName() :wang da sha

谢谢Q希望能l大家一点启发!
Q-Q-Q-Q-Q-Q-Q-Q-Q-Q-
附:
//下面q篇文档来源于InternetQ作者不?
Reflection ?Java E序开发语a的特征之一Q它允许q行中的 Java E序对自w进行检查,或者说“自审”,q能直接操作E序的内部属性。例如,使用它能获得 Java cM各成员的名称q显C出来?
Java 的这一能力在实际应用中也许用得不是很多Q但是在其它的程序设计语a中根本就不存在这一Ҏ。例如,Pascal、C 或?C++ 中就没有办法在程序中获得函数定义相关的信息?
JavaBean ?reflection 的实际应用之一Q它能让一些工具可视化的操作Y件组件。这些工具通过 reflection 动态的载入q取?Java lg(c? 的属性?
1. 一个简单的例子
考虑下面q个单的例子Q让我们看看 reflection 是如何工作的?
import java.lang.reflect.*;
public class DumpMethods {
public static void main(String args[]) {
try {
Class c = Class.forName(args[0]);
Method m[] = c.getDeclaredMethods();
for (int i = 0; i < m.length; i++)
System.out.println(m[i].toString());
} catch (Throwable e) {
System.err.println(e);
}
}
}
按如下语句执行:
java DumpMethods java.util.Stack
它的l果输出为:
public java.lang.Object java.util.Stack.push(java.lang.Object)
public synchronized java.lang.Object java.util.Stack.pop()
public synchronized java.lang.Object java.util.Stack.peek()
public boolean java.util.Stack.empty()
public synchronized int java.util.Stack.search(java.lang.Object)
q样列Zjava.util.Stack cȝ各方法名以及它们的限制符和返回类型?
q个E序使用 Class.forName 载入指定的类Q然后调?getDeclaredMethods 来获取这个类中定义了的方法列表。java.lang.reflect.Methods 是用来描q某个类中单个方法的一个类?
2.开始?Reflection
用于 reflection 的类Q如 MethodQ可以在 java.lang.relfect 包中扑ֈ。用这些类的时候必要遵@三个步骤Q第一步是获得你想操作的类?java.lang.Class 对象。在q行中的 Java E序中,?java.lang.Class cL描述cd接口{?
下面是获得一?Class 对象的方法之一Q?
Class c = Class.forName("java.lang.String");
q条语句得到一?String cȝcd象。还有另一U方法,如下面的语句Q?
Class c = int.class;
或?
Class c = Integer.TYPE;
它们可获得基本类型的cM息。其中后一U方法中讉K的是基本cd的封装类 (?Integer) 中预先定义好?TYPE 字段?
W二步是调用诸如 getDeclaredMethods 的方法,以取得该cM定义的所有方法的列表?
一旦取得这个信息,可以进行第三步了——?reflection API 来操作这些信息,如下面这D代码:
Class c = Class.forName("java.lang.String");
Method m[] = c.getDeclaredMethods();
System.out.println(m[0].toString());
它将以文本方式打印出 String 中定义的W一个方法的原型?
在下面的例子中,q三个步骤将Z?reflection 处理Ҏ应用E序提供例证?
模拟 instanceof 操作W?
得到cM息之后,通常下一个步骤就是解军_?Class 对象的一些基本的问题。例如,Class.isInstance Ҏ可以用于模拟 instanceof 操作W:
class A {
}
public class instance1 {
public static void main(String args[]) {
try {
Class cls = Class.forName("A");
boolean b1 = cls.isInstance(new Integer(37));
System.out.println(b1);
boolean b2 = cls.isInstance(new A());
System.out.println(b2);
} catch (Throwable e) {
System.err.println(e);
}
}
}
在这个例子中创徏了一?A cȝ Class 对象Q然后检查一些对象是否是 A 的实例。Integer(37) 不是Q但 new A() 是?
3.扑ևcȝҎ
扑և一个类中定义了些什么方法,q是一个非常有价g非常基础?reflection 用法。下面的代码实Cq一用法Q?
import java.lang.reflect.*;
public class method1 {
private int f1(Object p, int x) throws NullPointerException {
if (p == null)
throw new NullPointerException();
return x;
}
public static void main(String args[]) {
try {
Class cls = Class.forName("method1");
Method methlist[] = cls.getDeclaredMethods();
for (int i = 0; i < methlist.length; i++) {
Method m = methlist[i];
System.out.println("name = " + m.getName());
System.out.println("decl class = " + m.getDeclaringClass());
Class pvec[] = m.getParameterTypes();
for (int j = 0; j < pvec.length; j++)
System.out.println("param #" + j + " " + pvec[j]);
Class evec[] = m.getExceptionTypes();
for (int j = 0; j < evec.length; j++)
System.out.println("exc #" + j + " " + evec[j]);
System.out.println("return type = " + m.getReturnType());
System.out.println("-----");
}
} catch (Throwable e) {
System.err.println(e);
}
}
}
q个E序首先取得 method1 cȝ描述Q然后调?getDeclaredMethods 来获取一pd?Method 对象Q它们分别描qC定义在类中的每一个方法,包括 public Ҏ、protected Ҏ、package Ҏ?private Ҏ{。如果你在程序中使用 getMethods 来代?getDeclaredMethodsQ你q能获得l承来的各个Ҏ的信息?
取得?Method 对象列表之后Q要昄q些Ҏ的参数类型、异常类型和q回值类型等׃难了。这些类型是基本cdq是cȝ型,都可以由描述cȝ对象按顺序给出?
输出的结果如下:
name = f1
decl class = class method1
param #0 class java.lang.Object
param #1 int
exc #0 class java.lang.NullPointerException
return type = int
-----
name = main
decl class = class method1
param #0 class [Ljava.lang.String;
return type = void
-----

4.获取构造器信息
获取cL造器的用法与上述获取Ҏ的用法类|如:
import java.lang.reflect.*;
public class constructor1 {
public constructor1() {
}
protected constructor1(int i, double d) {
}
public static void main(String args[]) {
try {
Class cls = Class.forName("constructor1");
Constructor ctorlist[] = cls.getDeclaredConstructors();
for (int i = 0; i < ctorlist.length; i++) {
Constructor ct = ctorlist[i];
System.out.println("name = " + ct.getName());
System.out.println("decl class = " + ct.getDeclaringClass());
Class pvec[] = ct.getParameterTypes();
for (int j = 0; j < pvec.length; j++)
System.out.println("param #" + j + " " + pvec[j]);
Class evec[] = ct.getExceptionTypes();
for (int j = 0; j < evec.length; j++)
System.out.println("exc #" + j + " " + evec[j]);
System.out.println("-----");
}
} catch (Throwable e) {
System.err.println(e);
}
}
}
q个例子中没能获得返回类型的相关信息Q那是因为构造器没有q回cd?
q个E序q行的结果是Q?
name = constructor1
decl class = class constructor1
-----
name = constructor1
decl class = class constructor1
param #0 int
param #1 double
-----
5.获取cȝ字段(?
扑և一个类中定义了哪些数据字段也是可能的,下面的代码就在干q个事情Q?

import java.lang.reflect.*;
public class field1 {
private double d;
public static final int i = 37;
String s = "testing";
public static void main(String args[]) {
try {
Class cls = Class.forName("field1");
Field fieldlist[] = cls.getDeclaredFields();
for (int i = 0; i < fieldlist.length; i++) {
Field fld = fieldlist[i];
System.out.println("name = " + fld.getName());
System.out.println("decl class = " + fld.getDeclaringClass());
System.out.println("type = " + fld.getType());
int mod = fld.getModifiers();
System.out.println("modifiers = " + Modifier.toString(mod));
System.out.println("-----");
}
} catch (Throwable e) {
System.err.println(e);
}
}
}
q个例子和前面那个例子非常相伹{例中用了一个新东西 ModifierQ它也是一?reflection c,用来描述字段成员的修饰语Q如“private int”。这些修饰语自n由整数描qͼ而且使用 Modifier.toString 来返回以“官方”顺序排列的字符串描q?(如“static”在“final”之?。这个程序的输出是:
name = d
decl class = class field1
type = double
modifiers = private
-----
name = i
decl class = class field1
type = int
modifiers = public static final
-----
name = s
decl class = class field1
type = class java.lang.String
modifiers =
-----
和获取方法的情况一下,获取字段的时候也可以只取得在当前cMx了的字段信息 (getDeclaredFields)Q或者也可以取得父类中定义的字段 (getFields) ?

6.ҎҎ的名U来执行Ҏ
文本到这里,所丄例子无一例外都与如何获取cȝ信息有关。我们也可以?reflection 来做一些其它的事情Q比如执行一个指定了名称的方法。下面的CZ演示了这一操作Q?
import java.lang.reflect.*;
public class method2 {
public int add(int a, int b) {
return a + b;
}
public static void main(String args[]) {
try {
Class cls = Class.forName("method2");
Class partypes[] = new Class[2];
partypes[0] = Integer.TYPE;
partypes[1] = Integer.TYPE;
Method meth = cls.getMethod("add", partypes);
method2 methobj = new method2();
Object arglist[] = new Object[2];
arglist[0] = new Integer(37);
arglist[1] = new Integer(47);
Object retobj = meth.invoke(methobj, arglist);
Integer retval = (Integer) retobj;
System.out.println(retval.intvalue());
} catch (Throwable e) {
System.err.println(e);
}
}
}
假如一个程序在执行的某处的时候才知道需要执行某个方法,q个Ҏ的名U是在程序的q行q程中指定的 (例如QJavaBean 开发环境中׃做这L?Q那么上面的E序演示了如何做到?
上例中,getMethod 用于查找一个具有两个整型参C名ؓ add 的方法。找到该Ҏq创Z相应?Method 对象之后Q在正确的对象实例中执行它。执行该Ҏ的时候,需要提供一个参数列表,q在上例中是分别包装了整?37 ?47 的两?Integer 对象。执行方法的q回的同h一?Integer 对象Q它装了返回?84?
7.创徏新的对象
对于构造器Q则不能像执行方法那栯行,因ؓ执行一个构造器意味着创徏了一个新的对?(准确的说Q创Z个对象的q程包括分配内存和构造对?。所以,与上例最怼的例子如下:
import java.lang.reflect.*;
public class constructor2 {
public constructor2() {
}
public constructor2(int a, int b) {
System.out.println("a = " + a + " b = " + b);
}
public static void main(String args[]) {
try {
Class cls = Class.forName("constructor2");
Class partypes[] = new Class[2];
partypes[0] = Integer.TYPE;
partypes[1] = Integer.TYPE;
Constructor ct = cls.getConstructor(partypes);
Object arglist[] = new Object[2];
arglist[0] = new Integer(37);
arglist[1] = new Integer(47);
Object retobj = ct.newInstance(arglist);
} catch (Throwable e) {
System.err.println(e);
}
}
}
Ҏ指定的参数类型找到相应的构造函数ƈ执行它,以创Z个新的对象实例。用这U方法可以在E序q行时动态地创徏对象Q而不是在~译的时候创建对象,q一炚w常有价倹{?
8.改变字段(?的?
reflection 的还有一个用处就是改变对象数据字D늚倹{reflection 可以从正在运行的E序中根据名U找到对象的字段q改变它Q下面的例子可以说明q一点:
import java.lang.reflect.*;
public class field2 {
public double d;
public static void main(String args[]) {
try {
Class cls = Class.forName("field2");
Field fld = cls.getField("d");
field2 f2obj = new field2();
System.out.println("d = " + f2obj.d);
fld.setDouble(f2obj, 12.34);
System.out.println("d = " + f2obj.d);
} catch (Throwable e) {
System.err.println(e);
}
}
}
q个例子中,字段 d 的D变ؓ?12.34?
9.使用数组
本文介绍?reflection 的最后一U用法是创徏的操作数l。数l在 Java 语言中是一U特D的cȝ型,一个数l的引用可以赋给 Object 引用。观察下面的例子看看数组是怎么工作的:
import java.lang.reflect.*;
public class array1 {
public static void main(String args[]) {
try {
Class cls = Class.forName("java.lang.String");
Object arr = Array.newInstance(cls, 10);
Array.set(arr, 5, "this is a test");
String s = (String) Array.get(arr, 5);
System.out.println(s);
} catch (Throwable e) {
System.err.println(e);
}
}
}
例中创徏?10 个单位长度的 String 数组QؓW?5 个位|的字符串赋了|最后将q个字符串从数组中取得ƈ打印了出来?
下面q段代码提供了一个更复杂的例子:
import java.lang.reflect.*;
public class array2 {
public static void main(String args[]) {
int dims[] = new int[]{5, 10, 15};
Object arr = Array.newInstance(Integer.TYPE, dims);
Object arrobj = Array.get(arr, 3);
Class cls = arrobj.getClass().getComponentType();
System.out.println(cls);
arrobj = Array.get(arrobj, 5);
Array.setInt(arrobj, 10, 37);
int arrcast[][][] = (int[][][]) arr;
System.out.println(arrcast[3][5][10]);
}
}
例中创徏了一?5 x 10 x 15 的整型数l,qؓ处于 [3][5][10] 的元素赋了gؓ 37。注意,多维数组实际上就是数l的数组Q例如,W一?Array.get 之后Qarrobj 是一?10 x 15 的数l。进而取得其中的一个元素,即长度ؓ 15 的数l,q?Array.setInt 为它的第 10 个元素赋倹{?
注意创徏数组时的cd是动态的Q在~译时ƈ不知道其cd?br />

zht 2007-02-06 14:27 发表评论
]]>
Serializable序列?/title><link>http://m.tkk7.com/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://m.tkk7.com/Sprite-bei/archive/2007/02/06/98195.html</guid><wfw:comment>http://m.tkk7.com/Sprite-bei/comments/98195.html</wfw:comment><comments>http://m.tkk7.com/Sprite-bei/archive/2007/02/06/98195.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/Sprite-bei/comments/commentRss/98195.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/Sprite-bei/services/trackbacks/98195.html</trackback:ping><description><![CDATA[序列化的q程是对象写入字节和从字节流中读取对象。将对象状态{换成字节之后,可以用java.io包中的各U字节流cd其保存到文g中,道到另一U程中或通过|络q接对象数据发送到另一L。对象序列化功能非常单、强大,在RMI、Socket、JMS、EJB都有应用。对象序列化问题在网l编E中q不是最Ȁ动h心的NQ但却相当重要,h许多实用意义? <p>    一Q对象序列化可以实现分布式对象。主要应用例如:RMI要利用对象序列化q行q程L上的服务Q就像在本地Zq行对象时一栗?/p><p>    二:java对象序列化不仅保留一个对象的数据Q而且递归保存对象引用的每个对象的数据。可以将整个对象层次写入字节中Q可以保存在文g中或在网l连接上传递。利用对象序列化可以q行对象的“深复制”,卛_制对象本w及引用的对象本w。序列化一个对象可能得到整个对象序列?/p><p>    从上面的叙述中,我们知道了对象序列化是java~程中的必备武器Q那么让我们从基开始,好好学习一下它的机制和用法?/p><p>    java序列化比较简单,通常不需要编写保存和恢复对象状态的定制代码。实现java.io.Serializable接口的类对象可以转换成字节流或从字节恢复,不需要在cM增加M代码。只有极数情况下才需要定制代码保存或恢复对象状态。这里要注意Q不是每个类都可序列化,有些cL不能序列化的Q例如涉及线E的cM特定JVM有非常复杂的关系?/p><p>    序列化机Ӟ</p><p>    序列化分Z大部分:序列化和反序列化。序列化是这个过E的W一部分Q将数据分解成字节流Q以便存储在文g中或在网l上传输。反序列化就是打开字节ƈ重构对象。对象序列化不仅要将基本数据cd转换成字节表C,有时q要恢复数据。恢复数据要求有恢复数据的对象实例。ObjectOutputStream中的序列化过E与字节连接,包括对象cd和版本信息。反序列化时QJVM用头信息生成对象实例Q然后将对象字节中的数据复制到对象数据成员中。下面我们分两大部分来阐qͼ</p><p>    处理对象:</p><p>    Q序列化q程和反序列化过E)</p><p>    java.io包有两个序列化对象的cRObjectOutputStream负责对象写入字节流QObjectInputStream从字节流重构对象?/p><p>    我们先了解ObjectOutputStreamcd。ObjectOutputStreamcL展DataOutput接口?/p><p>    writeObject()Ҏ是最重要的方法,用于对象序列化。如果对象包含其他对象的引用Q则writeObject()Ҏ递归序列化这些对象。每个ObjectOutputStreaml护序列化的对象引用表,防止发送同一对象的多个拷贝。(q点很重要)׃writeObject()可以序列化整l交叉引用的对象Q因此同一ObjectOutputStream实例可能不小心被h序列化同一对象。这Ӟq行反引用序列化Q而不是再ơ写入对象字节流?/p><p>    下面Q让我们从例子中来了解ObjectOutputStreamq个cd?/p><p>    // 序列?today's date C个文件中.<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 />    现在Q让我们来了解ObjectInputStreamq个cR它与ObjectOutputStream怼。它扩展DataInput接口。ObjectInputStream中的Ҏ镜像DataInputStream中读取Java基本数据cd的公开Ҏ。readObject()Ҏ从字节流中反序列化对象。每ơ调用readObject()Ҏ都返回流中下一个Object。对象字节流q不传输cȝ字节码,而是包括cd及其{֐。readObject()收到对象ӞJVM装入头中指定的类。如果找不到q个c,则readObject()抛出ClassNotFoundException,如果需要传输对象数据和字节码,则可以用RMI框架。ObjectInputStream的其余方法用于定制反序列化过E?/p><p>    例子如下Q?/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 />    定制序列化过E?</p><p>    序列化通常可以自动完成Q但有时可能要对q个q程q行控制。java可以类声明为serializableQ但仍可手工控制声明为static或transient的数据成员?/p><p>    例子Q一个非常简单的序列化类?/p><p>    public class simpleSerializableClass implements Serializable{<br />    String sToday="Today:";<br />    transient Date dtToday=new Date();<br />    }<br />    序列化时Q类的所有数据成员应可序列化除了声明为transient或static的成员。将变量声明为transient告诉JVM我们会负责将变元序列化。将数据成员声明为transient后,序列化过E就无法其加进对象字节中Q没有从transient数据成员发送的数据。后面数据反序列化时Q要重徏数据成员Q因为它是类定义的一部分Q,但不包含M数据Q因个数据成员不向流中写入Q何数据。记住,对象不序列化static或transient。我们的c要用writeObject()与readObject()Ҏ以处理这些数据成员。用writeObject()与readObject()ҎӞq要注意按写入的序dq些数据成员?/p><p>    关于如何使用定制序列化的部分代码如下Q?/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 />    完全定制序列化过E?</p><p>    如果一个类要完全负责自q序列化,则实现Externalizable接口而不是Serializable接口。Externalizable接口定义包括两个ҎwriteExternal()与readExternal()。利用这些方法可以控制对象数据成员如何写入字节流.cd现ExternalizableӞ头写入对象流中,然后cd全负责序列化和恢复数据成员,除了头以外,Ҏ没有自动序列化。这里要注意了。声明类实现Externalizable接口会有重大的安全风险。writeExternal()与readExternal()Ҏ声明为publicQ恶意类可以用这些方法读取和写入对象数据。如果对象包含敏感信息,则要格外心。这包括使用安全套接或加密整个字节流。到此ؓ臻I我们学习了序列化的基部分知识?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://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> se;<br /><img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.awt.BorderLayout;<br /><img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.awt.FlowLayout;<br /><img src="http://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.io.FileInputStream;<br /><img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.io.FileOutputStream;<br /><img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.io.ObjectInputStream;<br /><img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.io.ObjectOutputStream;<br /><img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> javax.swing.JButton;<br /><img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> javax.swing.JPanel;<br /><img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> javax.swing.JTree;<br /><img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> javax.swing.WindowConstants;<br /><img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_474_1972_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> JPanel jp;<br /><img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> JTree jTree1;<br /><img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> JPanel cen_JP;<br /><img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> JButton save_JBn;<br /><img src="http://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_614_678_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://m.tkk7.com/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://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        inst.setVisible(</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);<br /><img src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_701_728_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">super</span><span style="COLOR: #000000">();<br /><img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />        initGUI();<br /><img src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_763_1607_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_977_1263_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />                jp.setLayout(jpLayout);<br /><img src="http://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_1128_1258_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://m.tkk7.com/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://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />                    jp.add(save_JBn);<br /><img src="http://m.tkk7.com/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://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />                    save_JBn.addActionListener(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">);<br /><img src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />                }</span></span><span style="COLOR: #000000"><br /><img src="http://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_1268_1570_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">                cen_JP = new JPanel();<br /><img src="http://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">                getContentPane().add(cen_JP, BorderLayout.CENTER);<br /><img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">                {<br /><img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">                    jTree1 = new JTree();<br /><img src="http://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /></span><span style="COLOR: #000000">            }</span></span><span style="COLOR: #000000"><br /><img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />            pack();<br /><img src="http://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_1629_1657_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />            e.printStackTrace();<br /><img src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_1707_1969_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_1737_1889_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />            s.writeObject(cen_JP);<br /><img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" />            s.flush();<br /><img src="http://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/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://m.tkk7.com/images/dot.gif" /></span><span id="Codehighlighter1_1912_1965_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://m.tkk7.com/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://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            e1.printStackTrace();<br /><img src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://m.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://m.tkk7.com/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://m.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://m.tkk7.com/images/OutliningIndicators/None.gif" align="top" /></span></div><img src ="http://m.tkk7.com/Sprite-bei/aggbug/98195.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/Sprite-bei/" target="_blank">zht</a> 2007-02-06 10:23 <a href="http://m.tkk7.com/Sprite-bei/archive/2007/02/06/98195.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>颜色选择E序http://m.tkk7.com/Sprite-bei/archive/2007/02/02/97585.htmlzhtzhtFri, 02 Feb 2007 09:06:00 GMThttp://m.tkk7.com/Sprite-bei/archive/2007/02/02/97585.htmlhttp://m.tkk7.com/Sprite-bei/comments/97585.htmlhttp://m.tkk7.com/Sprite-bei/archive/2007/02/02/97585.html#Feedback0http://m.tkk7.com/Sprite-bei/comments/commentRss/97585.htmlhttp://m.tkk7.com/Sprite-bei/services/trackbacks/97585.htmlclosechose



可执行程序链?/a>

zht 2007-02-02 17:06 发表评论
]]>
JTextPane 修改字体颜色http://m.tkk7.com/Sprite-bei/archive/2007/01/25/95996.htmlzhtzhtThu, 25 Jan 2007 08:58:00 GMThttp://m.tkk7.com/Sprite-bei/archive/2007/01/25/95996.htmlhttp://m.tkk7.com/Sprite-bei/comments/95996.htmlhttp://m.tkk7.com/Sprite-bei/archive/2007/01/25/95996.html#Feedback0http://m.tkk7.com/Sprite-bei/comments/commentRss/95996.htmlhttp://m.tkk7.com/Sprite-bei/services/trackbacks/95996.html
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.UIManager;
import javax.swing.WindowConstants;
import javax.swing.text.AttributeSet;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.Document;
import javax.swing.text.EditorKit;
import javax.swing.text.MutableAttributeSet;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
import javax.swing.text.StyledEditorKit;

public class NewJFrame extends javax.swing.JFrame implements ActionListener {
 private JPanel jp1;

 private JButton color;

 private JTextPane jep;

 private JScrollPane jsp;

 private JButton font;

 /**
  * Auto-generated main method to display this JFrame
  */
 public static void main(String[] args) {
  NewJFrame inst = new NewJFrame();
  inst.setVisible(true);
 }

 public NewJFrame() {
  super();
  initGUI();
 }

 private void initGUI() {
  try {
   BorderLayout thisLayout = new BorderLayout();
   getContentPane().setLayout(thisLayout);
   setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
   {
    jp1 = new JPanel();
    getContentPane().add(jp1, BorderLayout.NORTH);
    {
     font = new JButton();
     font.addActionListener(this);
     jp1.add(font);
     font.setText("font");
    }
    {
     color = new JButton();
     jp1.add(color);
     color.addActionListener(this);
     color.setText("color");
    }
   }
   {
    jsp = new JScrollPane();
    getContentPane().add(jsp, BorderLayout.CENTER);
    {
     jep = new JTextPane();
     jsp.setViewportView(jep);
     jep.setDocument(new DefaultStyledDocument());
    }
   }
   pack();
   setSize(400, 300);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 public static void setFontSize(JEditorPane editor, int size) {
  if (editor != null) {
   if ((size > 0) && (size < 512)) {
    MutableAttributeSet attr = new SimpleAttributeSet();
    StyleConstants.setFontSize(attr, size);
    setCharacterAttributes(editor, attr, false);
   } else {
    UIManager.getLookAndFeel().provideErrorFeedback(editor);
   }
  }
 }

 public static void setForeground(JEditorPane editor, Color fg) {
  if (editor != null) {
   if (fg != null) {
    MutableAttributeSet attr = new SimpleAttributeSet();
    StyleConstants.setForeground(attr, fg);
    setCharacterAttributes(editor, attr, false);
   } else {
    UIManager.getLookAndFeel().provideErrorFeedback(editor);
   }
  }
 }

 public static final void setCharacterAttributes(JEditorPane editor,
   AttributeSet attr, boolean replace) {
  int p0 = editor.getSelectionStart();
  int p1 = editor.getSelectionEnd();
  if (p0 != p1) {
   StyledDocument doc = getStyledDocument(editor);
   doc.setCharacterAttributes(p0, p1 - p0, attr, replace);
  }
  StyledEditorKit k = getStyledEditorKit(editor);
  MutableAttributeSet inputAttributes = k.getInputAttributes();
  if (replace) {
   inputAttributes.removeAttributes(inputAttributes);
  }
  inputAttributes.addAttributes(attr);
 }

 protected static final StyledDocument getStyledDocument(JEditorPane e) {
  Document d = e.getDocument();
  if (d instanceof StyledDocument) {
   return (StyledDocument) d;
  }
  throw new IllegalArgumentException("document must be StyledDocument");
 }

 protected static final StyledEditorKit getStyledEditorKit(JEditorPane e) {
  EditorKit k = e.getEditorKit();
  if (k instanceof StyledEditorKit) {
   return (StyledEditorKit) k;
  }
  throw new IllegalArgumentException("EditorKit must be StyledEditorKit");
 }

 public void actionPerformed(ActionEvent e) {
  Object obj = e.getSource();
  if (obj == font) {
   JEditorPane editor = jep;
   setFontSize(editor, 20);
  }
  if (obj == color) {
   JEditorPane editor = jep;
   setForeground(editor, Color.red);
  }
 }

}



zht 2007-01-25 16:58 发表评论
]]>
UIManager改变http://m.tkk7.com/Sprite-bei/archive/2007/01/25/95863.htmlzhtzhtThu, 25 Jan 2007 02:38:00 GMThttp://m.tkk7.com/Sprite-bei/archive/2007/01/25/95863.htmlhttp://m.tkk7.com/Sprite-bei/comments/95863.htmlhttp://m.tkk7.com/Sprite-bei/archive/2007/01/25/95863.html#Feedback0http://m.tkk7.com/Sprite-bei/comments/commentRss/95863.htmlhttp://m.tkk7.com/Sprite-bei/services/trackbacks/95863.html class ControlPanel extends JPanel {
  JCheckBox checkBox = new JCheckBox("UIResource");

  JRadioButton motifButton = new JRadioButton("Motif"),
    windowsButton = new JRadioButton("Windows"),
    metalButton = new JRadioButton("Metal");

  public ControlPanel() {
   ActionListener listener = new RadioHandler();
   ButtonGroup group = new ButtonGroup();

   group.add(motifButton);
   group.add(windowsButton);
   group.add(metalButton);

   motifButton.addActionListener(listener);
   windowsButton.addActionListener(listener);
   metalButton.addActionListener(listener);

   add(motifButton);
   add(windowsButton);
   add(metalButton);
  }

  class RadioHandler implements ActionListener {
   public void actionPerformed(ActionEvent e) {
    JRadioButton src = (JRadioButton) e.getSource();

    try {
     if (src == motifButton)
      UIManager.setLookAndFeel("com.sun.java.swing.plaf."
        + "motif.MotifLookAndFeel");

     else if (src == windowsButton)
      UIManager.setLookAndFeel("com.sun.java.swing.plaf."
        + "windows.WindowsLookAndFeel");

     else if (src == metalButton)
      UIManager.setLookAndFeel("javax.swing.plaf.metal."
        + "MetalLookAndFeel");
    } catch (Exception ex) {
     ex.printStackTrace();
    }
    SwingUtilities.updateComponentTreeUI(getContentPane());
   }
  }
 }



zht 2007-01-25 10:38 发表评论
]]>
UndoManager试http://m.tkk7.com/Sprite-bei/archive/2007/01/25/95848.htmlzhtzhtThu, 25 Jan 2007 01:46:00 GMThttp://m.tkk7.com/Sprite-bei/archive/2007/01/25/95848.htmlhttp://m.tkk7.com/Sprite-bei/comments/95848.htmlhttp://m.tkk7.com/Sprite-bei/archive/2007/01/25/95848.html#Feedback0http://m.tkk7.com/Sprite-bei/comments/commentRss/95848.htmlhttp://m.tkk7.com/Sprite-bei/services/trackbacks/95848.htmlpackage urdo;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;
import javax.swing.UIManager;
import javax.swing.WindowConstants;
import javax.swing.event.UndoableEditEvent;
import javax.swing.event.UndoableEditListener;
import javax.swing.undo.CannotRedoException;
import javax.swing.undo.CannotUndoException;
import javax.swing.undo.UndoManager;

public class NewJFrame extends javax.swing.JFrame {
 private JPanel jp1;

 private JButton jb1;

 private JButton jb2;

 private JMenuItem jm12;

 private JMenuItem jm11;

 private JMenu jm;

 private JMenuBar jMenuBar1;

 private JTextArea jta;

 private JScrollPane jsp;

 /**
  * Auto-generated main method to display this JFrame
  */
 public static void main(String[] args) {
  NewJFrame inst = new NewJFrame();
  inst.setVisible(true);
 }

 public NewJFrame() {
  super();
  initGUI();
 }

 private void initGUI() {
  try {
   setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
   {
    jMenuBar1 = new JMenuBar();
    setJMenuBar(jMenuBar1);
    {
     jm = new JMenu();
     jMenuBar1.add(jm);
     jm.setText("jm");
     {
      jm11 = new JMenuItem(redoAction);
      jm.add(jm11);
      jm11.setText("re");
     }
     {
      jm12 = new JMenuItem(undoAction);
      jm.add(jm12);
      jm12.setText("undo");
     }
     jm12.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,
       InputEvent.CTRL_MASK));
    }
   }
   {
    jp1 = new JPanel();
    getContentPane().add(jp1, BorderLayout.NORTH);
    jp1.setPreferredSize(new java.awt.Dimension(392, 35));
    {
     jb1 = new JButton(redoAction);
     jp1.add(jb1);
     jb1.setText("redo");
    }
    //    jb1.registerKeyboardAction(redoAction, KeyStroke.getKeyStroke(
    //      KeyEvent.VK_Y, KeyEvent.CTRL_DOWN_MASK, true),
    //      JComponent.WHEN_IN_FOCUSED_WINDOW);
    {
     jb2 = new JButton(undoAction);
     jp1.add(jb2);
     jb2.setText("undo");
    }
    //    jb2.registerKeyboardAction(undoAction, KeyStroke.getKeyStroke(
    //      KeyEvent.VK_Z, KeyEvent.CTRL_DOWN_MASK, true),
    //      JComponent.WHEN_IN_FOCUSED_WINDOW);

   }
   {
    jsp = new JScrollPane();
    getContentPane().add(jsp, BorderLayout.CENTER);
    {
     jta = new JTextArea();
     jsp.setViewportView(jta);
     jta.getDocument().addUndoableEditListener(undoHandler);
    }
   }
   pack();
   setSize(400, 300);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 protected UndoableEditListener undoHandler = new UndoHandler();

 protected UndoManager undo = new UndoManager();

 private UndoAction undoAction = new UndoAction();

 private RedoAction redoAction = new RedoAction();

 class UndoHandler implements UndoableEditListener {

  /**
   * Messaged when the Document has created an edit, the edit is
   * added to <code>undo</code>, an instance of UndoManager.
   */
  public void undoableEditHappened(UndoableEditEvent e) {
   undo.addEdit(e.getEdit());
   undoAction.update();
   redoAction.update();
  }
 }

 class UndoAction extends AbstractAction {
  public UndoAction() {
   super();
   setEnabled(false);
  }

  public void actionPerformed(ActionEvent e) {
   try {
    undo.undo();
   } catch (CannotUndoException ex) {
    ex.printStackTrace();
   }
   update();
   redoAction.update();
  }

  protected void update() {
   if (undo.canUndo()) {
    setEnabled(true);
    //    System.out.println(undo.getUndoPresentationName());
    putValue(Action.NAME, undo.getUndoPresentationName());
   } else {
    setEnabled(false);
    putValue(Action.NAME, "撤消");
   }
  }
 }

 class RedoAction extends AbstractAction {
  public RedoAction() {
   super();
   setEnabled(false);
  }

  public void actionPerformed(ActionEvent e) {
   try {
    undo.redo();
   } catch (CannotRedoException ex) {
    ex.printStackTrace();
   }
   update();
   undoAction.update();
  }

  protected void update() {
   if (undo.canRedo()) {
    setEnabled(true);
    putValue(Action.NAME, undo.getRedoPresentationName());
   } else {
    setEnabled(false);
    putValue(Action.NAME, "重做");
   }
  }
 }
}



zht 2007-01-25 09:46 发表评论
]]>
截屏和透明lghttp://m.tkk7.com/Sprite-bei/archive/2007/01/15/93951.htmlzhtzhtMon, 15 Jan 2007 06:29:00 GMThttp://m.tkk7.com/Sprite-bei/archive/2007/01/15/93951.htmlhttp://m.tkk7.com/Sprite-bei/comments/93951.htmlhttp://m.tkk7.com/Sprite-bei/archive/2007/01/15/93951.html#Feedback0http://m.tkk7.com/Sprite-bei/comments/commentRss/93951.htmlhttp://m.tkk7.com/Sprite-bei/services/trackbacks/93951.html 桌面截图功能

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

/**
 * 用Java模拟出QQ桌面截图功能
 */

public class Test extends JFrame {

 private static final long serialVersionUID = -267804510087895906L;

 private JButton button = null;
 
 private JLabel imgLabel = null;

 public Test() {
  button = new JButton("模拟屏幕Q点右键退出)");
  button.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    try {
     new ScreenWindow(imgLabel);
    } catch (Exception e1) {
     JOptionPane.showConfirmDialog(null, "出现意外错误Q?, "pȝ提示", JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE);
    }
   }
  });
  JPanel pane = new JPanel();
  pane.setBackground(Color.WHITE);
  imgLabel = new JLabel();
  pane.add(imgLabel);
  JScrollPane spane = new JScrollPane(pane);
  this.getContentPane().add(button, BorderLayout.NORTH);
  this.getContentPane().add(spane);
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  this.setSize(300, 200);
  this.setLocationRelativeTo(null);
  this.setVisible(true);
 }

 public static void main(String[] args) {
  new Test();
 }
}

class ScreenWindow extends JFrame {

 private static final long serialVersionUID = -3758062802950480258L;
 
 private boolean isDrag = false;

 private int x = 0;

 private int y = 0;

 private int xEnd = 0;

 private int yEnd = 0;

 public ScreenWindow(final JLabel imgLabel) throws AWTException, InterruptedException {
  Dimension screenDims = Toolkit.getDefaultToolkit().getScreenSize();
  JLabel label = new JLabel(new ImageIcon(ScreenImage.getScreenImage(0, 0, screenDims.width, screenDims.height)));
  label.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
  label.addMouseListener(new MouseAdapter() {
   public void mouseClicked(MouseEvent e) {
    if (e.getButton() == MouseEvent.BUTTON3) {
     dispose();
    }
   }

   public void mousePressed(MouseEvent e) {
    x = e.getX();
    y = e.getY();
   }

   public void mouseReleased(MouseEvent e) {
    if (isDrag) {
     xEnd = e.getX();
     yEnd = e.getY();
     if(x > xEnd){
      int temp = x;
      x = xEnd;
      xEnd = temp;
     }
     if(y > yEnd){
      int temp = y;
      y = yEnd;
      yEnd = temp;
     }
     try {
      imgLabel.setIcon(new ImageIcon(ScreenImage.getScreenImage(x, y, xEnd - x, yEnd - y)));
     } catch (Exception ex) {
      JOptionPane.showConfirmDialog(null, "出现意外错误Q?, "pȝ提示", JOptionPane.DEFAULT_OPTION, JOptionPane.ERROR_MESSAGE);
     }
     dispose();
    }
   }
  });
  label.addMouseMotionListener(new MouseMotionListener() {
   public void mouseDragged(MouseEvent e) {
    if(!isDrag)
     isDrag = true;
   }

   public void mouseMoved(MouseEvent e) {
    /** 拖动q程的虚UK取框需自己实现 */
   }
  });
  this.setUndecorated(true);
  this.getContentPane().add(label);
  this.setSize(screenDims.width, screenDims.height);
  this.setVisible(true);
  this.setExtendedState(JFrame.MAXIMIZED_BOTH);
 }
}

class ScreenImage {

 public static Image getScreenImage(int x, int y, int w, int h) throws AWTException, InterruptedException {
  Robot robot = new Robot();
  Image screen = robot.createScreenCapture(new Rectangle(x, y, w, h)).getScaledInstance(w, h, Image.SCALE_SMOOTH);
  MediaTracker tracker = new MediaTracker(new Label());
  tracker.addImage(screen, 1);
  tracker.waitForID(0);
  return screen;
 }
}

截屏

public class GuiCamera {
 private String fileName; //文g的前~

 private String defaultName = "GuiCamera";

 static int serialNum = 0;

 private String imageFormat; //囑փ文g的格?

 private String defaultImageFormat = "png";

 Dimension d = Toolkit.getDefaultToolkit().getScreenSize();

 /****************************************************************
  * 默认的文件前~为GuiCameraQ文件格式ؓPNG格式
  * The default construct will use the default 
  * Image file surname "GuiCamera", 
  * and default image format "png"
  ****************************************************************/
 public GuiCamera() {
  fileName = defaultName;
  imageFormat = defaultImageFormat;

 }

 /****************************************************************
  * @param s the surname of the snapshot file
  * @param format the format of the  image file, 
  * it can be "jpg" or "png"
  * 本构造支持JPG和PNG文g的存?
  ****************************************************************/
 public GuiCamera(String s, String format) {

  fileName = s;
  imageFormat = format;
 }

 /****************************************************************
  * 对屏q进行拍?
  * snapShot the Gui once
  ****************************************************************/
 public void snapShot() {

  try {
   //拯屏幕C个BufferedImage对象screenshot
   BufferedImage screenshot = (new Robot())
     .createScreenCapture(new Rectangle(0, 0,
       (int) d.getWidth(), (int) d.getHeight()));
   serialNum++;
   //Ҏ文g前缀变量和文件格式变量,自动生成文g?
   String name = fileName + String.valueOf(serialNum) + "."
     + imageFormat;
   File f = new File(name);
   System.out.print("Save File " + name);
   //screenshot对象写入囑փ文g
   ImageIO.write(screenshot, imageFormat, f);
   System.out.print("..Finished!\n");
  } catch (Exception ex) {
   System.out.println(ex);
  }
 }

 public static void main(String[] args) {
  GuiCamera cam = new GuiCamera("d:\\Hello", "png");//

  cam.snapShot();
 }
}

透明H体
public class TransparentBackground extends JComponent implements
  ComponentListener, WindowFocusListener, Runnable {
 private JFrame frame;

 private Image background;

 private long lastupdate = 0;

 public boolean refreshRequested = true;

 public TransparentBackground(JFrame frame) {
  this.frame = frame;
  updateBackground();
  frame.addComponentListener(this);
  frame.addWindowFocusListener(this);
  new Thread(this).start();
 }

 public void componentShown(ComponentEvent evt) {
  repaint();
 }

 public void componentResized(ComponentEvent evt) {
  repaint();
 }

 public void componentMoved(ComponentEvent evt) {
  repaint();
 }

 public void componentHidden(ComponentEvent evt) {
 }

 public void windowGainedFocus(WindowEvent evt) {
  refresh();
 }

 public void windowLostFocus(WindowEvent evt) {
   refresh();
 }

 public void refresh() {
  if (frame.isVisible()) {
   repaint();
   refreshRequested = true;
   lastupdate = new Date().getTime();
  }
 }

 public void run() {
  try {
   while (true) {
    Thread.sleep(250);
    long now = new Date().getTime();
    if (refreshRequested && ((now - lastupdate) > 1000)) {
     if (frame.isVisible()) {
      Point location = frame.getLocation();
//      frame.setVisible(false);
      updateBackground();
//      frame.setVisible(true);
      frame.setLocation(location);
      refresh();
     }
     lastupdate = now;
     refreshRequested = false;
    }
   }
  } catch (Exception ex) {
   ex.printStackTrace();
  }
 }

 public static void main(String[] args) {
  JFrame frame = new JFrame("Transparent Window");
  frame.setUndecorated(true);

  TransparentBackground bg = new TransparentBackground(frame);
  // bg.snapBackground();
  bg.setLayout(new BorderLayout());

  JPanel panel = new JPanel() {
   public void paintComponent(Graphics g) {
    g.setColor(Color.blue);
    Image img = new ImageIcon("d:/moon.gif").getImage();
    g.drawImage(img, 150, 150, null);
   // g.drawLine(0,0, 600, 500);
   }
  };
  panel.setOpaque(false);
  JLabel jl=new JLabel(new ImageIcon("d:/moon.gif"));
  
  
  bg.add("North", jl);
  bg.add("Center", panel);

  frame.getContentPane().add("Center", bg);
  frame.pack();
  Toolkit tk = Toolkit.getDefaultToolkit();
  Dimension dim = tk.getScreenSize();
  frame.setSize((int) dim.getWidth(), (int) dim.getHeight());
  frame.setLocationRelativeTo(null);
  frame.show();
 }

 public void updateBackground() {
  try {
   Robot rbt = new Robot();
   Toolkit tk = Toolkit.getDefaultToolkit();
   Dimension dim = tk.getScreenSize();
   background = rbt.createScreenCapture(new Rectangle(0, 0, (int) dim
     .getWidth(), (int) dim.getHeight()));
  } catch (Exception ex) {
   // p(ex.toString( ));
   // 此方法没有申明过Q因为无法得知上下文。因Z影响执行效果Q先注释掉它
   ex.printStackTrace();
  }
 }

 public void paintComponent(Graphics g) {
  Point pos = this.getLocationOnScreen();
  Point offset = new Point(-pos.x, -pos.y);
  g.drawImage(background, offset.x, offset.y, null);
 }
}



zht 2007-01-15 14:29 发表评论
]]>
组件保存成囄http://m.tkk7.com/Sprite-bei/archive/2007/01/15/93942.htmlzhtzhtMon, 15 Jan 2007 05:51:00 GMThttp://m.tkk7.com/Sprite-bei/archive/2007/01/15/93942.htmlhttp://m.tkk7.com/Sprite-bei/comments/93942.htmlhttp://m.tkk7.com/Sprite-bei/archive/2007/01/15/93942.html#Feedback0http://m.tkk7.com/Sprite-bei/comments/commentRss/93942.htmlhttp://m.tkk7.com/Sprite-bei/services/trackbacks/93942.html/**
     * 某个组件上的图形或lg另存为文?br />     * @param comp
     * @param filename
     * @return
     */
    public static boolean saveToJPEG(Component comp) {
        boolean result = true;
        try {
            int w = comp.getWidth();
            int h = comp.getHeight();
            BufferedImage
                image = (BufferedImage) comp.createImage(w, h);
            Graphics2D g2 = image.createGraphics();
            comp.print(g2);

            String filename = LocalAccess.getSaveFileName(comp,"JavaComponent.jpg");
            if(filename==null)return false;
            BufferedOutputStream bos =
                new BufferedOutputStream(new FileOutputStream(filename));
            com.sun.image.codec.jpeg.JPEGImageEncoder encoder = com.sun.image.codec.jpeg.JPEGCodec.createJPEGEncoder(bos);
            com.sun.image.codec.jpeg.JPEGEncodeParam jep = encoder.getDefaultJPEGEncodeParam(image);
            jep.setQuality(1.0f, false);
            encoder.setJPEGEncodeParam(jep);
            encoder.encode(image);
            bos.close();
        }
        catch (Exception e) {
            result = false;
            e.printStackTrace();
        }
        return result;
    }



zht 2007-01-15 13:51 发表评论
]]>
破解alloy look&feel 1.4.4http://m.tkk7.com/Sprite-bei/archive/2007/01/11/93099.htmlzhtzhtThu, 11 Jan 2007 03:00:00 GMThttp://m.tkk7.com/Sprite-bei/archive/2007/01/11/93099.htmlhttp://m.tkk7.com/Sprite-bei/comments/93099.htmlhttp://m.tkk7.com/Sprite-bei/archive/2007/01/11/93099.html#Feedback0http://m.tkk7.com/Sprite-bei/comments/commentRss/93099.htmlhttp://m.tkk7.com/Sprite-bei/services/trackbacks/93099.html


  alloy的许可证分成四个部分Q每个部分之间用#号分隔,W一部分是许可证q期旉Q第二部分是用户名,W三和第四部分是两个36q制的整敎ͼ其中W三部分是校验码Q第四部分是一个随机数Q我是这么认为的Q第四部分写L一个常量也没有什么关p)? 
      好了Q了解了许可证的构造之后,我们来了解一下alloy验许可证是否合法和过期的q程? 
      一Q分许可证的各个部分? 
      二:判断日期部分的长度,如果长度大于1Q就构造一个过期时_否则q期旉为null。(q下子我们就可以通过使日期部分的长度不超q?来让alloy怸q期了^-^Q? 
      三:调用Long.parseLong(String,   int)Ҏ解析出第三和W四部分两个36q制整数?0q制的倹{? 
      四:使用java.util.zip.CRC32来计校验|计算的过E是把从W四部分得到?0q值整数对127取模Q然后加上第一、二两个部分Q包括中间的#PQ这样就构造出一个字W串Q然后调用CRC32.update()Ҏ计算q个字符串的校验倹{? 
      五:使用getValue()Ҏ从CRC32中取得校验|然后这个校验g从第三部分获得的10q制数值比较,如果相等Q则校验成功。随后就是判断当前日期是否过期的操作了? 
      q大致就是alloy验证许可证的q程Q我们反q来做一遍,可以得到我们自q许可证了。下面就是我写的构造许可证的方法,供大家参考? 
   
  public   String   generate(String   user)  
  {  
          String   exp   =   "x";  
          String   rand   =   "torresg";  
          long   l   =   Long.parseLong(rand,   36);  
          CRC32   crc32   =   new   CRC32();  
          crc32.update((l   %   127L   +   exp   +   "#"   +   user).getBytes());  
          String   checksum   =   Long.toString(crc32.getValue(),   36);  
          return   exp   +   "#"   +   user   +   "#"   +   checksum   +   "#"   +   rand;  
  }  
   
  另外是q期旉不能为空Q因为alloy中另外某个地方要对这个时间进行处理。ؓI的话也会验证失败。所以过期时间要使用一个长度ؓ1的字W串?

com.incors.plaf.alloy.AlloyLookAndFeel.setProperty("alloy.licenseCode",
    "v#ej_technologies#uwbjzx#e6pck8");
  try {
   javax.swing.LookAndFeel alloyLnF = new com.incors.plaf.alloy.AlloyLookAndFeel();

   javax.swing.UIManager.setLookAndFeel(alloyLnF);
  } catch (javax.swing.UnsupportedLookAndFeelException ex) {
   // You may handle the exception here
   ex.printStackTrace();
  }



zht 2007-01-11 11:00 发表评论
]]>
Swing 知识?/title><link>http://m.tkk7.com/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://m.tkk7.com/Sprite-bei/archive/2007/01/10/92859.html</guid><wfw:comment>http://m.tkk7.com/Sprite-bei/comments/92859.html</wfw:comment><comments>http://m.tkk7.com/Sprite-bei/archive/2007/01/10/92859.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/Sprite-bei/comments/commentRss/92859.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/Sprite-bei/services/trackbacks/92859.html</trackback:ping><description><![CDATA[ <p> <font color="#ff0000">1、界面ؕ码的问题解决,<br /></font>在主H体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 />文gdq,使用下面两个c进行读?<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 < 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 <= 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、QҎq算<br /></font> import java.math.BigDecimal;</p> <p> <br />/**<br />* ׃Java的简单类型不能够_的对点数进行运,q个工具cL供精<br />* 的点数运,包括加减乘除和四舍五入?br />*/</p> <p> <br />public class Arith {<br /> //默认除法q算_ֺ<br /> private static final int DEF_DIV_SCALE = 10;<br /> //q个cM能实例化<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 />  * 提供Q相对)_的除法运,当发生除不尽的情冉|Q精到<br />  * 数点以?0位,以后的数字四舍五入?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 />  * 提供Q相对)_的除法运。当发生除不的情况Ӟ由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 < 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 />  * 提供_的小C四舍五入处理?br />  * @param v 需要四舍五入的数字<br />  * @param scale 数点后保留几位<br />  * @return 四舍五入后的l果<br />  */<br /> public static float round(float v, int scale) {<br />  if (scale < 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); // fontZ所使用的字?br />int strWidth = fm.stringWidth("字符?); // q样可以得到字符串的长度(像素),字符串的高度一般是字体的大?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 />   系l坐标逻辑Ud(800,600)以后再画囑փ׃q个逻辑原点为参照点Q用完以后要translate(-800,-600)回去</p> <img src ="http://m.tkk7.com/Sprite-bei/aggbug/92859.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/Sprite-bei/" target="_blank">zht</a> 2007-01-10 11:39 <a href="http://m.tkk7.com/Sprite-bei/archive/2007/01/10/92859.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>去除单击以激z?未验?/title><link>http://m.tkk7.com/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://m.tkk7.com/Sprite-bei/archive/2007/01/09/92625.html</guid><wfw:comment>http://m.tkk7.com/Sprite-bei/comments/92625.html</wfw:comment><comments>http://m.tkk7.com/Sprite-bei/archive/2007/01/09/92625.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/Sprite-bei/comments/commentRss/92625.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/Sprite-bei/services/trackbacks/92625.html</trackback:ping><description><![CDATA[ <p> <font color="#000000" size="1"><html><br /><head></font> </p> <p> <font color="#000000" size="1"><meta http-equiv="Content-Type" content="text/html; charset=GBK"><br /><title><br />负荷预测pȝ1<br /></title><br /></head><br /><body></font> </p> <p> <font color="#000000" size="1"><p  align= "center"><br /> <!--<script language="JavaScript" src="temp.js"> --><br /> <br /> <script language="JavaScript"><br /> document.write('<object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"  width="100%"  height="100%" name="DFApplet">\n');<br />    document.write('<param  name="code"  value="applet.NewJApplet">\n');<br />    document.write('<param  name="archive"  value=".">\n');<br />    document.write('<param  name="codebase"  value=".">\n');<br />    document.write('<param  name="applet"  value="applet.NewJApplet">\n');<br />    document.write('</object>\n');<br /> </script><br /></body><br /></html></font> </p> <img src ="http://m.tkk7.com/Sprite-bei/aggbug/92625.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/Sprite-bei/" target="_blank">zht</a> 2007-01-09 15:26 <a href="http://m.tkk7.com/Sprite-bei/archive/2007/01/09/92625.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>applet 加蝲提示http://m.tkk7.com/Sprite-bei/archive/2007/01/09/92622.htmlzhtzhtTue, 09 Jan 2007 07:22:00 GMThttp://m.tkk7.com/Sprite-bei/archive/2007/01/09/92622.htmlhttp://m.tkk7.com/Sprite-bei/comments/92622.htmlhttp://m.tkk7.com/Sprite-bei/archive/2007/01/09/92622.html#Feedback0http://m.tkk7.com/Sprite-bei/comments/commentRss/92622.htmlhttp://m.tkk7.com/Sprite-bei/services/trackbacks/92622.html<script language="JavaScript">
<!-- Hide script from old browsers
  function init(){
   // Microsoft Internet Explorer
   if (document.all){
   document.all.loading.style.visibility="hidden";
   document.all.myapplet.style.visibility="visible";
   document.applets[0].repaint();
   }
   // Netscape Navigator
   else{
   document.loading.visibility="hide";
   document.myapplet.visibility="visible";
   }
  }
// -->
</script>
<BODY onLoad="init()">
<div id="loading" style="position:absolute;left:150;top:10;">
Please wait while Java applet loads...
</div>
<div id="myapplet" style="position:absolute;left:150;top:10;visibility:hidden">
<applet code="charts.charts.class" archive="charts.jar" width="600" height="400" codebase="" VIEWASTEXT>
<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,
23,24,25,26,27,28,29,30">
<Param name="yValue" value="22,21,19,23,18,24,28,30,27,22,20,18,16,18,19,16,17,14,12,
13,16,18,19,20,16,17,13,10,14,19,25">
</applet>
</div>
</BODY>

用了2个层Q第一个层Qid为loadingQ可以写上一些提C消息。而第2个层(id为myapplet)在一开始是不可见的。当applet下蝲好了Q马上把W?个层昄出来Qƈ把第一个层设ؓ不可见。因此,只要q?个层大小Q位|必d全一致。就可以实现我们的目标?/p>

  现在我们只差最后一个问题需要解冻I如何知道applet已经完全下蝲了呢Q在IE和netscape中都有提供document.allq个属性,当应面的全部内容(包括applets,囄Q声音等Q已l下载后该属性ؓ真。好Q这P我们只需监测document.all是否为真Q如果是Q那可以把消息所在的层设Z可见Q而applet所在的层设为可见,q刷新applet的显C(因ؓ先前applet的显C隐藏了)Q否则则相反处理?/p>

zht 2007-01-09 15:22 发表评论
]]>
վ֩ģ壺 vvվ| ޹Ʒ˾þþ| պһ| ޳aƬ߹| ߹ۿѲ| ߹ۿƵ | ձ߹ۿѸ| ѹۿ| þƵ99| AVһۿ| ޹Ʒһþ| ߹ۿƵ| ŷۺϾþþ| պСӰ߹ۿ| ĻƵ| ѿƵ| ŷպۺϾþþ| þþƷ鶹| ƵƬaaëƬ| ޾Ʒ߹ۿ| ŮڵƵվ| ޾Ʒֻ| ž޹Ʒ| 1024ƷƵר| һˮëƬѿ| ޱٸ뼤| þþþþþAv| ޹Ʒպ| ѹۿͰŮƵ| 99ƷƵ߹ۿר | Ƶվձ| ѻɫַ| þþŷղũ| ޹ƷۺϾþһ| ؼAƬëƬ69| 7x7x7x߹ۿ| ĻþƷƵ| ִӲִֻƵƵѿ | 99ƷƵ߹ۿ| 鶹69Ƶ| Ʒ޵һ|