Grape的消息设计

  Java是面向对象的语言,却不是纯面向对象的语言。为什么这么说呢?在Swing的API中,消息框被设计成静态方法。要知道静态本身就与面向对象相违背的。首先静态是不需要进行实例化的,它的初始化是在任何对象生成之前完成的。若对象中的某个类变量被定义为静态的,那么意味着该对象的所有实例共享该变量。我们可以用一个简单的例子验证,如下:

public class Cat {
private static String name = “mimi”;

public String getName() {
return name;
}

public void setName(String n) {
name = n;
}

public static void main(String[] args) {
Cat c1 = new Cat();
Cat c2 = new Cat();

System.out.println(“c1 name is ” + c1.getName());
System.out.println(“c2 name is ” + c2.getName());

c1.setName(“hoho”);

System.out.println(“c1 name is ” + c1.getName());
System.out.println(“c2 name is ” + c2.getName());
}
}

  执行上面这段程序,输出的结果为:
c1 name is mimi
c2 name is mimi
c1 name is hoho
c2 name is hoho

  再回过头来说Swing的消息框。Swing中,想要弹消息框,可以利用如下语句:

JOptionPane.showMessageDialog(parentCompent, message, title, messageType);

  JOptionPane提供了很多重载方法,用来弹出不同的消息框。就消息框而言,并不需要完全遵循面向对象的理论,因为其并不是有状态的事务,且生命周期短暂,我们不需要维护消息框的实例。因此,在Grape中,消息框也被设计为静态方法。不同的是,Grape的消息更易维护,也简化了用户调用。Grape消息框的调用方法为:


Continue Reading »

09-06-01 | 什么是GRAPE, 编程开发 | Permalink | No Comments |

JTextPane的换行问题解决

  Swing包中的JTextPane功能非常强大,利用它,可以给容易地制做html、word等文字编辑器。但是JTextPane默认情况下按下Enter键,输出的html代码中总是显示如下:

<p style=”margin-top: 0px”></p>

  margin-top: 0px的意思为上边距为0。也就是说当前行与前一行没有行间距。如果你正在制做类似Word这样的编辑器,很显然这并不是我们想要的。我们更希望<p>标签使用定义的css中的样式显示。说来惭愧,这个问题困扰了我很久,一直没有好的解决方法。曾经试图重写JTextPane的document,为其追加rule。也试过监控enter事件,并利用insertHtml插入<p>,结果都不理想。今天偶然的情况下,发现了解决方法,非常非常简单,只要在初始化JTextPane后,设置其默认文本即可。如下:

JTextPane tp = new JTextPane();
tp.setText(“<p></p>”);

  这样设置后,输出的html代码就变为<p></p>了。越是简单的东西,越难找到问题所在,就是这么简单的设置,困扰了我很久。通过这个例子,也可以举一反三,实现例如<div>等html标签的默认样式。

  希望对你有所帮助。

09-05-31 | 什么是GRAPE, 编程开发 | Permalink | No Comments |

mxjava重新开始旅程

  最近两个月,由于电信对国外主机的限制,电信用户访问我的博客会很慢。由于我自己也是电信用户,慢如蜗牛的速度,别说访问后台,就连访问首页都很困难,所认一直都没有心思去写博了。

  前两天听朋友介绍门户通可以为有流量的网站提供免费的空间,于是半信半疑地提交了申请,没想到还真的审批通过了。今天已经正式将网站搬到门户通了。不知道你们访问的速度怎么样,我这里(杭州电信)速度是非常非常的快哦。有了速度做保证,搞网站就有很大的动力了。

  当然门户通并不是有钱的慈善家,它不可能无偿地为站长提供空间。也许你在访问我的网站时,可能会弹出小广告,这并不是我希望这么做的。对此,我表示理解,毕竟人家也要生存,也要吃饭嘛。

  从今天开始mxjava将重新开始旅程,希望大家继续支持。

09-05-28 | BLOG相关 | Permalink | 2 Comments |

JavaScript关闭打开中Excel进程的思路

在JavaScript中,可以通过ActiveX对Excel进行读写操作。有时,我们可能遇到这种情况:
1、在内存中生成Excel。
2、对Excel写操作后,打开显示该Excel。
3、当用户关闭打开了的Excel后,清空进程。

由于打开显示的Excel是内存中的对象,所以在用户关闭该Excel之前,我们不能将该对象清除。若强制清除的话,打开中的Excel会被关闭。
打开Excel后,我们无法监听到用户的操作(关闭),所以我们不知道在什么时候清除这个对象。

解决思路:
我们可以将内存中的Excel文件保存为临时文件,清除内存中的对象,然后再用新的进程打开这个临时文件。
Continue Reading »

09-05-26 | 编程开发 | Permalink | No Comments |

又要换空间了

  很久没有来写东西了,先向大家说声抱歉。电信限制对国外主机访问的原因,我已经很久没有成功登录上网站了。

  看来得要重新选择一个空间,基本上没有什么需求,只要速度够快,支持PHP、MYSQL就可以了。朋友们也可以帮我推荐一下,在这里先说声谢谢了。

  不知道这么久没有更新,来这里的朋友还有多少,总之我将尽快更换服务,也会继续和大家分享我的记录。

09-05-20 | 流水账 | Permalink | 4 Comments |

Spring开发指南(PDF)

  SpringFramework 实 际 上 是 Expert  One-on-One  J2EE  Design  and Development 一书中所阐述的设计思想的具体实现。在 One-on-One 一书中,Rod Johnson 倡导 J2EE 实用主义的设计思想,并随书提供了一个初步的开发框架实现(interface21 开发包) 。而 SpringFramework 正是这一思想的更全面和具体的体现。Rod Johnson 在interface21 开发包的基础之上,进行了进一步的改造和扩充,使其发展
为一个更加开放、清晰、全面、高效的开发框架。

  本文正是针对SpringFramework的开发指南, 讲述了 SpringFramework的设计思想以及在开发中的实际使用。同时穿插了一些笔者在项目实作中的经验所得。
Continue Reading »

09-01-18 | 电子书 | Permalink | No Comments |

Flash开发最好的帮助手册(CHM)

  Flash 是一种创作工具,设计人员和开发人员可使用它来创建演示文稿、应用程序和其它允许用户交互的内容。Flash 可以包含简单的动画、视频内容、复杂演示文稿和应用程序以及介于它们之间的任何内容。通常,使用 Flash 创作的各个内容单元称为应用程序,即使它们可能只是很简单的动画。您可以通过添加图片、声音、视频和特殊效果,构建包含丰富媒体的 Flash 应用程序。

  Flash 特别适用于创建通过 Internet 提供的内容,因为它的文件非常小。Flash 是通过广泛使用矢量图形做到这一点的。与位图图形相比,矢量图形需要的内存和存储空间小很多,因为它们是以数学公式而不是大型数据集来表示的。位图图形之所以更大,是因为图像中的每个像素都需要一组单独的数据来表示。   要在 Flash 中构建应用程序,可以使用 Flash 绘图工具创建图形,并将其它媒体元素导入 Flash 文档。接下来,定义如何以及何时使用各个元素来创建设想中的应用程序。
Continue Reading »

09-01-16 | 电子书 | Permalink | No Comments |

用Java来获取真实的IP地址

  在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,将http://192.168.1.110:2046/ 的URL反向代理为 http://www.bt285.cn/ 的URL时,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1 或 192.168.1.110,而并不是客户端的真实IP。

  经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的 IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。当我们访问http://www.5q520.cn /index.jsp/ 时,其实并不是我们浏览器真正访问到了服务器上的index.jsp文件,而是先由代理服务器去访问http://192.168.1.110:2046/index.jsp ,代理服务器再将访问到的结果返回给我们的浏览器,因为是代理服务器去访问index.jsp的,所以index.jsp中通过request.getRemoteAddr()的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。
Continue Reading »

09-01-13 | 编程开发 | Permalink | 3 Comments |

重构-改善既有代码的设计(PDF)

  当我第一次知道“重构”这个词时,直觉告诉我,这是一项非常重要的技术。因为程序员写代码,虽然越来越趋于工程化,但就程序本身,还是有艺术之美的存在的。曹雪芹先生写《红楼梦》,“批阅十载,增删五次”,留下了恢弘巨著;要写出一个比较优美经典的程序,同样需要精雕细琢,提高其质量,这就是重构。

    我手头的这本《重构》,是Martin Fowler主笔的,另外有四位重构技术的专家级人物Kent Beck, John Brant, William Opdyke, Don Roberts也参与了最后几章的编写。这是一本与《设计模式》齐名的经典之作。Martin Fowler,除了是对象技术方面的专家外,还是UML和模式方面的专家。他撰写的Analysis Patterns、UML Distilled、Patterns of EntERPrise Application Architecture和Planning Extreme Programming几本书也广受赞誉。中国电力出版社出版的这本书,是由著名的侯捷先生和熊节先生翻译的。侯捷和熊节先生的翻译非常的到位,并保留了一些大家都能理解的、翻译了反而不通顺的英语单词(这好像是侯捷先生翻译的习惯),使正常水平的程序员阅读时毫无障碍。
Continue Reading »

09-01-12 | 电子书 | Permalink | 3 Comments |

Spring Framework 开发参考手册(CHM)

  即使拥有良好的工具和优秀技术,应用软件开发也是困难重重。应用开发往往牵扯到方方面面,每件事情都难以控制,而且,开发周期也很难把握(除非它的确是一个重量级的复杂应用,倒也有情可原)。Spring提供了一种轻量级的解决方案,用于建立“快装式企业应用”。在此基础上,Spring还提供了包括声明式事务管理,RMI或Web Services远程访问业务逻辑,以及可以多种方法进行的持久化数据库地解决方案。另外,Spring还有一个全功能的 MVC框架,并能透明的把 AOP 集成到你的软件中去。

  你可以把Spring当作一个潜在的一站式企业应用。或者,把Spring看作一个标准开发组件,根据自己的需要,只取用它的部分组件使用而无需涉及其他。例如,你可以利用控制反转容器在前台的展现层使用Struts,还可以只使用 Hibernate集成编码 或是 JDBC抽象层 去处理数据存储。Spring被设计成(并将继续保持)无侵入性的方式,意味着应用几乎不需要对框架进行依赖(或根据实际使用的范围,将依赖做到最小)。
Continue Reading »

09-01-07 | 电子书 | Permalink | 2 Comments |