没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
精通 java swing 开发
++ Swing 读书笔记
1-1:Swing 常用的 package
PACHAGE | 内 容
-----------------|----------------------
---------
javax.swing | 最常用的 pachage,包含了各种 swing 组件的类
javax.swing.border | 包含与 swing 组件外框有关的类
javax..swing.colorchooser | 针对 swing 调色盘组件(JColorChooser)所设计的类
javax.swing.event | 处理由 swing 组件产生的事件,有别于 AWT 事件
javax.swing.filechooser | 包含针对 swing 文件选择对话框(JFileChooser)所设计的类
---------------------------------------
-------
javax.swing.plaf | 处理 swing 组件外观的相关类
javax.swing.plaf.basic |
javax.swing.plaf.metal |
javax.swing.plaf.multi |
---------------------------------------
-------
javax.swing.table | 针对 swing 表格组件(JTable)所设计的类
---------------------------------------
-------
javax.swing.text | 包含与 swing 文字组件相关的类
javax.swing.text.html |
javax.swing.text.html.parser |
javax.swing.text.rtf |
---------------------------------------
-------
javax.swing.tree | 针对 swing 树关元件(JTree)所设计的类
javax.swing.undo | 提供 swing 文字组件 Redo 或 Undo 的功能
1-2:swing 的版面结构
Swing 中几乎所有组件都是从 JComponent 衍生而来,也就是说这些组件都是 lightweight
Component,均由纯 java code 所编写面成
、Swing 中以下几个组件不是由 JComponent 继承面来:
JFrame(JRoot Pane)
JDialog(JRoot Pane)
JWindow(JRoot Pane)
JApplet(JRoot Pane)
以上四个组件是 heavyweight Component,必须使用到 native code 来画出这四个窗口组件,
因为要在操作系统中显示窗口画面,必
须使用操作系统的窗口资源,而以往的 AWT 组件大多使用 native code 所构造出来,因此
Swing 中的 JFrame 便继承原有 AWT 中的 Frame
类,面不是继承 JComponent 类。同样,JApplet 是继承原有 AWT 中的 JApplet 类,也不
是继承 JComponent 类。
JFrame、JDialog、JWindow 及 JApplet 这四个组件统称为最上层组件,因为其余的
swing 组件都必须依附在此四组件之一上才能
显示出来。此四组件均实现(Implement)RootPaneContainer 这个界面(Interface),此界面定
义了各种容器取得与设置并不是真实的容器,它是由 Glass Pane
与 Layered Pane 所组成(Layered Pane 里拥有 Content Pane 与 Menu Bar,而 Menu Bar 可
选择使用或不使用),
我们不能在 JRootPane 上加入任何的组件,因为它只是一个虚拟的容器,若要在最上层组
件上加入组件,必须加在 Layered Pane 或是
Layered Pane 里的 Content Pane 上。以 JFrame 为例,一般我们要在 JFrame 上加入其他
组件(如 JButton、JLabel 等)必须先取得 JFrame
的 Content Pane,然后将要加入的组件放在此 Content Pane 中,而不是直接就加到
JFrame 上。因此若要在 JFrame 中加入一个按钮,不
能像以前 AWT 时一样写成 frame.add(button)的形式,而必须先取得 JFrame 的 Content
Pane,然后将按钮加入 Content Pane 中,如:
frame.getContentPane().add(button)
否则在编译的时候将有错误信息产生。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
注意:
1.组件必须加在容器中,而容器本身具有层次性的关系,就如同珠宝盒一般,大盒子里面
可以放小盒子,小盒子里面还可以放更小的盒子,而珠宝就可以放
在某一个盒子中,这里的珠宝就代表组件,盒子就代表容器。因此若您想在 JFrame 加入
任何组件时,必须
先取得 JFrame 的容器来放置这些组件,而由于 JFrame、JDialog、JWindow 与 JApplet
是显示 Swing 组件的源头,我们可以称它们为根
组件,也就是所谓的最上层组件。
2.RootPaneContainer 它是一个 interface,共有 5 个类实现(Implement)它,分别是
JFrame、JAppleet、JWindow、JDialog、
JInternalFrame,其中 JInternalFrame 是一个 lightweight Component,它不是一个最上层组
件,也就是说 JInternalFrame 不能单独显示出来,必须依附在最上
层组件中,我们将在下面讨论组件,而 JFrame,JApplet,JWindow,JDialog 均为最上层组件。
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
RootPaneContainer 定义了下面几种方法:
方法
Container getContentPane()返回 contentPane
Component getGlassPane()返回 glassPane
JLayeredPane getLayeredPane()返回 layeredPane
JRootPane getRootPane 返回属于这个组件的 JRootPane
Void setContentPane(Container contentpane)设置 ContentPane
Void setGlassPane(Component glassPane)设置 GlassPane
Void setLayeredPane(JLayeredPane layeredPane)设置 LayeredPane
JFrame 如何取得 Content Pane 的实际流程,下面是一段很简单的程序代码:
public class Simple{
Simple(){
JFrame frame=new JFrame();
Container contentPane=frame.getContentPane();
JButton button=new JButton();
contentPane.add(button);
}
}
当我们写 frame.getContentPane()时,会返回此 frame 的 Content Pane,也就是一个容器组
件,有了容器之后我们才能将 button 组件
摆进去,此时 JFrame 才算拥有 button 组件。所以 JFrame 就好像是一块空地,要在这空
地上信人应该先盖一栋房子(容器),然后人
、家具、设备等等(组件)就能搬进此房子中。下面的层次结构说明了最上层组件都含有
JRootPane 组件,JRootPane 本身就含有容
器组件,可让最上层组件装入其他的组件。
|Frame------JFrame(JRoot Pane)
|
Window|Dialog-----JDialog(JRoot Pane)
|
|
|-----------JWindow(JRoot Pane)
Applet -----------JApplet(JRoot Pane)
图示:
|Grass Pane
|
Root Pane|
| |Content Pane
|Layered Pane|
|Menu Bar
++ Swing 读书笔记
1-3:版面管理器(Layout Menager)
|BorderLayout
|FlowLayout
|GridLayout
AWT----|CardLayout
|GridBagLayout
Swing--|BoxLayout
1-3-1:BorderLayout 的使用:
BorderLayout 的类层次结构图:
java.lang.Object
--java.awt.BorderLayout
构造函数:BorderLayout()建立一个没有间距的 border layout
BorderLayout(int hgap,int vgap)建立一个组件间有间距的 border layout
BorderLayout 将版面划分为东、西、南、北、中
例子:BorderLayoutDemo.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class BorderLayoutDemo{
public BorderLayoutDemo(){
JFrame f=new JFrame();
Container contentPane=f.getContentPane();
contentPane.setLayout(new BorderLayout());
contentPane.add(new JButton("EAST"),BorderLayout.EAST);
contentPane.add(new JButton("WEST"),BorderLayout.WEST);
contentPane.add(new JButton("SOUTH"),BorderLayout.SOUTH);
contentPane.add(new JButton("NORTH"),BorderLayout.NORTH);
contentPane.add(new JLabel("CENTER",JLabel.CENTER),BorderLayout.CENTER);
f.setTitle("BorderLayout");
f.pack();
f.setVisible(true);
/***read**/
/*处理关闭窗口的操作,若你没写这一段,就算你已经关闭窗口了,但程序并不会终止。
*/
f.addWindowListener(
new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
);
/***read**/
}
public static void main(String[] args){
BorderLayoutDemo b=new BorderLayoutDemo();
}
}
设置组件的间距,你可以使用有间距参数的 BorderLayout 构造函数,也可以利用
BorderLayout 的 setHgap(int hgap)与
setVgap(int vgap)两个方法来达成。
1-3-2:FlowLayout 的使用:
FlowLayout 的类层次结构图:
java.lang.Object
--java.awt.FlowLayout
构造函数:FlowLayout()建立一个新的 Flow Layout,此 FlowLayout 默认值是居中对齐,
组件彼此有 5 单位的水平与垂直间距。
FlowLayout(int align)建立一个新的 Flow Layout,此 FlowLayout 可设置排列方式,组件
彼此有 5 单位的水平与垂直
间距。
FlowLayout(int align,int hgap,int vgap)建立一个新的 Flow Layout,此 FlowLayout 可设置
排列方式与组件间距。
FlowLayoutDemo.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class FlowLayoutDemo{
public FlowLayoutDemo(){
JFrame f=new JFrame();
Container contentPane=f.getContentPane();
/*你可以使用有间距的 FlowLayout 构造函数,使 FlowLayout 的排列具有间距,并
*并可利用排列方向参数来指定靠什么方向排列,FlowLayout 共有五种排列方式,
*依次是 CENTER(默认值),LEFT,RIGHT,LEADING,TRAILING,若我们将下面程序第 13
*行改成 contentPane.setLayout(new FlowLayout(FlowLayout.LEFT));
*/
contentPane.setLayout(new FlowLayout());
contentPane.add(new JButton("first"));
contentPane.add(new JButton("second"));
contentPane.add(new JButton("third"));
contentPane.add(new JButton("fourth"));
contentPane.add(new JButton("fifth"));
contentPane.add(new JButton("Last"));
f.setTitle("FlowLayout");
//f.pack();//必须将 f.pach()去掉,否则 setSize 功能将没有作用
f.setSize(400,220);
f.setVisible(true);
f.addWindowListener(
new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
);
}
public static void main(String[] args){
FlowLayoutDemo b=new FlowLayoutDemo();
}
}
剩余63页未读,继续阅读
资源评论
- keeper2092012-12-29不知道怎么拷贝来的,排版比较乱 呵呵 看上去比较晕
piaosasatuo
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功