动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.怎 样 在APPLET 中 发EMAIL.
.使用技巧:对Java编程中的文件操.
.Push信息自动启动JAVA移动程序.
.使用消息驱动Beans(2).
.Java虚拟机深入研究.
.java的经历.
.cos 方法.
.比较RIFE与其他Web Framewo.
.JavaBean 实例.
.用JAVA实现一个分页类.
.Web编程防黑,遵循特定的web安全规.
.将 Java 应用程序迁移到 .NET(1).
.Java十年有成——谈J2ME的发展历.
.高级编程——Java多线程程序设计.
.Java Api for XML 与 XML 标准的.
.轻松掌握 Java 泛型 (第 3 部分).
.避免创建重复对象.
.Struts ‘s Tiles 使用入门完全攻.
.彻底研究Java中的正则表达式.
.通过实例论证J2ME的事件传输机制.

Swing 第三方工具设计

发表日期:2008-1-5 |


    Swing是Java为桌面开发而设计一个重要GUI工具包,整个设计是基于AWT技术上的扩展。加上Java在网络的优势和跨平台的特点,Swing已经无处不在,在Java2D的性能加强,可插入式的Look And Feel,主题(Theme)和JDK5.0"Tiger"的出现后,基于Swing的技术框架如雨后春笋诞生,像Infonode,JGoooodes都是很优秀的框架。

    很多用Swing开发的人员在设计GUI程序的时候,都遇上代码量大和代码逻辑复杂的问题,加上Swing的设计理论门槛相对比较高,令桌面程序的开发在国内不能流行,分析其技术原因如下:

    1.Swing是MVC架构的体系,一般和用户界面相关的程序,必定触发控制器(Controler),然后在模型(Model)层相应处理,这是一般最普遍的处理,也可以说,因为Swing的V和C联系得太紧密,所以一般程序员处理数据和UI事件都以Model为入口。

    2.Model要响应事件,开发人员就必须集成相应UI控件的Model,并在捕捉事件的方法里写入相应处理的代码。

    基于以上的原因和界面开发的需求是千变万化的,导致模型(Model)代码量大,并且复用性低,可调试性低等问题。所以在一些UI功能添加上,对一般的桌面程序员来说可谓"百上加斤".到底我们能不能添加一些基本功能,又不影响二次开发用户的易扩展性呢?

    本文旨在从以上问题出发,利用自己的实际的工作经验,从本人的Swing2CN开源项目中取出部分源代码做例子,希望点燃更多的聪明的火花。

    设计一个工具能让所有用的开发人员轻易扩展其控件,甚至不用添加额外的代码或者改变其设计的数据模式,是最完美的结果。到底怎么实现呢?答案是,接口。从标准的Swing控件的Model接口中的方法设计关于GUI交互的功能和改变,是不会影响二次开发人员的原有设计模式和代码。以下是我的设计思想。其中的圆圈O指的便是Model里面的接口方法。

Swing 第三方工具设计(图一)

现在就以这种思想去设计一个功能类,我们就以JTable实现列排序的功能为例子.首先,我们从TableModel知道JTable的Model基本的方法有:

addTableModelListener(TableModelListener l)
getColumnClass(int columnIndex)
getColumnCount()
getColumnName(int columnIndex)
getRowCount()
getValueAt(int rowIndex, int columnIndex)
isCellEditable(int rowIndex, int columnIndex)
removeTableModelListener(TableModelListener l)
setValueAt(Object aValue, int rowIndex, int columnIndex)
      

排序方法主要还是用到和数据相关的方法为主,并且涉及以下技术点:

  1. TableHeader,因为触发排序事件的UI是列的UI代表,其UI代表通过一个类来实现排序图标的绘画,本人倾向于用代码绘画图形,这样有机性会比图片要高.
  2. Comparable接口,用该接口来处理排序的算法和逻辑.

代码运行设计:
让UI触发排序事件,然后通知工具类,工具类通过Model接口方法处理完排序,然后再更新UI代表.这就算完成了一次排序事件.

工具类结构设计:
SortManager类构造函数就把JTable的引用带进去,这样,用户只需要生成一个SortManager对应一个JTable实例就可以添加排序功能.SortManager还提供两个带参数的构造函数,让用户能够指定哪几列或者哪一列需要排序功能.

结论


 

我写了一个测试类来显示这个工具类的效果,开发人员只需要一行代码就可以在无损害已经有的JTable结构下添加排序的功能,相当便利,能减少开发时间和代码量.但这个工具在极端的情况下是不适宜使用,(譬如TableHeader被指定时).所以,无绝对的通用,只有相对的通用.

测试的代码和效果如下:

package org.swing2cn.test;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import org.swing2cn.table.*;
public class TestSortTable extends JPanel {
    public TestSortTable() {
        init();
    }
    private void init() {
        setLayout(new BorderLayout());
        JTable table = new JTable();
        Object[][] obj=new Object[][]{{"asdas","12321","3as3","eqw22"},
        {"das2","asd","qweqw","as23"},{"aere","r32re","ewfse","werew3"}};
        DefaultTableModel model=new DefaultTableModel(obj,new Object[]{"a","b","c","d"});
        table.setModel(model);
        new KeyPlugin(table);
        JScrollPane scrPane = new JScrollPane(table);
        JButton addBTn = new JButton("新增行");
        addBtn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            }
        });
        JPanel btnPane = new JPanel();
        btnPane.add(addBtn);
        add(scrPane);
        add("South", btnPane);
    }
    public static void main(String[] args) {
        JFrame frame = new JFrame("Test");
        frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
        frame.getContentPane().add(new TestSortTable());
        frame.pack();
        frame.setVisible(true);
    }
}
      

结论



上一篇:JAVA初学基础问题 人气:412
下一篇:APTFLOW流程设计软件介绍 人气:592
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-8-29 oblog v4.6 build 20080827
2008-8-29 ASBLOG v2.5 bulid 080828
2008-8-29 时尚DJ舞曲小偷 v3.1
2008-8-29 仿代码信息分类系统 v1.0 Beta3
2008-8-29 浮梦呓语-个人网站 完整版
2008-8-29 多用户QQ空间Flash播放器
2008-8-29 美思卡企业网站管理系统高级版
2008-8-28 LDV个人相册系统 v1.6.1
2008-8-28 讯时网站管理系统CMS v3.5
2008-8-23 Mini WinMount V0.4
2008-8-23 Vista优化大师3.11正式版
2008-8-23 Wine 1.13
2008-8-23 KlipFolio 5.0 Build 5899-80
2008-8-23 Windows Sysinternals Desktops
2008-8-23 OneTap Movies1.2破解版
2008-8-23 AnnotaterPDF阅读1.1.503 破解版
2008-8-23 SoundMeter分贝测量仪 v1.0汉化破
2008-8-23 iDrum音乐节拍1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号