浅谈学习Swing组件

Swing包是JFC(Java Foundation Classes)的一部分,由许多包组成,如下表:

Com.sum.swing.plaf.motif用户界面代表类,它们实现Motif界面样式
Com.sum.java.swing.plaf.windows用户界面代表类,它们实现Windows界面样式
Javax.swingSwing组件和使用工具
Javax.swing.borderSwing轻量组件的边框
Javax.swing.colorchooserJcolorChooser的支持类/接口
Javax.swing.event 事件和侦听器类
Javax.swing.filechooserJFileChooser的支持类/接口
Javax.swing.pending未完全实现的Swing组件
Javax.swing.plaf 抽象类,定义UI代表的行为
Javax.swing.plaf.basic实现所有标准界面样式公共功能的基类
Javax.swing.plaf.metal用户界面代表类,它们实现Metal界面样式
Javax.swing.tableJtable组件
Javax.swing.text支持文档的显示和编辑
Javax.swing.text.html 支持显示和编辑HTML文档
Javax.swing.text.html.parserHtml文档的分析器
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的重量级组件。

对JFrame添加组件有两种方式:
1) 用getContentPane( )方法获得JFrame的内容面板,再对其加入组件:frame.getContentPane().add(childComponent)
2) 建立一个Jpanel或 JDesktopPane之类的中间容器,把组件添加到容器中,用setContentPane()方法把该容器置为JFrame的内容面板:
Jpanel contentPane=new Jpanel( );
……//把其它组件添加到Jpanel中;
frame.setContentPane(contentPane);
//把contentPane对象设置成为frame的内容面板

根面板

根面板由一个玻璃面板(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的内容面板

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值