Jgoodies布局框架.docx_第1页
Jgoodies布局框架.docx_第2页
Jgoodies布局框架.docx_第3页
Jgoodies布局框架.docx_第4页
Jgoodies布局框架.docx_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Jgoodies forms 白皮书1、 介绍JGoodies 的forms 框架可以帮助你快速、轻松布局和实现简明的Swing panel 控件,Forms 框架是一个易用的布局框架。 这个文档将会介绍JGoodies forms 的框架和解析现有存在的布局系统,现有的设计目的是,怎么去套用Forms 的模型和API和对比forms 和其他布局系统的区别。Forms 的焦点在于以导向的形式,在例子中更像是panel控件的一部分。至少,在大多数情况下,他是个长方形布局。 上图使用了forms 的布局内容介绍Form的布局Form的创建Form的工厂Form 和其他的布局框架对比其他模式现存在的布局系统的缺点我发现很对开发员面临现有布局系统带来的相同问题:这些布局系统很难去了解和使用,他们不能体现出人们思想的布局模型,这些工具没有区分关系,例如:一个布局管理器怎么去指定布局和填充容器。 源代码通常很难去阅读,你很难从代码里面了解布局是怎么样的,一些布局管理器是很难用的,例如,如果你想改变外观或者方案,只提供一些像素大小并没有提供一些属性来使用。一些布局系统是可以扩展的,但是却没有提供公共的布局,直到一些开发员挖掘一些细节才发现不能使用。设计目标我们希望能尽快的构建布局,这个框架能覆盖90% 的桌面应用,可以包含负责的panel ,aplications和teams,可以帮助使用者更快的构建和节省时间。From框架的源代码都是很容易读和容易理解,这个布局框架可以很好的构建一些可视化的组件。它也不需要去学习和扩展它的代码。如何使用forms 框架Forms 框架有五个需要依照的原则:1、 使用网格作为一个简单的布局,跟多的布局使用网格系统;2、 区分关注点;3、 提供强有力的布局执行语音;4、 通过字符来简化代码;5、 在布局管理器上提供开发向导。1)网格系统是一个去布局元素强有力、灵活、简单的方法,专业的设计者每天工作都使用网格去寻找、衡量、和服用好的设计,看1、7、8、11页,你会发现很多用户接口程序员使用网格去布局或者描绘组件,这些工作是协调好纸和笔还有至少的可视化工具。2)布局管理进程在一个类中包含一些特性,指定一个布局,填充一个控件的panel 和设置一个控件的范围,在另外一个方面,很多布局系统欠缺支持频繁的使用布局和不提供可在利用的公共设计,如果我们没有关心,使用在各种场景的类和自由的结合使用等这些问题会被忽略,forms 框架用一类去描述form中的网格,不可见的去填充form,使用布局管理器仅仅为了一个工作,计算和设置components的规格。3)在你填充你的panel之前和布局管理器设置你的组件规范之前你描述你的窗体布局,你可以在解析语音中指定你的网格布局所以阅读你的代码的人可以快速的从你的代码总获取信息,修改也很容易。一个简单的指定可以应用在许多组件中,例如,你可以指定你所有的label 在列的右边。4)为了将来提高代码的可读性,在人们阅读中我们允许在代码中详细说明网格布局,简明的语音使用字符类型来执行。这种方法甚至可以用少量的代码来解析复杂的布局。5)forms 框架在布局管理器中提供抽象类去统一ui和风格,不是可视化的类建设驱动着form的布局,他们帮助你了解网格。例如 ,ButtonBarBuilder类他创建按钮条和默认空白,DefaultFormBuilt 创建带label列的panel和组件 ,且段落间隔相等。 工厂类利用builder 预制panel,ButtonBuildFactory 创建默认的按钮条。我们需要提到三个代码层:1、 布局类:布局管理、大小、线条和约束;2、 不可视的builder类去填充panel;3、 工厂类声明预制的布局和panel;我们所提供的代码;1、 一个demo应用;2、 一份资料;3、 一个很好的设计例子 Form 布局FormLoyout,是一个强大且灵活且严谨的布局管理器,组件的水平和垂直对齐都在一个强大的布局长方形框里面,每一个组件都出现在一个或者多个格子里面。明确一个form的布局,你需要明确他的列、行和选择列的组和行的组。每一个布局也仅仅是在行和列的组合中完成。FormLoyout 使用相同的API,算法和执行都在列和行中。例子:基于formLoyout 的特性我们跳到例子中去。我们将会一步步的学习详细的部分和学会怎么用最少的代码写出复杂的布局。例子1(这个例子在组件加入form前创建了一个panel,它带有3个数据列和3个数据行)FormLayout layout = new FormLayout( left:pref, 6dlu, 50dlu, 4dlu, default, / columns pref, 3dlu, pref, 3dlu, pref); / rowsCellConstraints cc = new CellConstraints(); JPanel panel = new JPanel(layout); panel.add(new JLabel(Label1), cc.xy (1, 1); panel.add(new JTextField(), cc.xywh(3, 1, 3, 1); panel.add(new JLabel(Label2), cc.xy (1, 3); panel.add(new JTextField(), cc.xy (3, 3); panel.add(new JLabel(Label3), cc.xy (1, 5); panel.add(new JTextField(), cc.xy (3, 5); panel.add(new JButton(/u2026), cc.xy (5, 5);效果图例子2(使用panelBuilder 类,这个例子创建了一个在组件加入form之前使用PanelBuilder去创建一个panel)FormLayout layout = new FormLayout( right:pref, 6dlu, 50dlu, 4dlu, default, / columns pref, 3dlu, pref, 3dlu, pref); / rows PanelBuilder builder = new PanelBuilder(layout); CellConstraints cc = new CellConstraints(); builder.addLabel(Label1, cc.xy (1, 1); builder.add(new JTextField(), cc.xywh(3, 1, 3, 1); builder.addLabel(Label2, cc.xy (1, 3); builder.add(new JTextField(), cc.xy (3, 3); builder.addLabel(Label3, cc.xy (1, 5); builder.add(new JTextField(), cc.xy (3, 5); builder.add(new JButton(/u2026), cc.xy (5, 5); JFrame jf=new JFrame(); jf.add(builder.getPanel(); jf.pack(); jf.setVisible(true);效果图例子FormLayout layout = new FormLayout( right:pref, 3dlu, default:grow, ); DefaultFormBuilder builder = new DefaultFormBuilder(layout); builder.setDefaultDialogBorder(); builder.setRowGroupingEnabled(true); CellConstraints cc = new CellConstraints(); / In this approach, we add a gap and a custom row. / The advantage of this approach is, that we can express / the row spec and comment area cell constraints freely. / The disadvantage is the misalignment of the leading label. / Also the rows height may be inconsistent with other rows. builder.appendSeparator(Single Custom Row); builder.append(Name, new JTextField(); builder.appendRow(builder.getLineGapSpec(); builder.appendRow(new RowSpec(top:31dlu); / Assumes line is 14, gap is 3 builder.nextLine(2); builder.append(Comment); builder.add(new JScrollPane(new JTextField(), cc.xy(builder.getColumn(), builder.getRow(), fill, fill); builder.nextLine(); / In this approach, we append a standard row with gap before it. / The advantage is, that the leading label is aligned well. / The disadvantage is that the comment area now spans / multiple cells and is slightly less flexible. / Also the rows height may be inconsistent with other rows. builder.appendSeparator(Standard + Custom Row); builder.append(Name, new JTextField(); builder.append(Comment); builder.appendRow(new RowSpec(17dlu); / Assumes line is 14, gap is 3 builder.add(new JScrollPane(new JTextField(), cc.xywh(builder.getColumn(), builder.getRow(), 1, 2); builder.nextLine(2); / In this approach, we append two standard rows with associated gaps. / The advantage is, that the leading label is aligned well, / and the height is consistent with other rows. / The disadvantage is that the comment area now spans / multiple cells and is slightly less flexible. builder.appendSeparator(Two Standard Rows); builder.append(Name, new JTextField(); builder.append(Comment); builder.nextLine(); builder.append(); builder.nextRow(-2); builder.add(new JScrollPane(new JTextArea(), cc.xywh(builder.getColumn(), builder.getRow(), 1, 3);JFrame jf=new JFrame();jf.add(builder.g

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论