快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

澳门新葡亰游戏881:基于Java的界面布局 DSL 的设计与实现



界面设计应该是一项充溢创造性、富有乐趣的事情,然则却每每被觉得异常的逝世板和繁琐。究其缘故原由,是由于界面结构领域所采纳的描述观点和详细的实现说话之间存在很大年夜的语义隔阂。而一样平常的界面开拓对象供给的所见即所得以及界面结构治理器等规划也无法很好地办理这个问题。

在本文中,我们会澳门新葡亰游戏881给出一种更好的办理规划,我们不是去试图把界面设计者头脑中的设计观点和样式慢慢降级、分化成所应用的实现说话能够理解的低层观点,也不是供给一些已经完成的、确定的但难以扩充和变动的结构样式库供界面设计者应用。我们所供给的是一种专门用于描述高层界面设计样式的说话。经由过程这种说话,界面设计者可以直接、明确地描述出他们头脑中的结构设计样式;经由过程这种说话,界面设计者可以自己方便地、机动地拟订自己必要的结构样式。此外,本文中给出的设计思惟对付其他领域的设计也有很好的借鉴感化。

创造性,照样乏味?

界面设计是一项异常有创造性,以致富有艺术性的事情,一个简洁澳门新葡亰游戏881、易用、漂亮的界面在带给应用者方便的同时,也会给界面设计者带来极大年夜的成绩感。然则,在现实中,环境彷佛并非如斯,很多人都觉得做界面是一项异常繁琐、机器、乏味的事情,并千方百计地去回避界面相关的事情。这是为什么呢?

缘故原由很简单,由于做界面着实涉及两项事情,一项是界面的一些设计创意,包括界面的结构样式以及和应用者的交互要领,这项事情充溢寻衅和乐趣。然则,这些设计创意终极是要落实到实现上的,这便是第二项事情。此时,你头脑中那些清晰、完备的设计观点开始变得啰唆,你不得反面那些低层次的坐标位置打交道。更糟糕的是,当你十分艰苦做好了一个界面,然则发明此中某些元素的结构必要一些调剂时,这个你本应觉得是一个很简单的改变却造成大年夜量重复的低层次坐标位置变动时,你肯定会觉得做界面是多么的机器和乏味呀!

着实,造成这种熟识的根源在于界面设计创意和实现这些创意观点的说话之间存在很大年夜的断层。这样,在详细实现时,你就必须得把这些清晰、完备的结构样式降级成一些啰唆、没有什么意义的低层次的坐标值,使得实现说话能够理解。这项事情不仅乏味,而且终极的实现也异常的脆弱 —— 一个在结构样式层面异常简单的变动,就会造成实现层面的伟大年夜更改。比如:我们可以说把一组元素同时按比例缩小 10%,做过界面的同伙肯定知道这个变动意味着什么。

为了应对这个断层的问题,今朝险些所有的涉及界面制作的开拓对象都供给了相同的办理措施:可视化的界面设计对象以及结构治理器。然则这两种措施都没有从根本上办理这个问题。

可视化界面设计对象确凿避免了不少繁琐的界面元素摆下班作,然则对付专业的界面设计来说,经由过程拖放设计出来的界面在准确度和规范性上都有待前进,此外还有更为紧张的一点,那便是存在于设计者头脑中的结构样式仍旧没有被明确地描述出来,而澳门新葡亰游戏881是被降级成一个个摆放在一路的琐屑的组件,虽然这些组件本身是可视的。这个语义断层的存在同样会使得经由过程可视化界面设计对象设计出来的界面异常脆弱。

结构治理器试图经由过程供给一些常用的结构样式来办理这个问题。然则,这种做法异常僵化,也便是说你只能应用现有的结构治理器,假如它们无法满意你的要求,你也无法自己定制。此外,这些结构治理器仅仅得当于一些简单的环境。对付一些繁杂的结构样式来说,它们的描述能力就显得异常的不够。那些曾经和 GridBagLayOut 斗争过的同伙对此肯定深有体会。

在本文中,我们会给出一种更好的办理规划,我们不是去试图把界面设计者头脑中的设计观点和样式慢慢降级、分化成所应用的实现说话能够理解的低层观点,也不是供给一些已经完成的、确定的但难以扩充和变动的结构样式库供界面设计者应用。我们所供给的是一种专门用于描述高层界面设计样式的说话。经由过程这种说话,界面设计者可以直接、明确地描述出他们头脑中的结构设计样式,经由过程这种说话,界面设澳门新葡亰游戏881计者可以自己方便地、机动地拟订自己必要的结构样式。也便是说,原先仅存在于界面设计者头脑中的抽象结构样式,现在也变得可描述,可编程了。

界面结构说话先容

在进修界面结构说话的设计之前,先来懂得一下该说话的应用是异常有赞助的。我们的界面结构说话异常简单,简单到只有一种原子: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());

仅仅供给这样一种原子元素的说话显然无法满意我们前面提到的目标。在我们的界面结构说话中,还供给了两种在结构中非经常用的两种从已有组件构造新组件的组合手段:above 和 beside。此中 above 组合子接管 3 个参数:两个现有 Component 以及一个比例,它会孕育发生出一个新的复合 Component,此中按照给定的比例把第一个 Component 摆放在第二个 Component 之上。Beside 组合子接管同样的 3 个参数,并且也孕育发生出一个新的复合 Component,此中按照给定的比例把第一个 Componen澳门新葡亰游戏881t 摆放在第二个Component左边。

您可能还会对下面的文章感兴趣: