Java程序设计课件-第八章-Swing图形用户界面程序设计_第1页
Java程序设计课件-第八章-Swing图形用户界面程序设计_第2页
Java程序设计课件-第八章-Swing图形用户界面程序设计_第3页
Java程序设计课件-第八章-Swing图形用户界面程序设计_第4页
Java程序设计课件-第八章-Swing图形用户界面程序设计_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java语言程序设计

第八章swing图形用户界面

(GUI)编程讲授人:傅晓阳教授本章课程纲要Swing高级编程事件处理组件与布局√DavidFu本课程纲要布局管理器

swing组件概述

组件与容器

组件与布局DavidFu组件与容器图形用户界面(GUI)数据的图形显示形式友好的交互方式简化计算机软件的学习过程GUI组件重量级组件------AWT轻量级组件------Swing,SWT,JFace,jigloo…DavidFu组件与容器早期版本的GUI组件所在的包:java.awt图形用户界面(GUI)可以通过键盘或鼠标来响应用户的操作。抽象窗口工具包(AWT)是一组Java类,此组Java类允许创建图形用户界面(GUI)。与平台相关性较强DavidFu组件与容器SwingGUI组件所在的包:javax.swingSwing组件的平台相关性较小(lightweight)Java1.2引入称为Swing的新的GUI组件库。

Swing包括javax.swing包及其子包。尽管Swing独立于AWT,但它是依照基本的AWT类实现的。每个swing组件都由MVC三个部分组成

DavidFu本课程纲要布局管理器

swing组件概述√

组件与容器组件与布局DavidFu

swing组件继承关系框图

DavidFu顶层容器和中间容器顶层容器类主要包括:JApplet类:小应用程序主要用于设计嵌入到网页的程序模块,通过网页浏览器运行,实现一个小功能JFrame类:窗体框架主要实现一个带边界框架的windows标准的图形用户界面。JDialog类:对话框窗口,通常将窗体框架作为父窗口,创建对话框子窗口。对话框分为模式对话框和非模式对话框。

DavidFu顶层容器和中间容器中间容器面板(JPanel)滚动窗格(JScrollPane)分体窗格(JSplitPane)选项卡窗格(JTabbedPane)工具条(JToolBar)

DavidFu顶层容器和中间容器中间容器面板(JPanel)滚动窗格(JScrollPane)分体窗格(JSplitPane)选项卡窗格(JTabbedPane)工具条(JToolBar)

DavidFuJLabel标签组件标签组件用于显示非编辑文本信息或者图标等图片信息javax.swing.Jlabel的三个构造方法为:publicJlabel(Stringtext)publicJlabel(Iconimage)publicJlabel(Stringtext,Iconimage,int

horizontalAlignment)DavidFuJLabel标签组件VoidsetText(Stringtext)设置标签文本信息。StringgetText()获取标签文本信息。VoidsetIcon(Iconicon)设置图标标签。IcongetIcon()获取标签上的图标。VoidsetHorisonalAlignment(intalignment)设置水平对齐方式。VoidsetVerticalAlignment(intalignment)设置垂直对齐方式。VoidsetToolTipText(Stringtext)设置标签提示信息,当将鼠标指针在标签上停留片刻后,会出现一个标签的提示信息。DavidFu文本框(JTextField)文本框组件用于输入单行文本信息JTextField()JTextField(intcolumns)JTextField(Stringtext)JTextField(String

text,intcolumns)DavidFuJButton按钮JButton通常是用来触发某项命令功能组件Jbutton的主要构造方法为:publicJbutton(Stringtext)publicJbutton(Iconicon)publicJbutton(Stringtext,Iconicon)参数text指定按钮的功能文本信息,使用参数icon指定图标作为按钮的功能信息DavidFuJRadioButton单选框JRadioButton是单选按钮组件

JRadioButton单选框的主要构造方法为:PublicJRadioButton(Iconicon)PublicJRadioButton(Icon

icon,booleanselected)PublicJRadioButton(Stringtext)PublicJRadioButton(Stringtextbooleanselected)PublicJRadioButton(String

text,Iconicon)PublicJRadioButton(String

text,Iconicon,booleanselected)DavidFuJCheckBox复选框复选框JcheckBox的主要构造方法为:publicJCheckBox(Iconicon)publicJCheckBox(Iconicon,Booleanselected)publicJCheckBox(String

text,Iconicon)publicJCheckBox(Stringtext)publicJCheckBox(Stringtext,Booleanselected)publicJCheckBox(String

text,Iconicon,Booleanselected)DavidFu按钮的主要成员方法VoiddoClick()在程序中使用该方法代替鼠标点击按钮的动作StringgetActionCommand()获取按钮的动作命令,主要用于命令按钮VoidsetActionCommand(StringactionCommand)设置命令按钮的动作命令字符串booleanisSelected()判断选择按钮是否选中voidsetSelected(booleanselected)设置按钮的状态VoidsetHorizonalAlignment(intalignment)设置按钮上文本和图标的水平对齐方式VoidsetVerticalAlignment(intalignment)设置按钮上的文本和图标的垂直对齐方式DavidFuJTextAreaJTextArea文本区与JTextField文本框的不同在于JTextArea可以编辑多行文本,而JTextField文本框只能编辑一行文本JtextArea的主要构造方法为:PublicJtextArea()PublicJtextArea(String

text,introws,intcolumns)PublicJtextArea(introws,intcolumns)DavidFuJScrollPane文本区没有自动滚屏的功能,当输入文本超出文本区范围时,需要将文本区添加到滚动窗格中,才能实现滚动浏览更多文本的功能滚动窗格JscrollPane

的主要构造方法为:publicJscrollPane(Componentc)其中,参数c是指定需要加入滚动条功能的组件,例如文本区。具体用法如下:

JTextArea

jTextarea=newJTextArea(5,15);

JScrollPanesp=newJScrollPane(jTextarea);DavidFuJList列表框可以显示一系列的列表项,并可以从中选择一项或多项。列表框不仅可以存放字符串项,也可以存放任何类型的对象。用户可以对列表框中的项目进行添加和删除。列表框的构造方法为:publicJlist(ListModel

dataModel)publicJlist(Object[]listData)publicJlist(Vector<?>listData)

DavidFuJCombBox组合框(JComboBox)可以从下拉式的列表框中选取其中的列表项类JComboBox中的方法getSelectedIndex()返回当前被选中的项setMaximumRowCount(n)设置最多显示列表项的项数滚动条(Scrollbar)会自动加上参见例题TestComponentDavidFu本课程纲要布局管理器

swing组件概述

组件与容器组件与布局DavidFu布局管理器常用的布局管理器为:流式布局(FlowLayout)方位布局(BorderLayout)网格布局(GridLayout)网格块布局(GridBagLayout)卡片布局(CardLayout)盒式布局(BoxLayout)

DavidFuswing容器默认布局方式容器种类默认布局方式javax.swing.JAppletBorderLayout方位布局Javax.swingJFrameBorderLayout方位布局Javax.swing.JDialogBorderLayout方位布局Javax.swing.JpanelFlowLayout流式布局DavidFu流式布局FlowLayout流式布局的特点是按照由左向右、由上向下的顺序排列组件FlowLayout类的构造方法为:(1)publicFlowLayout()(2)publicFlowLayout(intalign)(3)publicFlowLayout(intalign,int

hgap,int

vgap)DavidFu流式布局FlowLayoutDavidFu方位布局BorderLayout方位布局可以将容器分为5个区域:北区、南区、东区、西区和中区。这五个区域只能安排5个组件,分为上北下南,左东右西。BorderLayout将根据容器大小对组件进行布局。北区和南区组件可以在水平方向上进行拉伸;东区和西区组件可以在垂直方向上进行拉伸;中区组件在水平和垂直方向上都可以进行拉伸,从而填充所有剩余空间。BorderLayout类的构造方法为:publicBorderLayout()publicBorderLayout(int

hgap,int

vgap)

DavidFu方位布局BorderLayoutDavidFu网格布局GridLayout网格布局将容器分成若干尺寸大小相等的单元格。用户可以将每个组件布局到每个单元格中,组件的大小受到单元格大小的限制。网格布局GridLayout类的构造方法为:publicGridLayout()publicGridLayout(introws,intcols)publicGridLayout(int

rows,int

cols,int

hgap,int

vgap)DavidFu网格布局GridLayoutDavidFu卡片布局CardLayout卡片布局管理器(CardLayout)设置的容器可以布局多个组件,但这些组件都是叠加到一起,仿佛一幅叠加到一起的“扑克牌”,每次只能看到一个组件的内容。

CardLayout类的构造方法为:publicCardLayout()publicCardLayout(int

hap,int

vgap)DavidFu卡片布局CardLayoutDavidFu箱式布局BoxLayoutBoxLayout类可以设置多个组件沿水平和垂直方向排列,好像港口中的“集装箱”排列一样,因此称为箱式布局。对于箱式布局,容器大小发生变化时,组件所占用的空间不会发生改变,当组件的宽度超出了容器的宽度或高度时,组件也不会换行或换列,而是沿着原来的方向保持“钢性”排列BoxLayout类的构造方法为:PublicBoxLayout(Containerc,intaxis)DavidFu箱式布局BoxLayoutDavidFu本章课程纲要Swing高级编程事件处理√组件与布局DavidFu本课程纲要鼠标事件处理

点击事件处理java事件处理模型

事件处理键盘和焦点事件DavidFujava事件处理模型事件处理模型由三个基本要素组成:事件源:能够产生事件响应的容器或组件对象,如文本框、按钮等。事件对象:由事件源自动产生的事件类对象,封装了事件的相关信息。事件监听器:实现了监听器接口的类,该类具体实现了监听器接口中的抽象方法,从而实现了对事件的处理响应。

DavidFujava事件处理模型DavidFu常用事件源与事件类对应表事件类说明对应事件源ActionEvent动作事件,比如通常按下按钮,双击列表项或选中一个菜单项时,就会生成此事件。JButtonJList,JMenu,JTextField等AdjustmentEvent调节事件,比如移动滚动条等JScrollBar等ComponentEvent组件事件,比如移动组件或改变组件大小JComponent继承的组件,如JButton等FocusEvent焦点事件,比如获得或失去焦点JComponent继承的组件DavidFu常用事件源与事件类对应表ItemEvent事项事件,比如菜单、复选框中各项选中状态的变化JMenu,JList,JComboBox等KeyEvent键盘事件,比如键盘输入键盘MouseEvent鼠标事件,比如点击鼠标左键鼠标MouseMotionEvent鼠标移动事件,比如移动鼠标鼠标WindowEvent窗口事件,比如关闭窗口JFrameDavidFu常用事件监听器接口以及适配器类事件监听器接口方法名称对应适配器类ActionListeneractionPerformed无AdjustmentListeneradjustmentValueChanged无ComponentListenercomponentHidden,componentMoved,componentResized,componentShownComponentAdapterFocusListenerfocusGained,focusLostFocusAdapterItemListeneritemStateChanged无DavidFu常用事件监听器接口以及适配器类KeyListenerkeyPressed,keyReleased,keyTypedKeyAdapterMouseListenermouseCliked,mouseEntered,mouseExited,mousePressed,mouseReleasedMouseAdapterMouseMotionListenermouseDragged,mouseMovedMouseMotionAdapterWindowListenerwindowActivated,windowClosed,windowClosing,windowDeactivated,windowIconfied,windowDeIconfied,windowOpenedWindowAdapterDavidFu本课程纲要鼠标事件处理

点击事件处理√

java事件处理模型事件处理键盘、焦点事件和窗口事件DavidFu点击事件处理机制事件监听器一个事件源能响应哪些事件,响应事件的处理方法由事件监听器完成。在开发过程中需要完成两件事:(1)向事件源注册事件监听器

button.addActionListener(this);在运行过程中,事件监听器一直监视事件源button,一旦用户单击了事件源,事件监听器将创建一个单击事件类ActionEvent类的对象。(2)实现事件处理方法将该事件类对象作为参数传递到事件处理方法中DavidFu点击事件处理机制Java最新的事件处理方法是基于授权事件模型监听器对象属于一个事件类的实例,这个类实现了一个特殊的接口,名为“监听器接口”事件源将在发生事件时向所有注册的监听器发送事件对象。监听器对象使用事件对象中的信息来确定它们对事件的响应。DavidFu点击事件处理机制创建事件监听器类,即创建类实现事件监听器接口。并向事件源注册事件监听器(事件监听器类的对象)用户操作事件源时,java产生事件对象。事件源将事件对象传递给事件监听器事件监听器根据事件对象的种类,调用相应事件处理方法进行事件处理。DavidFu点击事件处理机制点击事件处理的三种编程形式:将本类实现为事件监听器,参见例题10-7单独建立事件监听器类,参见程序例题10-8

使用匿名内部类处理点击事件,参见程序例题10-9

DavidFu本课程纲要鼠标事件处理√

点击事件处理java事件处理模型事件处理键盘、焦点事件和窗口事件DavidFu鼠标事件处理-MouseEvent

鼠标事件处理的监听器鼠标事件监听器(MouseListener)鼠标移动事件监听器(MouseMotionListener)鼠标滚轮事件监听器(MouseWheelListener)。

DavidFu鼠标事件监听器(MouseListener)

鼠标事件监听器主要处理鼠标点击动作以及鼠标与组件容器之间的作用,其接口中的成员方法定义如下:publicvoidmouseClicked(MouseEvente)publicvoidmousePressed(MouseEvente)publicvoidmouseReleased(MouseEvente)publicvoidmouseEntered(MouseEvente)publicvoidmouseExited(MouseEvente)将鼠标事件监听器注册到某个事件源上,可以使用组件或容器的成员方法:publicvoidaddMouseListener(MouseListenerml)DavidFu鼠标事件监听器(MouseListener)

MouseEvent类的常用方法为:publicPointgetPoint()publicint

getX()publicint

getY()publicint

getClickedCount()DavidFuMouseMotionListener鼠标移动事件监听器鼠标移动监听器接口的成员方法定义为:publicvoidmouseDragged(MouseEvente)publicvoidmouseMoved(MouseEvente)将鼠标移动事件监听器注册到事件源组件上,可以使用组件的成员方法:publicvoidaddMouseMotionListener(MouseMotionListener

mml)DavidFuMouseWheelListener鼠标滚轮事件监听器鼠标滚轮事件监听器主要处理鼠标滚轮事件,其接口中的成员方法为:publicvoidmouseWheelMoved(MouseWheelEvente);将鼠标滚轮事件监听器注册到事件源上,可以使用组件或容器的成员方法:publicvoidaddMouseWheelListener(MouseWheelListener

mwl)DavidFuMouseWheelListener成员方法如下:publicPointgetPoint()publicint

getX()publicint

getY()publicint

getWheelRotation()DavidFu鼠标事件适配器MouseAdapter处理鼠标点击事件publicvoidmouseClicked(MouseEvente){}处理按下鼠标过程事件publicvoidmousePressed(MouseEvente){}处理松开鼠标过程事件publicvoidmouseReleased(MouseEvente){}处理鼠标进入组件的事件publicvoidmouseEntered(MouseEvente){}处理鼠标离开组件的事件publicvoidmouseExited(MouseEvente){}DavidFu鼠标事件适配器MouseAdapterMouseMotionAdapter抽象类实现了鼠标移动和拖动的相关事件的两个方法publicvoidmouseDragged(MouseEvente){}publicvoidmouseMoved(MouseEvente){}参见例题10-10

DavidFu本课程纲要鼠标事件处理

点击事件处理java事件处理模型事件处理键盘、焦点事件和窗口事件√DavidFuKeyEvent键盘事件监听器接口KeyListener

publicvoidkeyType(KeyEvente);publicvoidKeyPressed(KeyEvente);publicvoidKeyReleased(KeyEvente);将键盘事件监听器与界面上的组件绑定到一起,其组件的成员方法为:publicvoidaddKeyListener(KeyListener

kl)KeyEvent类的常用成员方法如下:publicchargetKeyChar()publicstaticStringgetKeyText()DavidFuFocusListener处理获得键盘焦点事件publicvoidfocusGained(FocusEvent

fe)处理失去键盘焦点事件publicvoidfocusLost(FocusEvent

fe)参见例题10-11DavidFu窗口事件WindowEvent窗口事件监听器主要处理与窗口打开、关闭以及激活等过程相关的事件。窗口事件监听器接口WindowListener的抽象方法如下:(1)publicvoidwindowActivate(windowEvente)(2)publicvoidwindowClosing(windowEvente)(3)publicvoidwindowClosed(windowEvente)(4)publicvoidwindowIconified(windowEvente)(5)publicvoidwindowDeIconified(windowEvente)(6)publicvoidwindowDeactivate(windowEvente)(7)publicvoidwindowOpened(windowEvente)

参见例题10-12DavidFu本章课程纲要Swing高级编程√事件处理组件与布局DavidFu本课程纲要JTree树组件

JTable表格组件

JMenu菜单组件√

Swing高级编程多文档界面DavidFuJMenu菜单组件DavidFu建立普通菜单的步骤创建菜单栏(JMenuBar)对象JMenuBar

myMenu=newJMenuBar();向窗口中添加菜单栏JFrame和JApplet容器包含一个设置菜单栏的方法setJMenuBar(),通过该方法可以将窗口设置成菜单窗口创建下拉菜单(JMenu)对象JMenu

fileMenu=newJMenu(“文件(F)”);根据特定符号设置菜单助记符使用JMenu成员方法setMnemonic()设置菜单助记符menu.setMnemonic(KeyEvent.VK_F);将菜单添加到菜单栏中

menuBar.add(menu);DavidFu建立普通菜单的步骤创建菜单项对象通过JMenuItem、JCheckBoxMenuItem和JRadioButtonMenuItem类的构造方法创建菜单项JMenuItem

menuItem=newJMenuItem("新建文件");JRadioButtonMenuItem

rbMenuItem=newJRadioButtonMenuItem("添加文件");JCheckBoxMenuItem

cbMenuItem=newJCheckBoxMenuItem("文本编辑");将菜单项添加到下拉菜单中menu.add(rbMenuItem);DavidFuJTablejavax.swing.JTable类提供了一个显示二维数据的表格组件表格通常由表头和表格组成,在表格中列的宽度可以调整,甚至列可以重新排列左右顺序。JTable类构造表格组件的方式如下:调用无参构造函数.

JTabletable=newJTable();以表头和表数据创建表格.

Object[][]cellData={{"row1-col1","row1-col2"},{"row2-col1","row2-col2"}};

String[]columnNames={"col1","col2"};

JTabletable=newJTable(cellData,columnNames);DavidFu本课程纲要JTree树组件

JTable表格组件√

JMenu菜单组件Swing高级编程多文档界面DavidFuJTable

以表头和表数据创建表格,并且让表单元格不可改String[]headers={"表头一","表头二","表头三"};

finalObject[][]data={{"吕布","男",newInteger(25),newBoolean(false)},{"张飞","男",newInteger(30),newBoolean(false)}};DefaultTableModelmodel=newDefaultTableModel(cellData,headers){publicboolean

isCellEditable(introw,intcolumn){

returnfalse;

}

};table=newJTable(model);DavidFu本课程纲要JTree树组件√

JTable表格组件

JMenu菜单组件Swing高级编程多文档界面DavidFuJTreeJavax.swing.JTree类提供了树组件的功能,可以方便的显示多层次数据,比如windows文件浏览器中的文件列表就是由树状结构实现的DavidFuJTreeDefaultMutableTreeNode类提供了创建树上节点的构造方法:DefaultMutableTreeNode

rootNode=newDefaultMutableTreeNode("运动");树组件可以触发TreeSelectionEvent事件,通过树组件对象调用注册监听器的方法来注册树组件的事件监听器:addTreeSelectionListener(TreeSelectionListener

tsl)DavidFuJTree当鼠标点击树上的节点时,系统将自动创建TreeSelectionEvent对象,并将该对象传递到监听器接口TreeSelectionListener的成员方法valueChanged(TreeSelectionEvente)中,通过该成员方法处理树节点相关信息。树中特定的节点可以由TreePath对象标识,通过TreePath对象获得当前节点的路径信息。使用getLastSelectedPathComponent()方法获取选中的节点。参见例题10-15DavidFu本课程纲要JTree树组件

JTable表格组件

JMenu菜单组件Swing高级编程多文档界面√DavidFu多文档界面用于实现多文档界面的两个主要的类分别是javax.swing.JDesktopPanejavax.swing.JInternalFrame类DavidFu设计多文档界面的步骤

通过getContentPane()方法获取JFrame窗体的底层面板。创建JDesktopPane桌面面板对象,并将该对象组件添加到JFrame窗体的底层面板上。在相关的事件处理方法中,创建JInternalFrame内部框架组件对象,并在该组件对象的ContentPane中添加相关组件或容器,构成子窗口组件。将子窗口组件添加到桌面面板上,由桌面面板组件统一管理多个子窗口DavidFuJDesktopPane类的主要成员方法

JInternalFrame[]getAllFrames()

返回桌面中当前显示的所有JInternalFrames。

JInternalFrame[]getAllFramesInLayer(int

layer)

返回桌面指定层中所显示的所有子窗口。

DesktopManagergetDesktopManager()

返回处理特定于桌面UI操作的DesktopManger。

intgetDragMode()

获取桌面窗格当前使用的“拖动样式”。

JInte

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论