基于Java的界面布局DSL设计与实现

界面设计应该是一项充满创造性、富有乐趣的工作,但是却往往被认为非常的枯燥和繁琐。究其原因,是因为界面布局领域所采用的描述概念和具体的实现语言之间存在很大的语义隔阂。而一般的界面开发工具提供的所见即所得以及界面布局管理器等方案也无法很好地解决这个问题。

在本文中,我们会给出一种更好的解决方案,我们不是去试图把界面设计者头脑中的设计概念和样式逐步降级、分解成所使用的实现语言能够理解的低层概念,也不是提供一些已经完成的、确定的但难以扩充和更改的布局样式库供界面设计者使用。我们所提供的是一种专门用于描述高层界面设计样式的语言。通过这种语言,界面设计者可以直接、明确地描述出他们头脑中的布局设计样式;通过这种语言,界面设计者可以自己方便地、灵活地制定自己需要的布局样式。此外,本文中给出的设计思想对于其他领域的设计也有很好的借鉴作用。

创造性,还是乏味?

界面设计是一项非常有创造性,甚至富有艺术性的工作,一个简洁、易用、漂亮的界面在带给使用者方便的同时,也会给界面设计者带来极大的成就感。但是,在现实中,情况似乎并非如此,很多人都认为做界面是一项非常繁琐、机械、乏味的工作,并千方百计地去逃避界面相关的工作。这是为什么呢?

原因很简单,因为做界面其实涉及两项工作,一项是界面的一些设计创意,包括界面的布局样式以及和使用者的交互方式,这项工作充满挑战和乐趣。但是,这些设计创意最终是要落实到实现上的,这就是第二项工作。此时,你头脑中那些清晰、完整的设计概念开始变得琐碎,你不得不和那些低层次的坐标位置打交道。更糟糕的是,当你好不容易做好了一个界面,但是发现其中某些元素的布局需要一些调整时,这个你本应认为是一个很简单的改变却造成大量重复的低层次坐标位置更改时,你肯定会认为做界面是多么的机械和乏味呀!

其实,造成这种认识的根源在于界面设计创意和实现这些创意概念的语言之间存在很大的断层。这样,在具体实现时,你就必须得把这些清晰、完整的布局样式降级成一些琐碎、没有什么意义的低层次的坐标值,使得实现语言能够理解。这项工作不仅乏味,而且最终的实现也非常的脆弱 —— 一个在布局样式层面非常简单的更改,就会造成实现层面的巨大变动。比如:我们可以说把一组元素同时按比例缩小 10%,做过界面的朋友肯定知道这个更改意味着什么。

为了应对这个断层的问题,目前几乎所有的涉及界面制作的开发工具都提供了相同的解决方法:可视化的界面设计工具以及布局管理器。但是这两种方法都没有从根本上解决这个问题。

可视化界面设计工具确实避免了不少繁琐的界面元素摆放工作,但是对于专业的界面设计来说,通过拖放设计出来的界面在准确度和规范性上都有待提高,此外还有更为重要的一点,那就是存在于设计者头脑中的布局样式仍然没有被明确地描述出来,而是被降级成一个个摆放在一起的零散的组件,虽然这些组件本身是可视的。这个语义断层的存在同样会使得通过可视化界面设计工具设计出来的界面非常脆弱。

布局管理器试图通过提供一些常用的布局样式来解决这个问题。但是,这种做法非常僵化,也就是说你只能使用现有的布局管理器,如果它们无法满足你的要求,你也无法自己定制。此外,这些布局管理器仅仅适合于一些简单的情况。对于一些复杂的布局样式来说,它们的描述能力就显得非常的不足。那些曾经和 GridBagLayOut 斗争过的朋友对此肯定深有体会。

在本文中,我们会给出一种更好的解决方案,我们不是去试图把界面设计者头脑中的设计概念和样式逐步降级、分解成所使用的实现语言能够理解的低层概念,也不是提供一些已经完成的、确定的但难以扩充和更改的布局样式库供界面设计者使用。我们所提供的是一种专门用于描述高层界面设计样式的语言。通过这种语言,界面设计者可以直接、明确地描述出他们头脑中的布局设计样式,通过这种语言,界面设计者可以自己方便地、灵活地制定自己需要的布局样式。也就是说,本来仅存在于界面设计者头脑中的抽象布局样式,现在也变得可描述,可编程了。

界面布局语言介绍

在学习界面布局语言的设计之前,先来了解一下该语言的使用是非常有帮助的。我们的界面布局语言非常简单,简单到只有一种原子:Component。Component 是一种基本的布局元素,可以对 Component 进行平移和伸缩,使其和给定的一个布局空间 Rectangle 匹配。比如对于 Button 这个 Component 来讲,它具有传统按钮的外观,但是它在布局上所占的实际空间则是由为其指定的 Rectangle 决定的。此外,Component 要最终在界面上显示出来,就必须有一个物理上的 Container。也就是说,只要给定了一个 Rectangle 和一个 Container,一个 Component 就可以在界面上指定的布局位置呈现出来。

例如,当我们使用布局语言在一个 JFrame 上坐标位置为 (0,0) 展示一个 width 为 200,height 为 60 的按钮时,我们可以这样来描述(为了简洁起见,后面的代码实例中均略去 Layout 名字空间前缀):

Button().title("button1").at(0,0,200,60).in(this.getContentPane());

其执行结果如下图所示:

图 1. Component 示例

时间: 2024-10-03 16:21:44

基于Java的界面布局DSL设计与实现的相关文章

手机客户端的两种主要的界面布局与设计方式

本文主要讨论手机手机客户端的两种主要的界面布局与设计方式,对于手机设计师来说,此类文章比较少见,当然其中对于用于体验与可用性的实现依然很普遍. 手机产品设计与传统的桌面和web产品设计相比,最显著的约束是设计空间的急剧缩小.打个比方,这就像从一个100平米的房子搬到5平米的单间,东西没少一样,可以施展的空间却小了几十倍.更重要的是,在这样一个小空间里,你不能把东西胡乱摆放,要依旧保持它们的清晰.合理.简洁.美观.借用<用户体验的要素>中的名词,这涉及到"框架层"的设计问题,

源代码-基于JAVA的电子商城的设计

问题描述 基于JAVA的电子商城的设计 求基于Java的电子商城设计的源代码,最好是可以直接跑起来的,代码不要太复杂,简单易懂,求大神资源! 解决方案 关于商城系统中商品类别的设计 解决方案二: 看看这个 java开发SHOP电子商城网站平台shop++http://www.zuidaima.com/share/2043180788730880.htm 解决方案三: google里面输入完整下面一行 site:download.csdn.net java 商城 就有一波源代码赶来. 解决方案四:

ejb-请问基于Java EE的构件规范设计开发构件,指的是使用EJB框架开发构件吗?

问题描述 请问基于Java EE的构件规范设计开发构件,指的是使用EJB框架开发构件吗? 我现在要完成的任务是开发一个可重用构件,这个构件要实现的功能是系统中一个数据处理模块.要求在Java EE 支撑平台下开发.我现在不太能理解这个构件的开发过程.查了资料得知javabean和ejb都可以用Java语言开发组件.javabean比较简单是一般和JSP配合的,开发比较小型的组件使用的.EJB更为复杂功能也全面,但是我的这个系统不是分布式的,也不需要与服务器进行交互.用EJB开发是不是有些不机智?

java图形界面之布局设计_java

在界面设计中,一个容器要放置许多组件,为了美观,为组件安排在容器中的位置,这就是布局设计.java.awt中定义了多种布局类,每种布局类对应一种布局的策略.常用的有以下布局类: •FlowLayout,依次放置组件. •BoarderLayout,将组件放置在边界上. •CardLayout,将组件像扑克牌一样叠放,而每次只能显示其中一个组件. •GridLayout,将显示区域按行.列划分成一个个相等的格子,组件依次放入这些格子中. •GridBagLayout,将显示区域划分成许多矩形小单元

Flex3 界面布局教程_Flex

对于一个拥有丰富组件的GUI设计工具来说,界面的布局技术成为界面美化的一个重要方面.Flex从控件的功能上大致提供了两种方法:容器(控制布局),组件(提供GUI实质功能处理).使用容器分层次管理GUI是当前的趋势,Flex也使用了此种方式,主观上我们认为它把我们界面上的组件通过容器进行了分组或分类布局管理. 接下来,我将通过简单的示例逐个介绍各种界面布局的设计. Canvas layout 容器 Canvas的界面布局,它定义了一个矩形框架的区域,用来放置用户的容器和控件.不像其他的组件,你不能

基于java语音缓存系统的研究与设计,怎么写毕业论文???是否需要做一个系统

问题描述 基于java语音缓存系统的研究与设计,怎么写毕业论文???是否需要做一个系统 这个东西是什么>??是否需要做出一系统,这个论文怎么写,谁帮写好能通过重谢 解决方案 这个应该是不需要做一个系统的,这并不是一个项目或者安卓的app,并不是偏向实践方向的,而是更偏向理论放心吧.个人理解,具体的建议你问问你的导师吧 解决方案二: 如果你什么都不会,那就胡乱抄抄类似的文章吧google总会用吧.http://www.docin.com/p-65599058.html 解决方案三: butaiqi

代码-Java图形界面 简易BMI计算器怎样设计算法

问题描述 Java图形界面 简易BMI计算器怎样设计算法 老师出差去了 布置作业做一个简易BMI计算器 写了半天才写出一个图形界面 不知道怎样实现键盘录入身高.体重,点击评估按钮得到BMI和结果(结果输出的是胖,瘦,正常三种情况) 代码.界面如下: 解决方案 你的核心问题是如何对按钮进行响应,需要看下ActionListener的相关方法. public class BMI extends JFrame{ private JLabel lblHeight; private JLabel lblW

框架-关于滚动条与java界面布局的问题

问题描述 关于滚动条与java界面布局的问题 关于带滚动条的面板和排版的问题. 这个问题怎么解啊 补充一下,如果是手动输入,即使出现了滚动条也不会对布局产生影响.但是使用setText()或append()就会变成那样. 解决方案 滚动条界面

谈一谈WEB的交互设计和界面布局

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 互联网正在改变世界,由于其具有传播信息容量大.形态多样.迅速方便.全球覆盖.自由和交互的特点,已经发展成为新的传播媒体.从认知科学的角度来讲,互联网是一种新的认知结构,通过它个体与社会相互作用,使得知识延伸.正如Fillmore所说:"超文本的介入使得不仅仅是阅读甚至包括学习和生活方式都发生了巨大的变化."互联网成为各种学