Swing包是JFC(Java Foundation Classes)的一部分,由许多包组成,如下表:
包 描述
Com.sum.swing.plaf.motif 用户界面代表类,它们实现Motif界面样式
Com.sum.java.swing.plaf.windows 用户界面代表类,它们实现Windows界面样式
Javax.swing Swing组件和使用工具
Javax.swing.border Swing轻量组件的边框
Javax.swing.colorchooser JcolorChooser的支持类/接口
Javax.swing.event 事件和侦听器类
Javax.swing.filechooser JFileChooser的支持类/接口
Javax.swing.pending 未完全实现的Swing组件
Javax.swing.plaf 抽象类,定义UI代表的行为
Javax.swing.plaf.basic 实现所有标准界面样式公共功能的基类
Javax.swing.plaf.metal 用户界面代表类,它们实现Metal界面样式
Javax.swing.table Jtable组件
Javax.swing.text 支持文档的显示和编辑
Javax.swing.text.html 支持显示和编辑HTML文档
Javax.swing.text.html.parser Html文档的分析器
Javax.swing.text.rtf 支持显示和编辑RTF文件
Javax.swing.tree Jtree组件的支持类
Javax.swing.undo 支持取消操作
(在jdk1.3中,第一、第二和pending包没有了,增加了plaf.multi包,主要功能:给缺省的L&F加上附加的L&F,例如一个MultiButtonUI实例可以同时处理MotifButtonUI和AudioButtonUI.)
swing包是Swing提供的最大包,它包含将近100个类和25个接口,几乎所有的Swing组件都在swing包中,只有JtableHeader和 JtextComponent是例外,它们分别在swing.table和swing.text中。
swing.border包中定义了事件和事件监听器类,与AWT的event包类似。它们都包括事件类和监听器接口。
swing.pending包包含了没有完全实现的Swing组件。
swing.table包中主要包括了表格组建(JTable)的支持类。
swing.tree同样是JTree的支持类。
swing.text、swing.text.html、swing.text.html.parser和swing.text.rtf都是用于显示和编辑文档的包。
Jcomponent是一个抽象类,用于定义所有子类组件的一般方法,但并不是所有的Swing组件都继承于JComponent类,JComponent类继承于Container类,所以凡是此类的组件都可作为容器使用。
组件从功能上分可分为:
1) 顶层容器:JFrame,JApplet,JDialog,JWindow共4个
2) 中间容器:JPanel,JScrollPane,JSplitPane,JToolBar
3) 特殊容器:在GUI上起特殊作用的中间层,如JInternalFrame,JLayeredPane,JRootPane.
4) 基本控件:实现人际交互的组件,如Jbutton, JComboBox, JList, JMenu, JSlider, JtextField。
5) 不可编辑信息的显示:向用户显示不可编辑信息的组件,例如JLabel, JProgressBar, ToolTip。
6) 可编辑信息的显示:向用户显示能被编辑的格式化信息的组件,如JColorChooser, JFileChoose, JFileChooser, Jtable, JtextArea。
使用Swing的基本规则
与AWT组件不同,Swing组件不能直接添加到顶层容器中,它必须添加到一个与Swing顶层容器相关联的内容面板(content pane)上。内容面板是顶层容器包含的一个普通容器,它是一个轻量级组件。基本规则如下:
(1)把Swing组件放入一个顶层Swing容器的内容面板上
(2)避免使用非Swing的重量级组件。
[img]http://www.bccn.net/Article/UploadFDL05/200410/20041011215602352.gif[/img]
对JFrame添加组件有两种方式:
1) 用getContentPane( )方法获得JFrame的内容面板,再对其加入组件:frame.getContentPane().add(childComponent)
2) 建立一个Jpanel或 JDesktopPane之类的中间容器,把组件添加到容器中,用setContentPane()方法把该容器置为JFrame的内容面板:
Jpanel contentPane=new Jpanel( );
……//把其它组件添加到Jpanel中;
frame.setContentPane(contentPane);
//把contentPane对象设置成为frame的内容面板
[img]http://www.bccn.net/Article/UploadFDL05/200410/20041011215602443.gif[/img]
根面板
根面板由一个玻璃面板(glassPane)、一个内容面板(contentPane)和一个可选择的菜单条(JMenuBar)组成,而内容面板和可选择的菜单条放在同一分层。玻璃面板是完全透明的,缺省值为不可见,为接收鼠标事件和在所有组件上绘图提供方便。
根面板提供的方法:
Container getContentPane(); //获得内容面板
setContentPane(Container); //设置内容面
JMenuBar getMenuBar( ); //活动菜单条
setMenuBar(JMenuBar); //设置菜单条
JLayeredPane getLayeredPane(); //获得分层面板
setLayeredPane(JLayeredPane); //设置分层面板
Component getGlassPane(); //获得玻璃面板
setGlassPane(Component); //设置玻璃面板
分层面板(JLayeredPane)
Swing提供两种分层面板:JlayeredPane和JDesktopPane。 JDesktopPane是JLayeredPane的子类,专门为容纳内部框架(JInternalFrame)而设置。向一个分层面板种添加组件,需要说明将其加入哪一层,指明组件在该层中的位置:add(Component c, Integer Layer, int position)。
面板(JPanel)
面板(JPanel)是一个轻量容器组件,用法与Panel相同,用于容纳界面元素,以便在布局管理器的设置下可容纳更多的组件,实现容器的嵌套。Jpanel, JscrollPane, JsplitPane, JinteralFrame都属于常用的中间容器,是轻量组件。Jpanel的缺省布局管理器是FlowLayout。
滚动窗口(JScrollPane)
JscrollPane是带滚动条的面板,主要是通过移动JViewport(视口)来实现的。JViewport是一种特殊的对象,用于查看基层组件,滚动条实际就是沿着组件移动视口,同时描绘出它在下面"看到"的内容。
分隔板(JSplitPane)
JSplitPane提供可拆分窗口,支持水平拆分和垂直拆分并带有滑动条。常用方法有:
addImpl(Component comp,Object constraints,int index)//增加指定的组件
setTopComponent(Component comp) //设置顶部的组件
setDividerSize(int newSize) //设置拆分的大小
setUI(SplitPaneUI ui) //设置外观和感觉
选项板(JTabbedPane)
JTabbedPane提供一组可供用户选择的带有标签或图标的开关键。常用方法:
add(String title,Component component) //增加一个带特定标签的组件
addChangeListener(ChangeListener l) //选项板注册一个变化监听器
工具栏(JToolBar)
JtoolBar是用于显示常用工具控件的容器。用户可以拖拽出一个独立的可显示工具控件的窗口。
常用方法有:
JToolBar(String name) //构造方法
getComponentIndex(Component c) //返回一个组件的序号
getComponentAtIndex(int i) //得到一个指定序号的组件
内部框架(JInternalFrame)
内部框架JInternalFrame就如同一个窗口在另一个窗口内部,其特点如下:
1) 必须把内部框架添加到一个容器中(通常为JDesktopPane),否则不显示;
2) 不必调用show()或setVisible()方法,内部框架随所在的容器一起显示;
3) 必须用setSize()或pack()或setBounds方法设置框架尺寸,否则尺寸为零,框架不能显示;
4) 可以用setLocation()或setBounds( ) 方法设置内部框架在容器中的位置,缺省值为0,0,即容器的左上角;
5) 象顶层JFrame一样,对内部框架添加组件也要加在它的内容面板上;
6) 在内部框架中建立对话框,不能使用JDialog作为顶层窗口,必须用JOptionPane或JInternalFrame;
7) 内部框架不能监听窗口事件,可以通过监听与窗口事件类似的内部框架(JInternalFrameEvent)处理内部框架窗口的操作。
JFrame frame=new JFrame("InternalFrameDemo"); //实例化窗口
JDesktopPane desktop=new JDesktopPane(); //实例化容器JDesktopPane
MyInternalFrame myframe=new MyInternalFrame(); //实例化内部窗口
desktop.add(myframe); //把内部窗口添加到容器中
myframe.setSelected(true); //内部面板是可选择的
frame.setContentPane(desktop); //把desktop设为frame的内容面板
学习资源:http://www.bccn.net/Article/kfyy/java/jc/200410/84.html