对于未知技术的原理,我总喜欢自己想像它是如何实现的。我上学时互联网搜索技术还没有怎么流行。大家学习新技术的方法,总是第一去查教科书,第二去找论文,第三去问师兄。而我想知道的技术往往都是教科书上找不到,论文中很少提及的,师兄们很少去想的事情。于是很多时候就自己想像它们是如何实现的。
    图形界面设计技术对我来说就是这样。我很早以前就对这种技术很感兴趣,但是能够查找到的资源很少。我常常自己冥想图形设计界面是如何画出来的;描述界面的元数据和代码是如何解析和映射的;界面组件属性是如何设置和查看的。后来随着对于Swing原理和技术的深入了解,使得我对实现界面设计工具越来越胸有成主,终于在2002年某个时候,大胆动手,一气呵成。后来又分别在2003年和2005年分别做过一个,对于其中具体实现技术又有了更深刻的理解。
   言归正传,前文提到的三个问题也是Swing界面设计工具首先要解决三个问题。
   Swing图形设计工具界面的绘制一般使用Swing的Renderer思想实现。Renderer思想在前面许多文章中都有提及,其基本原理是将渲染组件的图形对象传递给其他组件诸如paint、paintAll、paintChildren、paintComponent等渲染方法,让该组件代理完成具体界面的绘制。这种技术经常在JTable、JList、JTree和JComboBox等复杂Swing组件中使用。Renderer思想是代码复用和动态绑定思想在Swing架构中的具体体现。它包含的一个深层含义是,对于具体组件外观的绘制,负责渲染的宿主组件不需要知道被绘制组件的绘制是如何进行的,只要将自己的图形设备对象传递给被绘制组件的渲染方法就可以了。当然现实中的图形界面设计工具还需要渲染其他辅助图形,如当前选定组件的边框等。而这些都不会是什么问题了。
   因此Swing界面设计工具一般首先要在内存中构建被设计界面的组件树,当要绘制设计工具的界面时,只需将其Graphics对象传递给组件树顶层容器的paint方法就可以了。
   如何构建被设计界面组件树呢?这个界面组件树的数据结构由描述界面的元数据,甚至是界面源代码码解析生成。界面元数据或源代码的解析生成是界面设计工具中最关键的技术之一。目前主要有三种解决方法。第一种是Delphi、VB为代表的资源文件方式,第二种是NetBeans Mattise为代表的xml界面描述文件方式,第三种是Eclipse VE为代表的代码解析和生成技术。Java界面设计工具一般采用后两种方式。
   界面描述文件方法相对比较简单。其核心思想是将界面组件树采用xml文件(或其它格式)的方式保存起来,以后或者预先生成静态界面源代码代码,或者在运行时根据它动态生成界面。由于xml的解析要比java代码的解析简单得多,所以采用这种方式实现比较简单,而且界面设计动作容易控制。缺点是必须维持描述文件和源代码文件的同步,另外这种xml配置文件语法结构往往是非公开的,使得它设计的界面文件不能被其他界面设计工具所复用。另外程序员不能随意修改生成代码,描述文件和源代码之间生成关系是单方向的。
   第三种直接将Java界面源代码解析成组件数。这种方法也有两种做法,一种是对代码进行语法语义分析,并构建出要设计的界面组件树来;一种是使用Java编译器将源文件编译成最终class,使用类加载器动态加载并反射生成最终组件树。前者缺点是非常复杂,需要丰富编译知识;优点是不需要将源代码编译通过。后者优点是解析非常简单,全部交给了编译器完成;缺点是如果源码存在编译错误,就无法最终生成设计界面。
   第三个基本技术,即组件属性的反射一般使用Java Beans技术实现。Java平台提供了解决界面设计工具组件反射的工具,如BeanIntrospector、BeanDescriptor等类,它们建立在Java反射技术的基础上,提供解析和设置JavaBean(主要是组件对象)属性的机制。用来查看和设置组件属性的控件通常称作属性页,在Swing可以通过表格JTable结合Renderer/Editor思想实现。
   今天的文章先就Swing界面设计工具的基本思想和技术做一个简单的概述,后面将就这三个方面的技术在图形界面设计工具的应用进行详细地描述。

Swing界面设计工具相关推荐

  1. android零碎要点---android开发者的福音,59_1 Android的界面设计工具,直接拖拉就可以设计界面,Java技术qq交流群:JavaDream:251572072

    Java技术qq交流群:JavaDream:251572072 2013/5/16 59_1 Android的界面设计工具 -------------------------------------- ...

  2. web界面设计工具_您应该了解的14个Web设计工具

    web界面设计工具 Our time is very limited and we don't try most awesome tools available on the market becau ...

  3. 设计师常用的7款界面设计工具!

    不同的界面设计工具都有其独特的优点和不足之处.本文为大家介绍设计师常用的7款界面设计工具:即时设计是一款在线UI界面设计工具,拥有中文界面和丰富的社区资源,适合初学者和专业设计师使用.Sketch具有 ...

  4. 10个超棒的界面设计工具

    你是否还在为找不到合适的界面设计工具而发愁?今天为大家送来了福利,盘点了以下 10 个非常好用的界面设计工具,相信能让你的 UI 设计工作如虎添翼,大大提升开发效率. Kendo UI Kendo U ...

  5. python制作软件界面_python界面设计工具Qtdesigner

    QtDesigner Qtdesigner是python中的界面设计工具.创建的界面保存为ui类型的文件,再用Pyuic工具把UI界面文件转化为py代码. 安装PyQt5-tools 先要安装pyqt ...

  6. java 桌面图标插件_盘点10个非常强大的界面设计工具

    你是否还在为找不到合适的界面设计工具而发愁?今天,慧都小编为大家送来了福利,盘点了以下10个非常好用的界面设计工具,相信能让你的UI设计工作如虎添翼,大大提升开发效率. Kendo UI是Teleri ...

  7. 可视化界面设计工具-物联网实训教学辅助工具-物联网实训室

    产品简介 可视化界面设计工具是辅助师生用来构建物联网应用程序的一个教学工具,它采用图形化界面来代替代码开发界面,通过拖拽.移动一些控件与控件节点,来过完成一个页面的设计.它非常适合物联网初学者学者使用 ...

  8. sketch软件_UI界面设计工具都在这里了,Sketch、XD、Figma哪个好?

    本文章转自:网易雷火UX用户体验中心 地址:https://mp.weixin.qq.com/s/HaQQSPCbByo1R9Zh6J336Q 好工具让点子漂亮着陆 十年前,那时候的设计师还只有PS一 ...

  9. java怎么设计好看的界面,javaswing酷炫界面 java swing界面设计

    java swing怎样开发出漂亮的界面 Swing 支持切换界面风格啊 默认的是Metal风格,确实不好看 你可以切换为Windows风格,看起来和Windows上的程序就是一样滴了,还可以切换为苹 ...

  10. wxWidgets界面设计工具DialogBlocks

    原文请参考: http://www.cppblog.com/zyzx/archive/2009/03/12/76348.html // * create by zyzx // * 2009-3-12 ...

最新文章

  1. docker停止、删除容器、删除镜像 一看就理解
  2. Cocos2d-x-3.x特性变化
  3. 灰度图像归一化到0~255(对比度拉伸)的OpenCV代码实现
  4. Graph Embedding方案之DeepWalk
  5. 第三章 图论【未完成】
  6. 聚类技术---复杂网络社团检测_数据挖掘的技术有很多种,常用的数据挖掘技术就这13种...
  7. 自定义列表字段类型(3)
  8. zbb20180117 汉字转拼音 pinyin4
  9. java socket ftp登录_基于java socket的简单FTP功能实现
  10. UltraEdit(UE编辑器)常用快捷键一览
  11. c html 转 pdf,HTML 转 PDF
  12. 【UAV】第一台穿越机QAV250组装记录v1.0
  13. html表格打印自动换行,html 表格自动换行问题
  14. 《活法》 -豆瓣评分8.4
  15. signature=530d9c5e7e99d796faa35352560aede4,Visual Detection of Volcanic Plumes
  16. 直播app代码公布:视频直播源码转盘功能的实现
  17. Quartz的整合与使用
  18. 客厅与阳台之间的设计施工,要不要打通呢?
  19. 如何对齐word封面的下划线(word标尺如何使用)
  20. 莫尔斯编码的c语言实现,C程序-蓝桥-摩尔斯电码

热门文章

  1. 50种让你的网站被关注的方法
  2. 2021年西式面点师(中级)考试题库及西式面点师(中级)考试试题
  3. 2014年总结——回眸过去
  4. beini奶瓶-无线网络蹭网破解-简明说明
  5. java跳转页面_几种方式实现Javaweb页面跳转
  6. 雅诗兰黛公司实现里程碑式的气候目标 – 净零碳排放、RE100 – 并制定新的科学碳目标
  7. 科研必备之图像局部区域放大——画中画形式
  8. sMRI影像数据3维CNN卷积
  9. 传统手绘建模与次世代建模技术与流程的区别,在未来游戏行业中作为建模人如何做出职业规划
  10. 微信小程序自动回复用户消息