`

Swing界面布局之代码手写二, 山寨Netbean layout实现

阅读更多
上篇文章写了简单的layout后,
这次来个复杂的, 在找素材时, 左看右看没有合眼的, 最后, 直接把眼光放在正在coding的Netbean上
先旨声明, 这个demo, 只注重layout的架构布局的学习研究, 界面细微之处, 跟真正的netbean, 相差那是相当远的

目前的最终效果图




swing的layoutmanage, 跟以前做VS的很不相同, 你的想法必须有些转换, 想想webpage的html也许对你有所启发,在客户端, component的大小是可换的

swing的layout, 在布局时, 时刻都要围绕一个主题, 在不同的平台上的表现, checkbox为例, 有打勾的, 有打X的, 有开关型按钮的, 每种样式的大小都各有不同, 所以, 必须以一种宏观的布局来规划界面的显示


一. 整体布局



在使用netbean或其它IDE中, 你很容易发现: 上面的菜单, 工具栏高度是固定的, 下面的状态栏高度也是固定的
当你最大化时, 它们打横占了整个显示屏, 但高度还是一样的, 除非你刻意去调整它
这就是borderlayout的要点

也许你会觉得奇怪, 为什么要在中间再设一个borderlayout, 其实一开始, 我也是在中间直接用最外层的borderlayout, 设一个left, 另一个center,
但为了方便模拟工具栏下面那个3px左右的jseparate, 我选择了这样做, 当然这并不是唯一的选择




size小tips: setPreferredSize(new Dimension(0, 300)), 意思为width交给BorderLayout, 实际上, 这里你不管指定width为多少, BorderLayout都会掌管width.

二. 菜单, 工具栏和状态栏



菜单栏, 有一个小的tips, 你是用frame.setJMenubar, 还是用container.add(menubar)的呢, 2者有何别?
前者是基于整个frame的菜单, 后者是frame下面的contentpane添加一个component, 推荐前者

仔细比较2者, 你会发现, 山寨的比正版的工具栏要高那么2个像素, 这是我图片没有切好, 另外, 我想试着模拟netbean的按钮UI, 但发现光切图是不同的, 还需要override buttonUI里的paint方法, 就没做了, 但很赞Netbean button UI做功仔细。

工具栏, 当像把netbean横向收缩的话, 有些工具栏会被挤到下一行, office里也常有这种情况, flowlayout可以实现, 但netbean里, 你又可以自由的添加2个toolbar中间的gap, flowlayout做这个就有点吃力了, 用null layout再配合mouselistener也不容易, 这是个挑战, 做个好的界面, 确实不容易啊。

状态栏, 很正规的布局, 高度固定, 模向无限伸展, 我选了boxlayout
只要你不特别指定size, boxlayout会很自觉的平均分配给里面的component, 所以, 在里面添加2个panel可以轻松实现, 至于右边text和processbar还有那个"X"的向右对齐, 直接用flowlayout的向右对齐, "X"偷懒没做了





小tips: panel的default layout是flowlayout

三. 左边导航面板

调整netbean的size, 你会发现, 左上的"项目,文件,服务"面板和左下的"导航"面板, width是固定的, 而高度则随着frame大小而变化, 如果你不去刻意调整的话, 他们会把高度平分掉。作为layout的学习, 在这里, 我的设定也是为平分, 用boxlayout可以轻松实现, 如果要按百分比平分的话, 就需要额外添加mouselistener了, 再次小赞netbean的UI



上图是layout布局, 以及放大缩小的效果, 作为学习, 只实现了FileTree作为demo用



上图是实现代码

下面的navigate比较复杂

在tab下面有有"成员视图"和"bean模式"2种layout
成员视图又包括了那个按钮面板的折叠, 如图



上图是我的实现方式



这是layout布局, 利用cardlayout, 可以让"member panel"和"bean mode"替换显示出来, 很方便



上图是代码

当点击show & hide toolbar 的 checkbox时, 添加事件, 把toolbar多它的容器中add/remove
然后调用它的容器的父容器repaint, layoutmanage就会准确地resize控件tree和checkbox的大小
完全不用另外写代码, 话说回来, 如果不用layoutmanage而去自己写代码实现, 估计够呛


四. 右边编辑面板



右边编辑面板的整体布局, 下面的输出面板, 高度固定, 横向扩展, 而上面的coding面板, 则尽占剩余的空间,
borderlayout是不二选择



指定jpanel为boxlayout跟borderlayout.center效果是一样的, 起码在占尽未知空间方面是一样的
然后在里面添加JTabbedPane, 为了scrollbar而使用JscrollPane跟JtextArea配合或是JTree配合, 在Swing里是很好的搭配, coding的工具栏和左边的行号什么的, 跟navigate作法是一样道理, 这里就偷懒不做了

下面的输出面板, 看起来很可怕, 其实只是tab多了几个, tab里再包含tab而已
以"output"为例, 开始模拟



以上~,
做完之后, 再次体验到, netbean真是一个出色的IDE, 像我这里只是用JTabPane简单的代替了NB的面板, NB的面板里的最左边沿化和关闭就没有实现, 像这样的细至功夫许多。

通过这个layout, 可以看出, 整个程序的layout宏观架构是很重要的, 但实现的细节也同样重要。
一个好的程序界面, 不一定要求太过华丽, 但一定要用起来顺手, 所以, DnD技术是必要的, 快捷键也是必要。
庆兴的是, Swing对这方面的支持都很强大, 愿NetBean和Swing越来越好


结束语

利用业余时间来编写这个layout, 刚开始时, 才发现什么叫无知者无畏, 远比我想象中的复杂
有想过换个其他素材来写, 但最终还是咬咬牙, 用微积分的思想安慰自己, 边写边查兼检讨
期间偷懒过, 无视过, 忽略过, 小改过, 大改过, 重构过, 偷笑过, 感动过
然后深深体会到, 蚂蚁筑巢
  • 描述: 当前效果图
  • 大小: 277.4 KB
  • 大小: 17.8 KB
  • 大小: 208.2 KB
  • 大小: 116.8 KB
  • 大小: 355.2 KB
  • 大小: 359 KB
  • 大小: 217.1 KB
  • 大小: 175.4 KB
  • 大小: 67.7 KB
  • 大小: 240 KB
  • 大小: 125.1 KB
  • 大小: 181.2 KB
  • 大小: 325.2 KB
分享到:
评论
16 楼 伊苏 2011-02-14  
bradwoo8621 写道
LZ你为啥不用JSplitPane?

SwingIDE界面可以看JIDE, 那个不错的.


JSplitPane, 之前不知道有这个东西
JIDE, 同样是不知道有这东西, 看了下, 貌似不错, 可惜商业版是要收费的
果然, 交流对大家都有好处啊

Swing LayoutManager这玩意, 太灵活自由了, 要想熟练掌握, 还是手写代码好

以下是摘录自官网
Note: This lesson covers writing layout code by hand, which can be challenging. If you are not interested in learning all the details of layout management, you might prefer to use the GroupLayout layout manager combined with a builder tool to lay out your GUI. One such builder tool is the NetBeans IDE. Otherwise, if you want to code by hand and do not want to use GroupLayout, then GridBagLayout is recommended as the next most flexible and powerful layout manager.
15 楼 bradwoo8621 2011-02-14  
LZ你为啥不用JSplitPane?

SwingIDE界面可以看JIDE, 那个不错的.
14 楼 ray_linn 2011-01-14  
这点点东西。。。。只能说swing生产率真低
13 楼 javavaj 2011-01-14  
某些冷嘲热讽的大拿,敢问你是做技术的吗?
12 楼 wsc830719 2011-01-14  
明明就是一个 netbeans的RCP。 我怎么看都没看出来是独立的swing应用。
仔细瞧了下图原来是模仿底下那个界面 做的 模仿啊。 哎,没仔细看。
11 楼 elan1986 2011-01-14  
我看了半天,才看完帖子!

先不说别的,向LZ致敬!
10 楼 corelengine 2011-01-14  
支持,开发一个自己的原生工具的好开端
9 楼 伊苏 2011-01-14  
thekll 写道
比较好奇那些界面草图是用什么软件画的。

一直在找可以画界面草图的软件。


AI
8 楼 爪哇岛岛主 2011-01-14  
有意思吗?天天整这些东西,又没有啥实际用途,
7 楼 thekll 2011-01-13  
比较好奇那些界面草图是用什么软件画的。

一直在找可以画界面草图的软件。
6 楼 onlylau 2011-01-13  
写的真好,现在缺的就像LZ这样的将整个实现过程与思路写出来的技术文章。。。
5 楼 yidao620c 2011-01-13  
大婶,我太崇拜你了。
4 楼 jorneyR 2011-01-13  
003 写道
这年头,大家都在Ctrl C Ctrl V,能静下心来钻研技术的高手不多了。
我不知道自己算不算后者,但是我觉得楼主应该算一个,jorneyR也要算一个。

呵呵,走自己的路,让别人说去吧
3 楼 003 2011-01-13  
这年头,大家都在Ctrl C Ctrl V,能静下心来钻研技术的高手不多了。
我不知道自己算不算后者,但是我觉得楼主应该算一个,jorneyR也要算一个。
2 楼 jorneyR 2011-01-13  
光写这文章,都得花不少的时间,顶
1 楼 ivin 2011-01-13  
我只能说以句:神!简直是神人啊

相关推荐

    课程表-netbean版

    【课程表-netbean版】是一个基于NetBeans IDE开发的简单应用程序,主要目的是为了实现课程表的查看、修改和保存功能。这个项目对于初学者来说是一个很好的实践案例,因为它的代码行数适中(约250行),并且注释详尽...

    NETBEAN6.7的安装图解

    安装完成后,通过桌面快捷方式启动NETBEAN6.7,初始界面为模块加载页面,加载完毕后会进入主界面。你可以选择关闭起始页,以便直接进入工作区。 NETBEAN的主界面包括: - 主菜单:位于顶部,提供各种操作选项。 - ...

    上传文件开发源代码netbean开发

    【标题】"上传文件开发源代码netbean开发"所涉及的知识点主要集中在使用NetBeans IDE进行文件上传功能的编程实现。NetBeans是一个流行的开源集成开发环境(IDE),它支持多种编程语言,包括Java、JavaScript、PHP等...

    用NETBEAN 6.8 做一个计算器的代码

    在源代码编辑器中,NetBeans提供了可视化的布局管理器,可以方便地拖放组件到设计视图中。你需要添加JButton按钮来表示数字和运算符,例如0-9的数字键、加减乘除以及等于号等。同时,别忘了一个JTextField或...

    netbean大集合资料

    netbean大集合资料netbean大集合资料netbean大集合资料netbean大集合资料netbean大集合资料netbean大集合资料netbean大集合资料netbean大集合资料netbean大集合资料netbean大集合资料

    netbean 医院疫苗管理java swing

    netbean 医院疫苗管理java swing Admin Role 1. Admin creates a Lab and Doctor Organization 2. Admin Role adds users of Doctor and Lab. 3. Admin creates doctor and lab employee's 4. Admin Provides ...

    swing-插件

    Swing插件是Java开发领域中的一个重要工具,主要用于构建图形用户界面(GUI)。在MyEclipse这样的集成开发环境中,Swing插件...通过充分利用其各项特性,开发者可以更加专注于业务逻辑的实现,而非繁琐的界面布局代码。

    计算器 JAVA源代码 NETBEAN

    在这个名为"计算器 JAVA源代码 NETBEAN"的项目中,我们可以看到使用Java语言和NetBeans IDE创建的一个简单计算器的应用程序。NetBeans是一个强大的集成开发环境,支持多种Java应用程序的开发,包括桌面应用。 首先...

    netbean 的zend样式

    "netbean 的zend样式"就是这样一个主题,它指的是在NetBeans中设置和使用类似Zend Studio的代码编辑风格和布局。 Zend Studio是专为PHP开发设计的一款IDE,以其强大的调试工具和直观的用户界面而闻名。它的代码...

    JAVA netbean 6.8 编写的计算器

    **标题详解:** "JAVA netbean 6.8 编写的计算器" 指的是一个使用Java编程语言,并借助NetBeans 6.8集成开发环境(IDE)开发的计算器应用程序。这个计算器可能包含了基本的数学运算,如加、减、乘、除,也可能包括更...

    NetBean快捷键文档

    收集NetBean开发工具快捷键应用大全。以便开发者集体查阅

    netbean我的第一个桌面程序

    这可能是项目文件夹的名字,里面可能包含了源代码文件(如`Main.java`)、资源文件(如图片或布局文件)、以及项目的配置文件。初学者通过查看这些文件,可以了解一个简单的Java桌面应用是如何组织和编写的。 在...

    netbean struts2 插件

    Struts2是一个强大的Java web应用程序框架,它基于MVC(Model-View-Controller)...使用这个插件,开发者可以更加高效地开发基于Struts2的Java Web应用,充分利用NetBeans IDE的强大功能,实现更快、更稳定的开发流程。

    NetBean6字体配置

    NetBean6字体配置 NetBean6字体配置 NetBean6字体配置 NetBean6字体配置

    NetBean 桌面程序 实例

    大家都知道java做的桌面程序的界面看起来不如VB,VC做的界面好看,其实这只是java在调用LAF时调用的自己类库中的LAF罢了,要想实现象Windows那样的界面也很容易,本例是用NetBean做的桌面程序,界面显示的是象Windows...

    netBean使用帮助文档

    这个“netBean使用帮助文档”很显然是为了指导用户如何有效地利用NetBeans进行编程工作。以下是一些关于NetBeans的重要知识点: 1. **安装与启动**:NetBeans可以在Windows、Mac OS X和Linux等操作系统上运行。用户...

    netbean安装程序 ruby3

    netbean安装程序 ruby3netbean安装程序 ruby3netbean安装程序 ruby3netbean安装程序 ruby3netbean安装程序 ruby3netbean安装程序 ruby3

    netbean的struts2插件

    netbean7.2的struts2插件

    netbean移动开发入门

    通过“netbeans移动开发入门.avi”这个视频文件,你可以直观地看到整个开发过程,包括如何在NetBeans IDE中创建MIDlet项目,设计和布局GUI,编写事件处理代码,以及如何进行调试和测试。这个教程对于初学者来说是一...

    netbean安装程序 ruby5

    netbean安装程序 ruby5netbean安装程序 ruby5netbean安装程序 ruby5netbean安装程序 ruby5netbean安装程序 ruby5

Global site tag (gtag.js) - Google Analytics