锁定老帖子 主题:初学Swing的小总结
精华帖 (2) :: 良好帖 (0) :: 新手帖 (5) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2009-05-29
最后修改:2009-05-29
最近把Swing里的内容稍微看了一下,Swing里的基本元素有: 1.容器 顶层容器 顶层容器常见的有两种: I.窗体(JFrame),它可以直接出现在系统桌面上,其它组件必须直接或间接借助顶层容器才能显示出来。 II.对话框(JDialog),这个比较常见。 非顶层容器 非顶层容器既可以做容器,又可以做组件,如面板(JPanel)。 一般说来不直接将普通组件直接添加到顶层容器中,虽然可以这么做。而是把复杂的界面分割,将某些功能相近或位置靠近的组件放到一个非顶层容器中,这样可以更好的操作界面,也增强了可维护性。 利用非顶层容器可以很方便的搭建界面,并且代码清晰、难度较小。因为开发一个界面的一小部分还是比较简单的,代码也易于维护。 一般一个JPanel都是一个具有相同功能的子界面或一些相似组件的组合。这样当遇到相似的开发时就可以直接重用,避免了重复开发。 (以下关于嵌板部分是从网上得到的,没有试过它的用法,感觉应该挺重要的) Swing中所有的组件都是放到容器中,主要的容器包括:JFrame,JPanel,JWindow,JDialog,JPanle。JFrame是java的主框架,几乎所有的Java应用程序界面都是在主框架之中设计的。有些容器并非一层,而由几层嵌板组成,如:拆分嵌板(JSplitPane),内容嵌板, 页签式嵌板(TabbedPane)等。 拆分嵌板:按指定的方向和方式拆分其内的两个子组件,记住一个拆分嵌板只能拆分两个子组件,如果想要拆分三个,大家自己先想一想办法。本节最后给出了答案。 内容嵌板: JFrame,Jwindow,Jdialog就是上面提到的有多层嵌板的容器,如果要在这些容器上面放置组件,必须放置在他们的内容嵌板(pane)上。我们通过函数getContentPane()可得到当前容器的内容嵌板。 页签式嵌板:这个嵌板如同卡片,在上面提供文件夹式的页签,当前只显示一页,如要进入下一页,只要点击上面的页签。 有些如JPanel是可以直接放置组件的容器。所以不需要使用嵌板。 2.普通组件 普通组件就是具有一定功能、但不担当容器的组件。 这类组件非常多,如标签(JLabel)、按钮(JButton)、文本框(JTextField)、文本域(JTextArea)等。 普通组件都有一些通用的方法,比较说setSize(),setBounds(),setVisible()等等。
Java Swing中处理各组件事件的一般步骤是: 1. 新建一个组件(如JButton)。 2. 将该组件添加到相应的面板(如JPanel)。 3. 注册监听器以监听事件源产生的事件(如通过ActionListener来响应用户点击按钮)。 4. 定义处理事件的方法(如在ActionListener中的actionPerformed中定义相应方法)。 以上步骤我们可以用多种方法实现。但人们通常用两种方法。第一种方法是只利用一个监听器以及多个if语句来决定是哪个组件产生的事件;第二种方法是使用多个内部类来响应不同组件产生的各种事件,其具体实现又分两种方式,一种是匿名内部类,一种是一般内部类。 利用一个监听器来处理事件的缺点是,当程序比较复杂时,需要一大串的if 语句来实现,程序代码较难阅读与维护。当然,如果处理的事件较少,这种方式比较简单。 而使用匿名内部类同样存在许多另外的问题。首先,根据组件在代码中被定义的不同位置,类的定义以及处理事件的代码将分散在程序的各个部分,不是集中在一块,同样不便于阅读与维护。各事件的处理全部由嵌套的程序块组成,视觉上很难定位程序代码。如果事件处理程序比较复杂,内部类中的代码将变得很长,你将找不到相应的组件定义位置。最后,当工具栏、菜单栏目等需要处理同样的用户行为时,该方法将使代码更难维护。
一般开发的时候,有一段代码是最常用的到的: this.setTitle(String title);//设置标题 this.setBounds(int x,int y,int width,int height);//设置窗体的位置 this.setVisible(true);//设置窗体可见 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体关闭按钮的作用 多做一些就能把这个给记住了...
PS:总结的有点堆零零碎碎,有些是从网上找来的资料,不过基本概括了最近学的Swing的基本内容,可能非常浅显,另从网上看到了一些材料,才发现自己对Swing的理解还很不够,Swing创造性的采用了MVC(Model View Controller) 模式,理解这种模式才能对Swing有一个比较深入的领悟,正是由于这个机制,才使得Swing并不像表面看起来的那么差劲,Swing其实很强大!但是要理解这个MVC,要加以灵活运用,目前为止,自己的水平远远不能达到,而且暂时也没有时间去整理了,准备在Java其它部分的知识先有个大概的了解之后,再进行进一步的研究吧,下面提供了关于Swing资料的下载,是我从网上整理了,对Swing的MVC框架的理解应该有很大的帮助~~ 参考资料:
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-05-29
我一般都用netbeans 画. 很是方便. 不过最后生成的代码很是龌龊 ..
自己写的话. 就算了. |
|
返回顶楼 | |
发表时间:2009-05-29
Saito 写道 我一般都用netbeans 画. 很是方便. 不过最后生成的代码很是龌龊 ..
自己写的话. 就算了. 呵呵,是啊,是要有点耐心...哎,我也只是初学了一下...未必深入了~~ |
|
返回顶楼 | |
发表时间:2009-05-29
学Swing 不如学 JavaFX. 学JavaFX 不如搞Flex . 搞桌面不如搞AIR.
so .. |
|
返回顶楼 | |
发表时间:2009-05-30
还是习惯手写,公司以前一个工具是jbuilder画出来的,维护的时候要崩溃
|
|
返回顶楼 | |
发表时间:2009-05-30
最后修改:2009-05-30
Saito 写道 学Swing 不如学 JavaFX. 学JavaFX 不如搞Flex . 搞桌面不如搞AIR.
so .. so what? give up Swing? |
|
返回顶楼 | |
发表时间:2009-05-30
Saito 写道 学Swing 不如学 JavaFX. 学JavaFX 不如搞Flex . 搞桌面不如搞AIR. so .. 本人喜欢swing..并一直沉迷.. jfx效果很好.但却不是非常的看好 至于flex看过示例..很好.但没接触过 对此不发表任何意见和看法. |
|
返回顶楼 | |
发表时间:2009-05-31
Saito 写道 学Swing 不如学 JavaFX. 学JavaFX 不如搞Flex . 搞桌面不如搞AIR.
so .. 学Swing不如学JavaFX,多人用它吗? 学JavaFX 不如搞Flex,Flex还不如3D.搞桌面不如搞网络吧... |
|
返回顶楼 | |
发表时间:2009-05-31
hpjianhua 写道 Saito 写道 学Swing 不如学 JavaFX. 学JavaFX 不如搞Flex . 搞桌面不如搞AIR.
so .. 学Swing不如学JavaFX,多人用它吗? 学JavaFX 不如搞Flex,Flex还不如3D.搞桌面不如搞网络吧... 那全去搞网络吧,我一个人来搞Swing,呵呵~ |
|
返回顶楼 | |
发表时间:2009-05-31
xjlnjut730 写道 hpjianhua 写道 Saito 写道 学Swing 不如学 JavaFX. 学JavaFX 不如搞Flex . 搞桌面不如搞AIR.
so .. 学Swing不如学JavaFX,多人用它吗? 学JavaFX 不如搞Flex,Flex还不如3D.搞桌面不如搞网络吧... 那全去搞网络吧,我一个人来搞Swing,呵呵~ 你楼上根本没理解我说那番话的意思. . Swing的开源社区SwingX已经被废了. Sun为什么这么做? ? ? 搞JavaFx为什么不如搞Flex? 为什么搞AIR好? 我每句话的对比都是基于什么来对比的? .. |
|
返回顶楼 | |