图形用户界面(2)

五.用Swing编写图形用户界面

1.Swing概述:纯java实现的轻量级组件


Swing采用了MVC的设计范式,即“模型-视图-控制器”,其中模型用来保存内容,视图用来显示内容,控制器用来控制用户输入。


2.Swing类层次结构


java.awt.Component 

 -java.awt.Container 

 ---java.awt.Window 

 -----java.awt.Frame--javax.swing,JFrame 

 -----javax.Dialog--javax.swing.JDialog 

 -----javax.swing.JWindow  

 ---java.awt.Applet--javax.swing.JApplet 

 ---javax.swing.Box 

 ---javax.swing.JComponent


3.Swing组件的多样化:Swing是AWT的扩展,它提供了许多新的界面组件。Swing组件以"J"开头,除了有AWT类似的按钮(JButton),标签(JLabel)等还有丰富的高层组件集合,如表格(JTable),树(JTree)。


Swing的程序设计一般可按照下列流程进行:


(1)引入Swing包;


(2)选择“外观和感觉”;


(3)设置顶层容器;


(4)设置按钮和标签;


(5)向容器中添加组件;


(6)在组件周围添加边界;


(7)进行事件处理。

六.Swing组件和容器


1.组件的分类


JComponent是一个抽象类,是大多数Swing组件的父类,定义了所有子类组件的一般方法。JComponent类继承于Container类。其类层次结构如图: 

 java.lang.Object 

 --java.awt.Component 

 ----java.awt.Container 

 ------javax.swing.JComponent


组件从功能上可分为:


(1)顶层容器:JFrame,JApplet,JDialog,JWindow共4个。


(2)中间容器:JPanel,JToolBar,JScrollPane...


(3)特殊容器:JRootPane...


(4)基本控件:实现人际交互的组件,如:JButton,JComboBox,JList,JMenu...


(5)不可编辑信息的显示:向用户显示不可编辑信息的组件,例如:JLabel,JToolTip。


(6)可编辑信息的显示:向用户显示能被编辑的格式化的组件,如:JTable,JTextArea...


2.使用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的内容面板

3.各种容器面板和组件


(1)根面板:由一个玻璃面板(GlassPane)(完全透明,默认值为不可见),一个内容面板(ContentPane)和一个可以选择的菜单条(JMenuBar)组成。


(2)分层面板:Swing提供两种分层面板:JLayeredPanel和JDesktopPane。


(3)面板:轻量级容器组件。JPanel的默认布局管理器是FlowLayout。层次结构图如下:

java.lang.Object 

 --java.awt.Component 

 ----java.awt.Container 

 ------javax.swing.JComponent 

 --------javax.swing.JPanel/JSplitPane



(4)滚动窗口(JSeraliPane)


(5)分隔板(JSplitPane):分隔板用于分隔两个组件。


(6)选项板(JTabbedPane):提供了一组可供用户选择的带标签或图标的选项。


(7)按钮(JButton)


(8)复选框(JCheckBox)


...