快速业务通道

Swing通用数据验证模块 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
,另外一个是这个bean的一个属性,这个HibernateValidationUI就负责验 证这个属性。

在installUI()方法中,我们启动对属性变化的观察类,而在uninstallUI()方法里面,我们需要卸载 这个观察类。

当给定对象的属性值发生变化时,PropertyChangeHandler的propertyStateChanged()方法就会被调 用,这个功能是通过elProperty和PropertzChangeHandler相结合来实现的。在propertyStateChangeed() 方法里UI类的方法setDirty()会被调用,该方法的调用会导致UI类的状态变化,进而引发(re)painting, 之后经过一系列的方法调用传递,paintLayer(Graphics2D g2, JXLayer<jTextComponent> l)这个 方法将会被调用,这个方法要做的就是我们这个数据验证模块的核心功能:

1. 调用Hibernate Validator验证该属性。

2. 如果数据不正确,则在GUI上显示一个error icon,并且将错误信息作为tooltip展示给用户。

在第二点里面产生了一个问题,谢谢Alexp对我的指点。Swing team里面有一些规定,其中之一就是, 在paint()方法里面最好不要改变Component的状态,而setTooltip()方法将会改变 component的状态,因 此需要在paint()方法之外调用。我目前使用下来,还没有发现什么严重的错误,决定暂时不改了,回头 有时间在将这个代码翻新一下。

类中用到的Java2DIconFactory代码如下:

package de.jingge.view; import java.awt.Color; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.image.BufferedImage; public class Java2DIconFactory { public static BufferedImage createErrorIcon() {    return createErrorIcon(7, 8); } public static BufferedImage createErrorIcon(int width, int height) {    BufferedImage icon = new BufferedImage(width, height,        BufferedImage.TYPE_INT_ARGB);    Graphics2D g2 = (Graphics2D) icon.getGraphics();    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,        RenderingHints.VALUE_ANTIALIAS_ON);    g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL,        RenderingHints.VALUE_STROKE_PURE);    g2.setColor(Color.RED);    g2.fillRect(0, 0, width, height);    g2.setColor(Color.WHITE);    g2.drawLine(0, 0, width, height);    g2.drawLine(0, height, width, 0);    g2.dispose();    return icon; } }

Swing通用数据验证模块(5)

时间:2011-08-13 葛京

没什么太多好解释的,就是使用Java 2D画一个Error icon。

接着,我们需要编写一个Factory类,构建一个JTextField,尽量把复杂技术封装起来,这样程序员开 发起来可以提高效率,代码如下:

package de.jingge.view; import javax.swing.JTextField; import javax.swing.text.JTextComponent; import org.jdesktop.beansbinding.AutoBinding; import org.jdesktop.beansbinding.BeanProperty; import org.jdesktop.beansbinding.BindingGroup; import org.jdesktop.beansbinding.Bindings; import org.jdesktop.beansbinding.ELProperty; import org.jdesktop.jxlayer.JXLayer; import static org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.*; public class GuiComponentFactory { public static JXLayer<jTextComponent> createTextField(      BindingGroup bindingGroup, Object sourceObject,      String sourceProperty) {    JTextField field = new JTextField();    AutoBinding binding = Bindings.createAutoBinding(READ_WRITE,        sourceObject, ELProper

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号