1、第第9章章 GUI图形用户图形用户界面界面李慧芬李慧芬B1-308B1-308教学目标教学目标u了解了解Swing的体系结构及相关概念的体系结构及相关概念u掌握掌握Swing组件的特性和分类,了解使用组件的特性和分类,了解使用Swing开开发发GUI程序的步骤程序的步骤u掌握常用容器的分类,掌握掌握常用容器的分类,掌握JFrame、Jpanel的构造的构造方法和常用方法方法和常用方法u掌握常用掌握常用Swing组件的构造方法和常用方法组件的构造方法和常用方法u了解了解GUI布局管理器的分类及特点布局管理器的分类及特点u了解事件处理模型的基本概念,掌握事件处理的基了解事件处理模型的基本概念,掌握
2、事件处理的基本步骤。本步骤。本章目录本章目录u9.1 Swing概述概述u9.2 Swing容器容器 u9.3 常用常用Swing组件组件 u9.4 GUI布局管理器布局管理器u9.5 事件处理模型事件处理模型 9.1 Swing概述概述uGUI(Graphic User Interface):用户与计算机之):用户与计算机之间交互的图形化操作界面,又称为图形用户接口间交互的图形化操作界面,又称为图形用户接口uJava语言提供两个处理图形用户界面的类库:语言提供两个处理图形用户界面的类库:java.awt包:包:Abstract Window ToolKit 抽象窗口工具包抽象窗口工具包 ja
3、va.swing包:包:在在AWT基础上构建的一套新的图形界面系统基础上构建的一套新的图形界面系统uAwt与与Swing的区别:的区别:Awt:Java处理图形用户界面的初始途径。处理图形用户界面的初始途径。重量级组件,把图形元素的创建和行为交给目标平台上的本地重量级组件,把图形元素的创建和行为交给目标平台上的本地GUI工具箱进行处理。工具箱进行处理。理论上理论上“一次编写,随处运行一次编写,随处运行”,实际上,实际上“一次编写,随处调试一次编写,随处调试”Swing:是是JFC(Foundation Classes)的一部分,轻量)的一部分,轻量级组件,显示界面与本机级组件,显示界面与本机O
4、S无关,无关,100%的纯的纯Java实现。实现。1、Swing体系结构体系结构uSwing是在是在AWT的基础上构建的图形界面系统。的基础上构建的图形界面系统。以以AWT为基础,提供了为基础,提供了AWT中的所有功能中的所有功能 进行了扩充,提供了许多新的图形界面组件。进行了扩充,提供了许多新的图形界面组件。JFCJFCAWTSwing AWTComponentsButtonFrameScrollBarWindowsFontDialogColorFrameGraphicsAWTEventToolKitJava 2DDrag and DropAccessibility9.1 Swing概述概述
5、uGUI设计三个概念:设计三个概念:组件组件(Component):Java的图形用户界面的最基的图形用户界面的最基本本组成部分组成部分。可以可以以以图形化图形化的方式的方式显示在屏幕上显示在屏幕上并能并能与用户进行交互与用户进行交互的对的对象象。例如例如一个按钮,一个一个按钮,一个标签等。标签等。必须将组件放在一定的必须将组件放在一定的容器容器中才可以显示出来。中才可以显示出来。容器容器(Container):本身也是一个:本身也是一个组件。组件。主要功能是主要功能是容纳其他组件和容纳其他组件和容器。容器。布局布局管理器(管理器(Layout Manager):每个每个容器都有一个布局管理器
6、,当容器需要对某个组件进行容器都有一个布局管理器,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理器。定位或判断其大小尺寸时,就会调用其对应的布局管理器。7 7java.lang.Objectjava.lang.Objectjava.awt.Componentjava.awt.Componentjava.awt.Containerjava.awt.Containerjava.awt.Paneljava.awt.Paneljava.awt.Windowjava.awt.Windowjava.applet.Appletjava.applet.AppletJAppletJAp
7、pletjavax.swing.JComponentjavax.swing.JComponentjava.awt.Dialogjava.awt.Dialogjava.awt.Framejava.awt.FrameJDialogJDialogJFrameJFrameJWindowJWindowSwingSwing组件组件注意:注意:Component类类是一个抽象类,是一个抽象类,不能直接使用。不能直接使用。类结构类结构Swing的组件的组件JComponentAbstractButtonJbuttonJMenuItemJCheckBoxMenuItemJMenuJToggleButtonJCh
8、eckBoxJRadioButtonJComboBoxJLabelJListJMenuBarJpanelJPopupMenuJScollBarJScollPaneJTextComponentJEditorPaneJTextAreaJTextFieldSwing与与AWT相似的组件相似的组件JcomponentJColorChooserJFileChooserJInternalFrameJLayeredPaneJDesktopPaneJOptionPaneJProgramBarJRootPaneJseparatorJPopupMenu.SeparatorJToolBar.SeparatorJsl
9、iderJSplitPaneJTabbedPaneJtableJToolBarJToolTipJtreeJViewPortSwing比比AWT增加增加的组件的组件2、Swing组件的特性组件的特性uSwing组件的特性组件的特性 MVC体系结构:体系结构:每个组件有对应的每个组件有对应的model类管理数据类管理数据 每个组件有相关的分离模型和界面每个组件有相关的分离模型和界面 可存取可存取性支持:实现性支持:实现 了了Accessible接口接口 支持键盘操作支持键盘操作 设置边框设置边框 使用图标使用图标9.1 Swing概述概述uSwing组件的分类组件的分类JFrame,JApplet
10、,JDialog,JWindow共共4个。个。(2)中间容器:)中间容器:JPanel,JScrollPane,JSplitPane,JToolBar等。等。(3)特殊容器:)特殊容器:在在GUI上起特殊作用的中间层,如上起特殊作用的中间层,如JInternalJFrame,JLayeredPane,JRootPane等。等。(4)基本控件:)基本控件:实现人机交互的组件,如实现人机交互的组件,如Jbutton,JComboBox,JList,JMenu,JSlider,JTextField等。等。(5)不可编辑信息的显示:)不可编辑信息的显示:向用户显示不可编辑信息的组件,例如向用户显示不可
11、编辑信息的组件,例如JLabel,JProgressBar,ToolTip等。等。(6)可编辑信息的显示:)可编辑信息的显示:向用户显示能被编辑的格式化信息的组件向用户显示能被编辑的格式化信息的组件,如,如JColorChooser,JFileChoose,JFileChooser,JTable,JTextArea等。等。9.1 Swing概述概述u使用使用Swing的基本规则的基本规则 Swing组件不能直接添加到顶层容器中,必须添加到一个组件不能直接添加到顶层容器中,必须添加到一个与与Swing顶层容器相关联的内容面板上。顶层容器相关联的内容面板上。(1)把)把Swing组件放入一个顶层组
12、件放入一个顶层Swing容器的容器的内容面板内容面板上上(2)避免使用非)避免使用非Swing的重量级组件。的重量级组件。9.1 Swing概述概述u对对JFrameJFrame添加组件有两种方式:添加组件有两种方式:(1)1)用用getContentPanegetContentPane()()方法获得方法获得JFrameJFrame的内容面板,再的内容面板,再对其加入组件:对其加入组件:frame.getContentPaneframe.getContentPane().add().add(childComponentchildComponent)(2)2)建立一个建立一个JPanelJPa
13、nel或或 JDesktopPaneJDesktopPane之类的中间容器,把之类的中间容器,把组件添加到容器中,用组件添加到容器中,用setContentPane()setContentPane()方法把该容器置为方法把该容器置为JFrameJFrame的内容面板:的内容面板:JPanelJPanel contentPanecontentPane=new=new JPanelJPanel();();/把其它组件添加到把其它组件添加到JpanelJpanel中中;frame.setContentPaneframe.setContentPane(contentPanecontentPane);)
14、;/把把contentPanecontentPane对象设置成为对象设置成为frameframe的内容面板的内容面板9.1 Swing概述概述uSwing程序设计流程程序设计流程(1)引入)引入swing包包(2)选择)选择外观和感觉外观和感觉(3)设置顶层容器)设置顶层容器(4)设置按钮和标签)设置按钮和标签(5)向容器中添加组件)向容器中添加组件(6)在组件周围添加边界)在组件周围添加边界(7)进行事件处理)进行事件处理9.2 Swing容器容器u容器容器java.awt.Container是是Component的子的子类,类,一个容器可以容纳多个组件一个容器可以容纳多个组件,并使它们,并
15、使它们成为一个整体。成为一个整体。uJava程序界面的构成:程序界面的构成:一个一个顶层容器顶层容器(即主窗口)(即主窗口)顶层容器包含若干个顶层容器包含若干个中间容器中间容器 每个中间容器包含若干个每个中间容器包含若干个基本组件基本组件 按照合理的布局方式将它们组织在一起按照合理的布局方式将它们组织在一起 基本组件可响应发生在其上的事件基本组件可响应发生在其上的事件9.2 Swing容器容器uSwing常用的常用的顶层容器顶层容器有有 JFrame:用来创建:用来创建application,最常用的,最常用的 JApplet:用来创建:用来创建applet JDialog:用来创建对话框,常
16、用:用来创建对话框,常用 JWindow:不常用:不常用9.2 Swing容器容器u中间容器中间容器 JPanel,JScrollPane,JSplitPane,JTabbedPane、JInternalFrame:这些容器提供将有关组件按照某种布局:这些容器提供将有关组件按照某种布局组合在一起,然后放入中间容器或顶层容器的功能组合在一起,然后放入中间容器或顶层容器的功能 JPanel:提供一个面板:提供一个面板 JScrollPane:是具有滚动条的窗格:是具有滚动条的窗格 JSplitPane:是具有拆分功能的窗格:是具有拆分功能的窗格 JTabbedPane:是带有若干标签的分类窗格:是
17、带有若干标签的分类窗格 JInternalFrame:用于创建内嵌于:用于创建内嵌于JFrame中的内部框架中的内部框架 Box:提供创建横向:提供创建横向/纵向盒子容器的功能纵向盒子容器的功能9.2.1 JFrame框架框架u类类 JFrame 是是java.awt.Frame的子类的子类uJFrame上只能有一个上只能有一个唯一的组件唯一的组件JRootPane 调用调用JFrame.getContentPane()方法可获得方法可获得JFrame中内置的中内置的JRootPane对象。对象。程序不能直接在程序不能直接在JFrame实例对象上增加组件和设实例对象上增加组件和设置布局管理器,
18、置布局管理器,应在应在JRootPane对象上增加组件对象上增加组件和设置布局和设置布局。uJframe的的setDefaultCloseOperation方法可方法可以设置单击关闭按钮时的事件处理方式。以设置单击关闭按钮时的事件处理方式。9.2.1 JFrame框架框架19199.2.1 JFrame框架框架u常用构造方法:常用构造方法:JFrame():创建无标题窗口。:创建无标题窗口。JFrame(String s):创建标题名字是字符串创建标题名字是字符串s的窗口的窗口 例如:例如:JFrame f=new JFrame(“Hello”);usetDefaultCloseOperati
19、on方法:方法:设置单击窗口上的关闭按钮时的事件处理方式。设置单击窗口上的关闭按钮时的事件处理方式。JFrame.DO_NOTHING_ON_CLOSE JFrame.HIDE_ON_CLOSE JFrame.DISPOSE_ON_CLOSE JFrame.EXIT_ON_CLOSEJFrame类的常用类的常用方法:方法:方方 法法功功 能能 说说 明明 JMenuBar getJMenuBar()返回窗体上设置的菜单栏返回窗体上设置的菜单栏void setJMenuBar(JMenuBar mb)设置窗体的菜单栏设置窗体的菜单栏int getDefaultCloseOperation()返回
20、返回“close”窗体时执行的操作窗体时执行的操作void setDefultCloseOperation(int operation)设置设置“close”窗体时默认执行的窗体时默认执行的操作操作void remove(Component comp)从容器中移除指定的组件从容器中移除指定的组件void setContentPane(Container conPane)设置设置contentPane的属性的属性Container getCantentPane()返回此窗体的返回此窗体的contentPane对象对象JRootPane getRootPane()返回此窗体的返回此窗体的rootP
21、ane对象对象void setTtile(String title)设置或修改框架的标题设置或修改框架的标题String getTitle()返回框架的标题返回框架的标题void setBackground(Color c)设置框架的背景颜色设置框架的背景颜色boolean isResizable()判断窗口是否可以调节大小判断窗口是否可以调节大小方法方法功能说明功能说明Component add(Component comp)在容器中添加一个组件在容器中添加一个组件compvoid setLayout(LayoutManager mgr)设置组件容器,使用设置组件容器,使用mgr页页面布局设
22、置面布局设置void setFont(Font f)设置组件容器的字体设置组件容器的字体void remove(Component comp)删除容器组件里指定的组件删除容器组件里指定的组件void paint(Graphics g)重绘容器组件重绘容器组件void paintComponents(Graphics g)重绘容器组件里的所有组件重绘容器组件里的所有组件void removeAll()从容器中移除所有组件从容器中移除所有组件void remove(int index)从容器中移除从容器中移除index指定的组指定的组件件容器类容器类Container的常用方法的常用方法方法方法功
23、能说明功能说明void setBounds(int x,int y,int w,int h)以以(x,y)为对象的左上角,以为对象的左上角,以w为为宽,以宽,以h为高设置对象的显示区为高设置对象的显示区域域 void setBackground(Color c)设置对象的背景色为设置对象的背景色为c void setSize(int width,int height)设置对象的大小设置对象的大小void setFont(Font font)设置对象的字体样式为设置对象的字体样式为fontvoid setForeground(Color color)设置对象的前景色为设置对象的前景色为color
24、 void setVisible(Boolean b)设置组件是否显示设置组件是否显示void setLocation(int x,int y)设置组件显示位置的左上角坐标设置组件显示位置的左上角坐标为为(x,y)String getName()返回对象的名称返回对象的名称组件类组件类Component的常用方法的常用方法例子例子-创建框架窗口创建框架窗口import java.awt.*;import javax.swing.*;public class JFrame_Exam extends JFrame public static void main(String args)JFrame
25、_Exam mainJFrame=new JFrame_Exam();mainJFrame.setTitle(JFrame 框架示例框架示例!“);mainJFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);mainJFrame.setSize(300,300);mainJFrame.setLocationRelativeTo(null);mainJFrame.getContentPane().setLayout(new FlowLayout();mainJFrame.getContentPane().setBackground(Colo
26、r.green);JLabel lbl=new JLabel(大家好,我是一个标签大家好,我是一个标签);JButton btn=new JButton(按钮按钮);mainJFrame.getContentPane().add(lbl);mainJFrame.getContentPane().add(btn);mainJFrame.setVisible(true);9.2.2 JPanel面板面板 u面板(面板(JPanel)轻量级容器组件轻量级容器组件 没有标题的中间容器,实现容器的嵌套。没有标题的中间容器,实现容器的嵌套。默认布局管理器是默认布局管理器是FlowLayout 这类容器这类
27、容器不能独立存在不能独立存在,必须通过,必须通过add()方法添加方法添加到一个顶层容器或存在于顶层容器的一个中间容到一个顶层容器或存在于顶层容器的一个中间容器。器。面板面板(JPanel)的的大小由它所包含的组件决定大小由它所包含的组件决定 当组件个数增加,面板当组件个数增加,面板(JPanel)也会随之而增大也会随之而增大9.2.2 Jpanel面板面板uJPannel类的类的构造方法构造方法:public JPanel();public JPanel(boolean isDoubleBuffered);public JPanel(LayoutManager layout);public
28、JPanel(LayoutManager layout,boolean isDoubleBuffered)方法方法功能说明功能说明void setAlignmentX(float alignmentX)设置垂直对齐方式设置垂直对齐方式void setAlignmentY(float alignmentY)设置水平对齐方式设置水平对齐方式void setBorder(Border border)设置组件的边框设置组件的边框void setBackground(Color c)设置组件的背景色设置组件的背景色void setFont(Font font)设置组件的字体样式设置组件的字体样式void
29、 setForeground(Color color)设置组件的前景色设置组件的前景色void setVisible(boolean b)设置组件是否显示设置组件是否显示void setMaximumSize(Dimension size)设置组件的最大大小设置组件的最大大小void setMinimumSize(Dimension size)设置组件的最小大小设置组件的最小大小void setEnabled(boolean enabled)设置是否启用此组件设置是否启用此组件JComponent类的常用方法类的常用方法import java.awt.*;import javax.swing.
30、*;public class JPanel_Exampublic static void main(String args)JFrame mainJFrame=new JFrame(框架框架+面板示例面板示例!);mainJFrame.setSize(240,240);mainJFrame.setLocation(200,200);Container container=mainJFrame.getContentPane();container.setBackground(Color.lightGray);container.setLayout(null);JPanel pnl=new JPa
31、nel();pnl.setSize(190,180);pnl.setBackground(Color.green);pnl.setLocation(20,20);JButton btn=new JButton(我是一个按钮,点击我我是一个按钮,点击我);btn.setSize(170,40);btn.setBackground(Color.yellow);btn.setLocation(10,50);pnl.setLayout(null);/取消取消pnl的默认布局管理器的默认布局管理器 pnl.add(btn);/将命令按钮将命令按钮btn加入到面板加入到面板pnl中中 container.
32、add(pnl);/将面板将面板pnl加入到窗口默认面板中加入到窗口默认面板中 mainJFrame.setVisible(true);例子:例子:9.2.3 JDialog对话框对话框 uJDialog组件组件(对话窗口)(对话窗口)作用:用来显示提示信息或接收用户输入。作用:用来显示提示信息或接收用户输入。特点:特点:没有最小化按钮、状态等控制元素没有最小化按钮、状态等控制元素。对话框一般都对应于一个顶层窗口,如对话框一般都对应于一个顶层窗口,如JFrame窗口。窗口。u对话框模式分类:对话框模式分类:有模式:有模式:在运行期间在运行期间不允许用户同应用程序的其他窗口进不允许用户同应用程序
33、的其他窗口进行交互行交互。通常情况下,程序要在处理完对话框中的数据后。通常情况下,程序要在处理完对话框中的数据后才能进行下一步工作,因此,有模式的对话框应用较多。才能进行下一步工作,因此,有模式的对话框应用较多。无模式:无模式:允许用户同时在该对话框和程序其他窗口中切换允许用户同时在该对话框和程序其他窗口中切换操作。操作。构造方法构造方法功能说明功能说明public JDialog()创建一个没有标题并且没有指定创建一个没有标题并且没有指定Frame 所所有者的有者的无模式无模式对话框对话框public JDialog(Dialog owner)创建无模式对话框,指定其拥有者为另一创建无模式对
34、话框,指定其拥有者为另一个对话框个对话框ownerpublic JDialog(Dialog owner,String title)创建一个拥有者为对话框创建一个拥有者为对话框owner,标题为标题为title的对话框的对话框public JDialog(Dialog owner,String title,boolean modal)创建一个拥有者为对话框创建一个拥有者为对话框owner,标题为标题为title的对话框的对话框,其模式状态由其模式状态由modal来指定来指定public JDialog(Frame owner)创建无模式对话框,指定其拥有者为窗口创建无模式对话框,指定其拥有者为
35、窗口ownerpublic JDialog(Frame owner,boolean modal)创建一个拥有者为窗口创建一个拥有者为窗口owner的对话框,其的对话框,其模式状态由模式状态由modal来指定来指定public JDialog(Frame owner,String title)创建一个标题为创建一个标题为title,拥有者为窗口拥有者为窗口owner的对话框的对话框 public JDialog(Frame owner,String title,boolean modal)创建一个标题为创建一个标题为title,拥有者为一个窗口的拥有者为一个窗口的对话框,其模式状态由对话框,其模
36、式状态由modal来指定来指定JDialog类的构造方法类的构造方法方法方法功能说明功能说明public JMenuBar getJMenuBar()返回此对话框上设置的菜单栏返回此对话框上设置的菜单栏public Container getContentPane()返回此对话框的返回此对话框的 contentPane 对象对象public void setContentPane(Container contentPane)设置设置 contentPane 属性属性public int getDefaultCloseOperation()对话框对话框close 时所执行的操作时所执行的操作pu
37、blic void setDefaultCloseOperation(int operation)设置当用户在此对话框上发起设置当用户在此对话框上发起 close 时默认执行的操作时默认执行的操作public void setTitle(String title)将对话框标题设置为将对话框标题设置为titlepublic void setModal(boolean b)设置对话框是否为模式状态设置对话框是否为模式状态public boolean isModal()测试对话框是否为模式状态测试对话框是否为模式状态public void setResizable(boolean resizable
38、)设置对话框是否可改变大小设置对话框是否可改变大小 public boolean isResizable()测试对话框是否可改变大小测试对话框是否可改变大小public void setVisible(boolean b)设置对话框是否显示设置对话框是否显示 public void dispose()撤销对话框对象撤销对话框对象JDialog类的常用方法类的常用方法import java.awt.*;import javax.swing.*;public class TestJDialog public static void main(String args)JFrame mFrame=ne
39、w JFrame(这个一个主框架这个一个主框架);mFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);mFrame.setSize(300,300);mFrame.setLocationRelativeTo(null);JDialog jd=new JDialog(mainJFrame);jd.setTitle(这是一个对话框这是一个对话框);jd.setSize(200,200);jd.setLocationRelativeTo(null);jd.setVisible(true);jd.setDefaultCloseOperation(
40、JDialog.DISPOSE_ON_CLOSE);mFrame.setVisible(true);例子:例子:9.2.4 Swing其他容器其他容器(1)分层面板()分层面板(JLayeredPane)Swing提供两种分层面板:提供两种分层面板:JLayeredPane和和JDesktopPane。JDesktopPane是是JLayeredPane的子的子类,专门为容纳内部框架(类,专门为容纳内部框架(JInternalFrame)而设置。)而设置。向一个分层面板中添加组件,需要说明将其加入哪一层,向一个分层面板中添加组件,需要说明将其加入哪一层,指明组件在该层中的位置,语法为:指明组件
41、在该层中的位置,语法为:add(Component c,Integer Layer,int position)(2)滚动窗口()滚动窗口(JScrollPane)主要通过移动主要通过移动JViewport(视口)来实现。(视口)来实现。滚动条实际就是沿着组件移动视口,同时描绘出它在下面滚动条实际就是沿着组件移动视口,同时描绘出它在下面“看到看到”的内容的内容9.2.4 Swing其他容器其他容器(3)分隔板()分隔板(JSplitPane)JSplitPane提供可拆分窗口。支持水平拆分提供可拆分窗口。支持水平拆分(JSplitPane.HORIZONTAL_SPLIT)和垂直和垂直(JSpl
42、itPane.VERTICAL_SPLIT)拆分并带有滑动条。拆分并带有滑动条。常用方法有常用方法有:JSplitPane(int newOrientation,Component newLeftComponent,Component newRightComponent)/创建一个具有指定方向和指定组件的新创建一个具有指定方向和指定组件的新 JSplitPane。addImpl(Component comp,Object constraints,int index)/增加指定的组件增加指定的组件 setTopComponent(Component comp)/设置顶部的组件设置顶部的组件 se
43、tDividerSize(int newSize)/设置拆分的大小设置拆分的大小 setUI(SplitPaneUI ui)/设置外观和感觉设置外观和感觉 9.2.4 Swing其他容器其他容器(4)选项板()选项板(JTabbedPane)JTabbedPane提供一组可供用户选择的带有标签或图标的开关键。提供一组可供用户选择的带有标签或图标的开关键。常用的方法如下:常用的方法如下:add(String title,Component component)/增加一个带特定标签的组件增加一个带特定标签的组件addChangeListener(ChangeListener l)/选项板注册一个变
44、化监听器选项板注册一个变化监听器(5)工具栏()工具栏(JToolBar)JToolBar是用于显示常用工具控件的容器。用户可以拖拽出一是用于显示常用工具控件的容器。用户可以拖拽出一个独立的可显示工具控件的窗口。个独立的可显示工具控件的窗口。常用的方法如下:常用的方法如下:JToolBar(String name)/构造方法构造方法getComponentIndex(Component c)/返回一个组件的序号返回一个组件的序号getComponentAtIndex(int i)/得到一个指定序号的组件得到一个指定序号的组件9.2.4 Swing其他容器其他容器(6)内部框架()内部框架(JI
45、nternalFrame)JInternalFrame就如同一个窗口在另一个窗口内部。就如同一个窗口在另一个窗口内部。使用使用实例实例:JFrame frame=new JFrame(InternalFrameDemo);/实例化窗口实例化窗口JDesktopPane desktop=new JDesktopPane();/实例化容器实例化容器JDesktopPaneJInternalFrame myframe=new JInternalFrame();/实例化内部窗口实例化内部窗口desktop.add(myframe);/把内部窗口添加到容器中把内部窗口添加到容器中myframe.setS
46、elected(true);/内部面板是可选择的内部面板是可选择的frame.setContentPane(desktop);/把把desktop设为设为frame的内容面板的内容面板9.2.5 案例分析:案例分析:Swing容器综合实例容器综合实例 u1.案例描述案例描述 建立一个窗口对象,并在其上添加一个标签对象,用来显建立一个窗口对象,并在其上添加一个标签对象,用来显示对窗口的各种不同操作。示对窗口的各种不同操作。在窗口中,单击窗口右上角的关闭窗口按钮时,则弹出对在窗口中,单击窗口右上角的关闭窗口按钮时,则弹出对话框,要求用户进一步确认是否要关闭该窗口。话框,要求用户进一步确认是否要关闭
47、该窗口。9.2.5 案例分析:案例分析:Swing容器综合实例容器综合实例 u2.案例分析案例分析 本案例需要创建一个窗口对象,该对象继承自本案例需要创建一个窗口对象,该对象继承自JFrame类,在主窗口中创建一个标签对象。类,在主窗口中创建一个标签对象。还需创建一个还需创建一个JDialog对象以及两个按钮对象以及两个按钮,JDialog对对象的拥有者为已创建的窗口对象。象的拥有者为已创建的窗口对象。程序运行时将触发两个不同类的事件:一个是当单击程序运行时将触发两个不同类的事件:一个是当单击窗口右上角的关闭按钮时所触发的窗口右上角的关闭按钮时所触发的WindowEvent事事件;另一个是当对
48、话框中的按钮被单击时所触发的件;另一个是当对话框中的按钮被单击时所触发的ActionEvent事件。故系统需要实现事件。故系统需要实现WindowListener接口和接口和ActionListener接口的监听接口的监听程序。程序。9.3 常用常用Swing组件组件 u常用组件:常用组件:JLabel标签组件标签组件 JTextField文本框文本框 JTextArea文本区文本区 JButton按钮组件按钮组件 JCheckBox复选框复选框 JRadioButton单选框单选框 JList列表框组件列表框组件 JComboBox下拉列表框组件下拉列表框组件 JMenu菜单组件菜单组件 9
49、.3.1 JLabel标签组件标签组件 uJLabel标签标签 为为GUI提供文本提供文本(主要主要)或图像或图像(也可以也可以)信息信息 JComponent的子类的子类 可以显示以下内容可以显示以下内容:(1)单行的只读的文本信息)单行的只读的文本信息(2)图像)图像(3)同时显示文本与图像信息)同时显示文本与图像信息u注意:程序一般不修改标签的内容注意:程序一般不修改标签的内容 2.标签的构造方法标签的构造方法uJLabel():创建一个没有显示内容的标签对象。:创建一个没有显示内容的标签对象。uJLabel(Icon image):创建一个显示为图标的标签对象,默创建一个显示为图标的标
50、签对象,默认为居中排列。认为居中排列。uJLabel(Icon image,int alignment):创建一个显示为图标创建一个显示为图标的标签对象,并指定其排列方式的标签对象,并指定其排列方式。排列方式有排列方式有3种,分别用种,分别用3个常量个常量LEFT、CENTER和和RIGHT表示左、表示左、居中和右对齐。居中和右对齐。uJLabel(String text):创建一个显示文字的标签对象,默认创建一个显示文字的标签对象,默认为居中排列。为居中排列。uJLabel(String text,int alignment):创建一个显示文字为创建一个显示文字为text的标签对象,并指定其