1第九章Swing图形用户界面9.1概述9.2容器组件9.3基本组件9.4布局管理器9.5事件处理模型9.6本章小结29.1概述图形用户界面(GUI)CommandLineGraphicsUserInterface数据的图形显示形式友好的交互方式简化计算机软件的学习过程GUI示例jdk1.7\demo\jfc\SwingSet2GUI组件:Labels,Textfields,Buttons等等39.1概述在Java语言中,有两个包(java.awt和javax.swing)囊括了实现图形用户界面的所有基本元素,这些基本元素主要包括容器、组件、绘图工具和布局管理器等。java.awt是java1.1用来建立GUI的图形包,awt是抽象窗口工具包(AbstractWindowToolkit)的缩写,其中的组件常被称为AWT组件。javax.swing是Java2提出的AWT的改进包,主要改善了组件的显示外观,增强了组件的控制能力。49.1概述早期版本的AWT组件在java.awt包里,包括Button、Checkbox、Scrollbar等,都是Component类的子类大部分含有nativecode,所以随操作系统平台的不同会显示出不同的样子,而不能进行更改,是重量级组件(heavyweightcomponents)没有弹性、缺乏效率559.1概述AWT与Swingjava.awt包中的类及相互关系可以用下图来描述:事件类字体类GraphicsComponent颜色类布局管理类java.lang.ObjectCheckboxContainerButton…WindowPanelAppletDialogFrameList图像类菜单类Scrollpane69.1概述较新的Swing组件其名称都是在原来AWT组件名称前加上J,例如JButton、JCheckBox、JScrollbar等,都是JComponent类的子类Java1.2推出,架构在AWT之上,是AWT的扩展而不是取代,AWT仍然是Swing的一个必备补充。完全是由java语言编写的,其外观和功能不依赖于任何由宿主平台的窗口系统所提供的代码,是轻量级组件(lightweightcomponents)可提供更丰富的视觉感受,被越来越多地使用79.1概述Swing组件在javax.swing包中,源于AWT(packagejava.awt)的组件定义了两种类型的组件:顶层容器(JFrame,JApplet,JDialog和JWindow)轻量级组件(JComponent)Swing组件都是AWT的Container类的直接子类和间接子类。Swing组件以J开头,除了有与AWT类似的按钮(JButton)、标签(JLabel)、复选框(JCheckBox)、菜单(JMenu)等基本组件外,还增加了一个丰富的高层组件集合,如表格(JTable)、树(JTree)。89.1概述AWT与Swing顶层窗口类之间的关系javax.swingJFramejava.langObjectjava.awtComponentContainerFrameDialogwindowPaneljava.appletAppletJDialogJComponentJApplet99.1概述Swing组件javax.swingAbstractButtonjava.langObjectjava.awtComponentContainerJListJComponentJOptionPaneJPopupMenuJTextComponentJMenuBarJScrollPaneJLabelJPanelJToggleButtonJButtonJMenuItemJMenuJRadioButtonJCheckBoxJTextAreaJTextFieldJPasswordField109.1概述Swing的组件和容器层次JComponent类是除了顶层容器以外所有Swing组件的基类,根据继承关系,我们可以在每个基类中找到大多数GUI组件的常见操作Component类包含paint、repaint方法,可以在屏幕上绘制组件大多数GUI组件直接或间接扩展ComponentContainer类容纳相关组件包括add方法,用来添加组件包括setLayout方法,这个方法可用来设置布局,以帮助Container对象对其中的组件进行定位和设置组件大小JComponent类——多数Swing组件的超类可抽换的外观和感觉,即可根据需求定制外观和感觉。快捷键(通过键盘直接访问GUI组件)一般的事件处理功能119.1概述--Swing的组件和容器层次通常将javax.swing包里的Swing组件归为三个层次顶层容器中间层容器基本组件容器层次结构是一个以顶层容器为根的树状组件集合为了显示在屏幕上,每个组件必须是一套容器层次结构的一部分每个组件只能放置在某个容器内一次如果某个组件已经在一个容器中,又将它加到另外一个容器中,这个组件就会从第一个容器中清除容器本身也是一种组件129.1概述--Swing的组件和容器层次顶层容器Swing提供三个顶层容器的类JFrame实现单个主窗口JDialog实现一个二级窗口(对话框)JApplet在浏览器窗口中实现一个applet显示区域必须和操作系统打交道,所以都是重量级组件从继承结构上来看,它们分别是从原来AWT组件的Frame、Dialog和Applet类继承而来。每个使用Swing组件的Java程序都必须至少有一个顶层容器,别的组件都必须放在这个顶层容器上才能显现出来。139.1概述--Swing的组件和容器层次中间层容器其存在的目的仅仅是为了容纳别的组件,使界面有条理,美观,易于控制。分为两类一般用途的JPanelJScrollPaneJSplitPaneJTabbedPaneJToolBar特殊用途的JInternalFrameJRootPane可以直接从顶层容器中获得一个JRootPane对象来直接使用,而别的中间容器使用的时候需要新建一个对象。149.1概述--Swing的组件和容器层次基本组件通常是在图形用户界面中和用户进行交互的组件基本功能是和用户交互信息,而不像前两种组件那样是用来容纳别的组件的根据功能的不同,可被分为三类显示不可编辑信息的JLabel、JProgressBar、JToolTip有控制功能、可以用来输入信息的JButton、JCheckBox、JRadioButton、JComboBox、JList、JMenu、JSlider、JSpinner、JTexComponent等能提供格式化的信息并允许用户选择的JColorChooser、JFileChooser、JTable、JTree159.1概述--Swing的组件和容器层次三层容器结构示例importjavax.swing.*;importjava.awt.*;publicclassEx10_1{publicstaticvoidmain(String[]args){JFrame.setDefaultLookAndFeelDecorated(true);JFrameframe=newJFrame(SwingFrame);ContainercontentPane=frame.getContentPane();JPanelpanel=newJPanel();panel.setBorder(BorderFactory.createLineBorder(Color.black,5));panel.setLayout(newGridLayout(2,1));JLabellabel=newJLabel(Label,SwingConstants.CENTER);JButtonbutton=newJButton(Button);panel.add(label);panel.add(button);contentPane.add(panel);frame.pack();//对组件进行排列frame.show();//显示frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}169.1概述--Swing的组件和容器层次运行结果程序说明首先创建一个JFrame类顶级容器frame然后获得顶级容器的内容面板contentPane,只有通过它才能加入其他组件。然后创建一个JPanel类的中间容器panel,并设置边框以及布局然后创建基本控制组件Label,button,并将它们添加到中间容器上然后将中间容器通过内容面板添加到顶层容器上,并对组件进行排列17基于Swing的JavaGUI设计思路基本的java程序的GUI设计工具。主要包括下述几个概念:组件—Component容器—Container布局管理器—LayoutManager事件处理在Java中,开发一个GUI程序,通常需要以下几步:构建一个顶层容器;通常是JFrame或JApplet构建若干个组件,组件可以是其它容器;设定容器的布局管理器;用容器的add方法将这些组件加入到这个容器中;设置组件事件;并将组件事件与代码关联。18第九章Swing图形用户界面9.1概述9.2容器组件9.3基本组件9.4布局管理器9.5事件处理模型9.6本章小结199.2容器组件JFrameJDialogJAppletJPanelJScrollPaneJSplitPaneJTabbedPaneJToolBar209.2容器组件Swing提供了3个顶层容器类:JFrame、JApplet、JDialog都是重量级组件,分别继承了AWT组件Frame、Applet和Dialog每个顶层容器都有一个内容面板,通常直接或间接的容纳别的可视组件可以有选择地为顶层容器添加菜单,菜单被放置在顶层容器上219.2容器组件——JFrame框体(JFrame)JFrame是一种具有边框的容器,它是JavaApplication程序的图形用户界面的最外层容器。特点:(1)有边框(2)能被移动、缩放和关闭(3)作为最外层容器,不能被其它容器所包含(4)默认布局:边界布局(BorderLayout)229.2容器组件——JFrame类JFrame是java.awt.Frame的子类在Swing的组件中,JFrame并不全是由Java编写的是一种与平台关系比较密切的组件(Heavyweightcomponent)java.lang.Object|+--java.awt.Component|+--java.awt.Container|+--java.awt.Window|+--java.awt.Frame|+--javax.swing.Jframe每个包含Swing组件的主窗口都应用JFrame来实现239.2容器组件——JFrame构造函数JFrame();建立一个无标题的FrameJFrame(Stringtitle);建立一个标题为title的Frame。常用方法StringgetTitle();获取窗口标题voidsetTitle(Strings);设置窗口标题voidsetVisible(booleanb);设置窗口可见性voidsetBounds(inta,intb,intwidth,intheight);设置窗口位置和大小voidsetBackground(Colorc);设置窗口背景颜色voidpack();用紧凑方式显示窗口voidsetSize(intwidth,intheight);设置窗口大小voidsetLocation(intx,inty);设置初始位置。其