




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java语言程序设计天津理工大学计算机与通信工程学院主讲教师:李双喜
2023/4/1第10章基于Swing的图形用户界面设计第2
页第11章基于Swing的图形
用户界面设计2023/4/1第10章基于Swing的图形用户界面设计第3
页1.概述2.JFrame窗体5.中间容器6.文本组件7.按钮与标签组件8.复选框与单选按钮组件9.列表组件10.表格组件11.树组件12.进度条组件13.组件常用方法14.窗口事件15.鼠标事件16.焦点事件17.键盘事件18.AWT线程19.计时器20.MVC模式21.播放音频22.对话框23.多文档界面24.发布应用程序2023/4/1第10章基于Swing的图形用户界面设计第4
页11.1AWT组件与SWING组件概述Java早期进行用户界面设计时,使用Java.awt包中提供的类;java.awt包中的类创建的组件习惯上称作重组件;JDK1.2之后,新增javax.swing包,提供了更加丰富的、功能强大的组件,称为swing组件。大部分组件是轻量组件,外观不依赖平台,且较重量组件而言有更高的性能。2023/4/1第10章基于Swing的图形用户界面设计第5
页JComponent类的部分子类以及JFrame类和JDialog类Container
JFrameJDialogWindowFrameDialogJComponent
JButton
JTextField
JTeatArea
JTree
JPanel
JTableComponent轻组件java.awtjava.awt2023/4/1第10章基于Swing的图形用户界面设计第6
页两个概念:容器类(Container)和组件类(Component)。Java把由Component类的子类或间接子类创建的对象称为一个组件。Java把由Container的子类或间接子类创建的对象称为一个容器。可以向容器添加组件。Container类提供了一个public方法:add(),一个容器可以调用这个方法将组件添加到该容器中。调用removeAll()方法可以移掉容器中的全部组件;调用remove(Componentc)方法可以移掉容器中参数指定的组件。每当容器添加新的组件或移掉组件时,应该让容器调用validate()方法,以保证容器中的组件能正确显示出来。2023/4/1第10章基于Swing的图形用户界面设计第7
页容器本身也是一个组件,因此你可以把一个容器添加到另一个容器中实现容器的嵌套。swing包中有四个最重要的类:JApplet、JFrame、JDialog和JComponent。JFrame、JApplet、JDialog都是重组件,即有同位体的组件。窗口(JFrame)、对话框(JDialog)、小应用程序(JApplet)可以和操作系统交互信息,轻组件必须在这些重量容器中绘制自己。这些容器称为Swing的底层容器。返回2023/4/1第10章基于Swing的图形用户界面设计第8
页11.2JFrame窗体JFrame类其子类创建的对象是窗体,是重量容器。JFrame类常用方法如下:JFrame()——创建一个无标题的窗口。JFrame(Strings)——创建一个标题为s的窗口。publicvoidsetBounds(inta,intb,intwidth,intheight)——设置出现在屏幕上时的初始位置为(a,b),即距屏幕左面a个像素、距屏幕上方b个像素;窗口的宽是width,高是height。publicvoidsetSize(intwidth,intheight)——设置窗口的大小,窗口在屏幕出现是默认位置是(0,0)。publicvoidsetVisible(booleanb)——设置窗口是可见还是不可见,窗口默认是不可见的。2023/4/1第10章基于Swing的图形用户界面设计第9
页publicvoidsetResizable(booleanb)——设置窗口是否可调整大小,默认可调整。publicvoidsetDefaultCloseOperation(int
operation)——设置用户单击此窗体右上角的关闭图标后,程序执行的操作。DO_NOTHING_ON_CLOSE:不执行任何操作;HIDE_ON_CLOSE:隐藏该窗体。DISPOSE_ON_CLOSE:自动隐藏并释放该窗体。EXIT_ON_CLOSE:退出应用程序。2023/4/1第10章基于Swing的图形用户界面设计第10
页11.3菜单组件1.JMenuBar菜单条JComponent类的子类JMenubar是负责创建菜单条的,即JMenubar的一个实例就是一个菜单条。JFrame类有一个将菜单条放置到窗口中的方法:publicvoidsetJMenuBar(JMenuBarmenubar);注意:只能向窗口添加一个菜单条。2023/4/1第10章基于Swing的图形用户界面设计第11
页2.JMenu菜单JComponent类的子类JMenu类是负责创建菜单的,JMenu类的主要方法有以下几种:JMenu(Strings)建立一个指定标题菜单,标题由参数s确定。publicvoidadd(MenuItemitem)向菜单增加由参数item指定的菜单选项对象。publicvoidadd(Strings)向菜单增加指定的选项。publicJMenuItemgetItem(intn)得到指定索引处的菜单选项。publicintgetItemCount()得到菜单选项数目。2023/4/1第10章基于Swing的图形用户界面设计第12
页3.JMenuItem菜单项JMenuItem是JMenu的父类,负责创建菜单项。主要方法:JMenuItem(Strings)构造有标题的菜单;JMenuItem(Stringtext,Iconicon)构造有标题和图标的菜单项;publicvoidsetEnabled(booleanb):设置当前菜单项是否可被选择。2023/4/1第10章基于Swing的图形用户界面设计第13
页publicStringgetLabel()得到菜单选项的名字。publicvoidsetAccelerator(KeyStrokekeyStroke)为菜单项设置快捷键。KeyStroke类的类方法:publicstaticKeyStrokegetKeyStroke(charkeyChar)publicstaticKeyStrokegetKeyStroke(intkeyCode,intmodifiers)keyCode取值范围:KeyEvent.VK_A~KeyEvent.VK_Z。modifiers取值:InputEvent.ALT_MASK、 InputEvent.CTRL_MASK、 InputEvent.SHIFT_MASK。2023/4/1第10章基于Swing的图形用户界面设计第14
页4.嵌入子菜单JMenu是JMenuItem的子类,因此菜单项本身还可以是一个菜单,称这样的菜单项为子菜单。为了使得菜单项有一个图标,可以用图标类Icon声明一个图标,然后使用其子类ImageIcon类创建一个图标,如:Iconicon=newImageIcon(“dog.gif”);下面的例子1是一个含有菜单的窗口。返回2023/4/1第10章基于Swing的图形用户界面设计第15
页【例10-1】一个含有菜单的窗口。返回2023/4/1第10章基于Swing的图形用户界面设计第16
页11.4布局设计java.awt包中的布局类:FlowLayout、BorderLayout、CardLayout、GridLayoutjava.swing.border包中的布局类:BoxLayoutJFrame窗口的默认布局是BorderLayout布局。容器可以使用方法setLayout(布局对象)来设置自己的布局。2023/4/1第10章基于Swing的图形用户界面设计第17
页1.FlowLayout布局FlowLayout类创建的对象称做FlowLayout型布局。构造方法:FlowLayout()该构造方法可以创建一个居中对齐的布局对象。例如:FlowLayoutflow=newFlowLayout();容器con使用这个布局对象:con.setLayout(flow);con可以使用Container类提供的add方法将组件顺序地添加到容器中,组件按照加入的先后顺序从左向右排列,一行排满之后就转到下一行继续从左至右排列。2023/4/1第10章基于Swing的图形用户界面设计第18
页setHgap(inthgap):设置布局的水平间隙;setVgap(intvgap):设置布局的垂直间隙。【例11-1】JFrame使用FlowLayout布局放置10个组件。2023/4/1第10章基于Swing的图形用户界面设计第19
页2.BorderLayout布局Window型容器的默认布局。容器空间简单地划分为东、西、南、北、中五个区域;每加入一个组件都应该指明把这个组件添加在哪个区域中;区域由BorderLayout中的静态常量CENTER、NORTH、SOUTH、WEST、EAST表示。添加到某个区域的组件将占据整个这个区域;每个区域只能放置一个组件,如果向某个已放置了组件的区域再放置一个组件,那么先前的组件将被后者替换掉。2023/4/1第10章基于Swing的图形用户界面设计第20
页【例11-3】2023/4/1第10章基于Swing的图形用户界面设计第21
页3.CardLayout布局使用CardLayout的容器可以容纳多个组件,但同一时刻容器只能从这些组件中选出一个来显示,这个被显示的组件将占据所有的容器空间。JTabbedPane创建的对象是一个轻容器,称作选项卡窗格。选项卡窗格的默认布局是CardLayout卡片式布局。可以使用add(Stringtext,Componentc)将组件c添加到容器当中,并指定和该组件c对应的选项卡的文本提示是text。2023/4/1第10章基于Swing的图形用户界面设计第22
页【例11-4】在选项卡窗格中添加了5个按钮,并设置了相对应的选项卡的文本提示,然后将选项卡窗格添加到窗体中。2023/4/1第10章基于Swing的图形用户界面设计第23
页4.GridLayout布局把容器划分成若干行乘若干列的网格区域,组件就位于这些划分出来的小格中。一般步骤:使用GridLayout的构造方法GridLayout(intm,intn)创建布局对象,指定划分网格的行数m和列数n,
例如:GridLayoutgrid=newnewGridLayout(10,8);使用GridLayout布局的容器调用方法add将组件加入容器,组件进入容器的顺序将按照第一行第一个、第一行第二个、…、第一行最后一个、第二行第一个、…、最后一行第一个、…、最后一行最后一个。2023/4/1第10章基于Swing的图形用户界面设计第24
页5.BoxLayout布局BoxLayout在java.swing.border包中,称为盒式布局;javaswing包的Box类Container类的一个子类,创建的容器称作一个盒式容器;盒式容器的的默认布局是盒式布局,且不允许更改盒式容器的布局。可以利用容器的嵌套,将某个容器嵌入几个盒式容器,达到布局目的。使用盒式布局的容器将组件排列在一行或一列,这取决于创建盒式布局对象时,是否指定了是行排列还是列排列。2023/4/1第10章基于Swing的图形用户界面设计第25
页行型盒式布局容器中添加的组件的上沿在同一水平线上。列型盒式布局容器中添加的组件的左沿在同一垂直线上。createHorizontalBox():获得一个具有行型盒式布局的盒式容器;createVerticalBox():获得一个具有列型盒式布局的盒式容器。使用水平支撑或垂直支撑可以控制盒式布局容器中组件之间的距离。createHorizontalStrut(intwidth):得到一个不可见的水平Struct类型对象,称做水平支撑。 该水平支撑的高度为0,宽度是width。createVertialStrut(intheight):得到一个不可见的垂直Struct类型对象,称做垂直支撑。 参数height决定垂直支撑的高度,垂直支撑的宽度为0。2023/4/1第10章基于Swing的图形用户界面设计第26
页【例11-5】有两个列型盒式容器:boxV1、boxV2和一个行行盒式容器baseBox。在列型盒式容器的组件之间添加垂直支撑,控制组件之间的距离,将boxV1、boxV2添加到baseBox中,并在它俩之间添加了水平支撑。2023/4/1第10章基于Swing的图形用户界面设计第27
页6.null布局空布局容器可以准确地定位组件在容器的位置和大小。所有组件都拥有setBounds(inta,intb,intwidth,intheight)方法,组件调用该方法可以设置本身的大小和在容器中的位置。例如,p.setLayout(null);把容器p的布局设置为空布局。2023/4/1第10章基于Swing的图形用户界面设计第28
页向空布局的容器p添加一个组件c需要两个步骤:首先使用add(c)方法向容器添加组件,然后组件c再调用setBounds(inta,intb,intwidth,intheight)方法设置该组件在容器中的位置和本身的大小, 参数a,b是被添加的组件c的左上角在容器中的位置坐标,即该组件距容器左面a个像素,距容器上方b个像素; weidth,height是组件c的宽和高。返回2023/4/1第10章基于Swing的图形用户界面设计第29
页11.5中间容器1.JPanel面板使用JPanel可以创建一个面板,再向这个面板添加组件,然后把这个面板添加到底层容器或其他中间容器中。JPanel面板的默认布局是FlowLayout布局。可以使用构造方法JPanel()构造一个面板容器对象。2023/4/1第10章基于Swing的图形用户界面设计第30
页2.JScrollPane滚动窗格我们可以把一个组件放到一个滚动窗格中,然后通过滚动条来观察这个组件。例如,JTextArea不自带滚动条,因此我们就需要把文本区放到一个滚动窗格中。可以使用JScorollPane的构造方法JScorollPane(componentc)构造一个滚动窗格。2023/4/1第10章基于Swing的图形用户界面设计第31
页3.JSplitPane拆分窗格两种类型:水平拆分和垂直拆分。水平拆分窗口用一条拆分线把容器分成左右两部分,左面放一个组件,右面放一个组件,拆分线可以水平移动。垂直拆分窗格由一条拆分线分成上下两部分,上面放一个组件,下面放一个组件,拆分线可以垂直移动。构造方法JSplitPane(inta,Componentb,Componentc)a取JSplitPane的静态常量HORIZONTAL_SPLIT或VERTICAL_SPLIT,以决定是水平还是垂直拆分。后两个参数决定要放置的组件。setDividerLocation(doubleposition)kyi设置拆分线的位置。2023/4/1第10章基于Swing的图形用户界面设计第32
页4.JLayeredPane分层窗格JLayeredPane容器可以处理组件重叠问题。JLayeredPane容器将容器分成5个层;容器使用add(ponentcom,intlayer)添加组件com,并指定com所在的层。其中参数layer取值JLayeredPane类中的类常量:DEFAULT_LAYER、PALETTE_LAYER、MODAL_LAYER、POPUP_LAYER、DRAG_LAYER。DEFAULT_LAYER是最底层;DRAG_LAYER层是最上面的层。添加到同一层上的组件,如果发生重叠,后添加的会遮挡先添加的组件。2023/4/1第10章基于Swing的图形用户界面设计第33
页publicvoidsetLayer(Componentc,intlayer) 可以重新设置组件c所在的层;publicintgetLayer(Componentc) 可以获取组件c所在的层数。【例11-6】返回2023/4/1第10章基于Swing的图形用户界面设计第34
页11.6文本组件1.JTextField文本框JTextField(intx) 文本框的可见字符个数由参数x指定。JTextField(Strings) 文本框的初始字符串为s.publicvoidsetText(Strings) 设置文本框中的文本为参数s指定的文本。publicStringgetText() 获取文本框中的文本。2023/4/1第10章基于Swing的图形用户界面设计第35
页publicvoidsetEditable(booleanb) 指定文本框的可编辑性。publicvoidsetHorizontalAlignment(intalignment) 设置文本在文本框中的对齐方式。2.JPasswordField密码框setEchoChar(charc) 设置回显字符(默认的回显字符是‘*’);char[]getPassword() 返回密码框中的密码。2023/4/1第10章基于Swing的图形用户界面设计第36
页3.ActionEvent事件(1)事件源能够产生事件的对象都可以成为事件源,如文本框、按钮、下拉式列表等。事件源必须是一个对象,而且这个对象必须是Java认为能够发生事件的对象。2023/4/1第10章基于Swing的图形用户界面设计第37
页(2)监视器事件源通过调用相应的方法将某个对象作为自己的监视器。例如,对于文本框,addActionListener(ActioListenerlistener)对于获取了监视器的文本框对象,在文本框获得输入焦点之后,如果用户按回车键,Java运行系统就自动用ActionEvent类创建了一个对象,即发生了ActionEvent事件。2023/4/1第10章基于Swing的图形用户界面设计第38
页(3)处理事件的接口发生ActionEvent事件的事件源对象获得监视器方法是:addActionListener(ActioListenerlistener);参数是ActioListener类型的接口,必须将一个实现ActioListener接口的类创建的对象传递给该方法的参数,使得该对象成为事件源的监视器。监视器负责调用特定的方法处理事件,也就是说创建监视器的类必须提供处理事件的特定方法,即实现接口方法。2023/4/1第10章基于Swing的图形用户界面设计第39
页为了能监视到ActionEvent类型事件,事件源必须使用addActionListener方法获得监视器;创建监视器的类必须实现接口ActionListener。2023/4/1第10章基于Swing的图形用户界面设计第40
页通知发生XXX事件事件源.addXXXListener(存放监视器引用的接口)接口方法(XXXe)
实现XXXListener接口的监视器接口回调事件处理2023/4/1第10章基于Swing的图形用户界面设计第41
页(4)ActionEvent类中的方法方法publicObjectgetSource()可以返回发生ActionEvent事件的对象的引用。【例11-7】2023/4/1第10章基于Swing的图形用户界面设计第42
页【例11-8】【例11-9】2023/4/1第10章基于Swing的图形用户界面设计第43
页4.菜单项上的ActionEvent事件单击某个菜单项可以发生ActionEvent事件。addActionListener(ActionListenerlistner)获得监视器。2023/4/1第10章基于Swing的图形用户界面设计第44
页5.JTextArea文本区(1)常用方法JTextArea(introws,intcolumns)构造一个可见行和可见列分别是rows、columns的文本区。setLineWrap(booleanb):决定输入的文本能否在文本区的右边界自动换行;setWrapStyleWord(booleanb)决定是以单词为界(b取true时)或以字符为界(b取false时)进行换行。2023/4/1第10章基于Swing的图形用户界面设计第45
页append(Strings)尾加文本。insert(Strings,intx)在文本区的指定位置处插入文本。getCaretPosition()获取文本区中输入光标的位置copy():将文本区中选中的内容拷贝剪贴板cut():将文本区中选中的内容剪切到剪贴板。paste():将剪贴板上的文本数据粘贴在文本区中。2023/4/1第10章基于Swing的图形用户界面设计第46
页【例11-10】2023/4/1第10章基于Swing的图形用户界面设计第47
页(2)文本区上的DucumentEvent事件DucumentEven类在javax.swing.event包中。用户在文本区组件的UI代表的视图中进行文本编辑操作,使得文本区中的文本内容发生变化,将导致该组件所维护的文档模型中的数据发生变化,从而导致DucumentEvent事件的发生。需要使用addDucumentListener()方法向组件维护的文档注册监视器。2023/4/1第10章基于Swing的图形用户界面设计第48
页监视器需实现DucumentListener接口,该接口中有三个方法:publicvoidchangedUpdate(DocumentEvente)publicvoidremoveUpdate(DocumentEvente)publicvoidinsertUpdate(DocumentEvente)文本区调用getDocument()方法返回维护的文档,该文档是实现了Document接口类的一个实例。【例11-11】2023/4/1第10章基于Swing的图形用户界面设计第49
页11.7按钮与标签组件1.JButton按钮组件JButton类创建的一个对象就是一个按钮。JButton(Stringtext)创建名字是text的按钮。publicJButton(Iconicon)创建带有图标icon的按钮。publicJButton(Stringtext,Iconicon)创建名字是text且带有图标icon的按钮publicvoidsetText(Stringtext)重新设置当前按钮的名字,名字由参数text指定。2023/4/1第10章基于Swing的图形用户界面设计第50
页publicStringgetText()获取当前按钮上的名字。publicvoidsetIcon(Iconicon)重新设置当前按钮上的图标。publicIcongetIcon()按钮调用该方法可以获取当前按钮上的图标publicvoidsetHorizontalTextPosition(inttextPosition)设置按钮名字相对按钮上图标的水平位置,参数textPosition的有效值是:AbstractButton.LEFT、AbstractButton.CENTERT、AbstractButton.RIGHT。2023/4/1第10章基于Swing的图形用户界面设计第51
页publicvoidsetVerticalTextPosition(inttextPosition)设置按钮上名字相对按钮上图标的垂直位置。publicvoidsetMnemonic(charmnemonic)设置按钮的键盘激活方式,mnemonic的有效值是:’a’~’z’。publicvoidaddActionListener(ActionListener)向按钮增加动作监视器。publicvoidremoveActionListener(ActionListener)移去按钮上的动作监视器。2023/4/1第10章基于Swing的图形用户界面设计第52
页【例11-12】单击按钮切换按钮上的图标2.标签组件JLabel类负责创建标签对象。JLabel类的构造方法:publicJLabel()创建没有名字的标签。2023/4/1第10章基于Swing的图形用户界面设计第53
页publicJLabel(Strings)创建名字是s的标签,s在标签中靠左对齐。publicJLabel(Strings,intaligment)aligment决定标签中的文字在标签中的水平对齐方式。publicJLabel(Iconicon)创建具有图标icon的标签,icon在标签中靠左对齐。publicJLabel(Strings,Iconicon,intaligment)创建名字是s,具有图标icon的标签;参数aligment决定标签中的文字和图标做为一个整体在标签中的水平对齐方式。2023/4/1第10章基于Swing的图形用户界面设计第54
页JLabel类的常用方法:StringgetText()获取标签的名字。voidsetText(Strings)设置标签的名字是s。IcongetIcon()获取标签的图标。voidsetIcon(Iconicon)设置标签的图标是icon。返回2023/4/1第10章基于Swing的图形用户界面设计第55
页voidsetHorizontalTextPosition(inta)参数a确定名字相对于图标的位置,a的取值是:JLabel.LEFT,JLabel.RIGHT。voidsetVerticalTextPosition(inta)参数a确定名字相对于JLabel上的图标的位置,参数a取值是:JLabel.BOTTOM,JLabel.TOP。返回2023/4/1第10章基于Swing的图形用户界面设计第56
页11.8复选框与单选按钮组件1.JCheckBox复选框复选框提供两种状态:选中,未选中。(1)JCheckBox类常用方法publicJCheckBox()创建一个没有名字的复选框。publicJCheckBox(Stringtext)创建一个名字是text的复选框。publicJCheckBox(Iconicon)创建一个带有默认图标icon,但没有名字的复选框。2023/4/1第10章基于Swing的图形用户界面设计第57
页publicJCheckBox(Stringtext,Iconicon)创建一个带有默认图标和名字text的复选框。publicvoidsetIcon(IcondefaultIcon)设置复选框上的默认图标。publicvoidsetSelectedIcon(IconselectedIcon)设置复选框选中状态下的图标。publicbooleanisSelected()复选框处于选中状态返回true,否则返回false。如果不对复选框进行初始化设置,默认的初始化设置均为为选中。2023/4/1第10章基于Swing的图形用户界面设计第58
页(2)复选框上的ItemEvent事件复选框可以发生ItemEvent事件,JCheckBox类提供了addItemListener方法。处理ItemEvent事件的接口是ItemListener,创建监视器的类必须实现ItemListener接口,该接口中只有一个的方法。当在复选框发生ItemEvent事件时,监视器将自动调用接口方法publicvoiditemStateChanged(ItemEvente)对发生的事件作出处理。ItemEvent类中的方法getItemSelectable()返回Itemevent事件的事件源。2023/4/1第10章基于Swing的图形用户界面设计第59
页【例11-13】2023/4/1第10章基于Swing的图形用户界面设计第60
页2.JRadioButton单选按钮一组单选按钮同一时刻只能有一个被选中。当创建了若干个单选按钮后,应使用ButtonGroup再创建一个对象,然后利用这个对象把这若干个单选按钮归组。归到同一组的单选按钮每一时刻只能选一。2023/4/1第10章基于Swing的图形用户界面设计第61
页11.9列表组件1.下拉列表常用方法publicJComboBox()构造方法,创建一个没有选项下拉列表。publicvoidaddItem(ObjectanObject)增加选项。publicintgetSelectedIndex()返回当前下拉列表中被选中的选项的索引,索引的起始值是0。2023/4/1第10章基于Swing的图形用户界面设计第62
页publicObjectgetSelectedItem()返回当前下拉列表中被选中的选项。publicvoidremoveItemAt(intanIndex)从下拉列表的选项中删除索引值是anIndex选项。publicvoidremoveAllItems()删除全部选项。publicvoidaddItemListener(ItemListener)向下拉列表增加ItemEvent事件的监视器。2023/4/1第10章基于Swing的图形用户界面设计第63
页2.下拉式列表上的ItemEvent事件对于下拉式列表事件源,可以发生ItemEvent事件。当下拉式列表获得监视器之后,用户在下拉列表的选项中选中某个选项时就发生ItemEvent事件,ItemEvent类将自动创建一个事件对象。返回2023/4/1第10章基于Swing的图形用户界面设计第64
页【例11-14】2023/4/1第10章基于Swing的图形用户界面设计第65
页11.10表格组件使用JTable可以创建一个表格对象。构造方法:JTable(Objectdata[][],ObjectcolumnName[])。参数columnName用来指定表格的列名。用户在表格单元中输入的数据都被认为是一个Object对象,用户通过表格视图对表格单元中的数据进行编辑,以达到修改二维数组data中对应的数据。2023/4/1第10章基于Swing的图形用户界面设计第66
页【例11-15】返回2023/4/1第10章基于Swing的图形用户界面设计第67
页11.11树组件1.树与节点JTree类的实例称作树组件。要想构造一个树组件,必须要事先创建出称作节点的对象。任何实现MutableTreeNode接口的类创建的对象都可以成为树上的节点,树中最基本的对象叫做节点,树以垂直方式显示数据,每行显示一个节点。树中只有一个根节点,所有其它节点从这里引出。除根节点外,其它节点分为两类:一类是带子节点的分支节点,另一类是不带子节点的叶节点。每一个节点关联着一个描述该节点的文本标签和图像图标。2023/4/1第10章基于Swing的图形用户界面设计第68
页DefaultMutableTreeNode类是实现了MutableTreeNode接口的类,可以使用这个类为要创建的树准备节点。DefaultMutableTreeNode类的两个常用的构造方法是:DefaultMutableTreeNode(ObjectuserObject)DefaultMutableTreeNode(ObjectuserObject,booleanallowChildren)。第一个构造方法创建的节点默认可以有子节点,第二个构造方法创建的节点有无子节点要根据。参数allowChildren的真假来判断,allowChildren为true时有子节点,为假时无子节点。2023/4/1第10章基于Swing的图形用户界面设计第69
页2.树上的TreeSelectionEvent事件树组件可以触发TreeSelectionEvent事件,树使用addTreeSelectionListener(TreeSelectionListenerlistener)方法获得一个监视器。此接口中的方法是:publicvoidvalueChanged(TreeSelectionEvente)getLastSelectedPathComponent()获取选中的节点getUserObject()得到与节点相关的信息。返回2023/4/1第10章基于Swing的图形用户界面设计第70
页【例11-16】2023/4/1第10章基于Swing的图形用户界面设计第71
页11.12进度条组件1.JProgressBar类使用JProgressBar类创建进度条组件。该组件能用一种颜色动态地填充自己,以便显示某任务完成的百分比。3个常用的构造函数:JProgessBar()JProgressBar(intmin,intmax)JProgressBar(intorient,intmin,intmax)进度条默认地用一种颜色水平填充自己,进度条通过调用方法:pulicvoidsetsetValue(intn)来填充自己。2023/4/1第10章基于Swing的图形用户界面设计第72
页进度条的最大值和最小值分别是缺省值100和0。setMinimum(intmin),setMaximum(intmax)【例11-17】用进度条模拟显示线程的计算速度,一个线程用递归算法输出Fibinacci序列的前100项;另一个线程使用循环输出Fibinacci序列的前100项。2023/4/1第10章基于Swing的图形用户界面设计第73
页2.带进度条的输入流输入流类ProgressMonitorInputStream可以显示文件的读取进度。构造方法:ProgressMonitorInputStream(Conmponentc,Strings,InputStream);返回
【例10-18】2023/4/1第10章基于Swing的图形用户界面设计第74
页11.13组件的常见方法JComponent类是所有组件的父类。组件都是矩形形状;组件本身有一个默认的坐标系,组件的左上角的坐标值是(0,0)。如果一个组件的宽是20,高是10,那么,该坐标系中,x坐标的最大值是20;y坐标的最大值是10。
组件组件上的坐标系2023/4/1第10章基于Swing的图形用户界面设计第75
页1.组件的颜色publicvoidsetBackground(Coloec)设置组件的背景色。publicvoidsetForeground(Coloec)设置组件的前景色。publicColorgetBackground(Colorc)获取组件的背景色。publicColorgetForeground(Colorc)获取组件的前景色。2023/4/1第10章基于Swing的图形用户界面设计第76
页Color类是java.awt包中的类,该类创建的对象称为颜色对象。publicColor(intred,intgreen,ingblue)可以创建一个颜色对象,其中red、green、blue的取值在0到255之间。2.组件透明组件默认是不透明的。publicvoidsetOpaque(booleanisOpaque)设置组件是否不透明;参数isOpaque取false时组件被设置为透明,取值true时组件被设置为不透明。publicbooleanisOpaque()当组件不透明时该方法返回true,否则返回false。2023/4/1第10章基于Swing的图形用户界面设计第77
页3.组件的边框组件默认的边框是一个黑边的矩形。publicvoidsetBorder(Borderborder)设置组件的边框。setBorder()的参数是一个接口,必须向该参数传递一个实现接口Border类的实例,如果传递一个null,组件将取消边框。publicBordergetBorder()返回边框。2023/4/1第10章基于Swing的图形用户界面设计第78
页4.组件的字体publicvoidsetFont(Fontf)设置组件上的字体。publicFontgetFont(Fontf)获取组件上的字体。2023/4/1第10章基于Swing的图形用户界面设计第79
页java.awt包中的Font类创建的对象称为字体对象。构造方法publicFont(Stringname,intstyle,intsize);创建字体对象,name是字体的名字,如果系统不支持字体的名字,将取默认的名字创建字体对象。style决定字体的样式,取值是一个整数。在创建字体对象时,应当给出一个合理的字体名字,也就是说,程序所在的计算机系统上有这样的字体名字。如果在创建字体对象时,没有给出一个合理的字体名字,那么该字体在特定平台的字体系统名称为默认名称。
【例11-19】2023/4/1第10章基于Swing的图形用户界面设计第80
页
【例11-19】2023/4/1第10章基于Swing的图形用户界面设计第81
页5.组件的大小与位置publicvoidsetSize(intwidth,intheight)设置组件的大小,参数width、height指定组件的宽度和高度。publicvoidsetLocation(intx,inty)设置组件在容器中的位置,参数x,y是组件距容器的左边界x个像素,距容器的上边界y个像素。publicDimensiongetSize()返回一个Dimension对象的引用,该对象实体中含有名字是width和height的成员变量,也就是当前组件的宽度和高度。2023/4/1第10章基于Swing的图形用户界面设计第82
页publicPointgetLocation(intx,inty)返回一个Point对象的引用,该对象实体中含有名字是x和y的成员变量,就是组件的左上角在容器的坐标系中的x坐标和y坐标。publicvoidsetBounds(intx,inty,intwidth,intheight)设置组件在容器中的位置和组件的大小。publicRectanglegetBounds()返回一个Rectangle对象的引用,该对象实体中含有名字是x、y、width和height的成员变量,分别是当前组件左上角在容器坐标系中的x坐标和y坐标,宽度和高度。2023/4/1第10章基于Swing的图形用户界面设计第83
页6.组件的激活与可见性publicvoidsetEnabled(booleanb)设置组件是否可被激活;当参数b取值true时,组件可以被激活,当参数b取值false时,组件不可激活。默认情况下,组件是可以被激活的。publicvoidsetVisible(boolean)设置组件在该容器中的可见性;当参数b取值true时,组件在容器中可见,当参数b取值false时,组件在容器中不可见。除了Window型组件外,其它类型组件默认是可见的。返回2023/4/1第10章基于Swing的图形用户界面设计第84
页11.14窗口事件1.WindowListener接口当一个JFrame窗口被激活、撤消激活、打开、关闭、图标化或撤消图标化时,就引发了窗口事件,即WindowEvent创建一个窗口事件对象。窗口使用addWindowlistener方法获得监视器,创建监视器对象的类必须实现WindowListener接口。该接口中有7个不同的方法:publicvoidwindowActivated(WindowEvente) 将Window设置为活动Window时调用。publicvoidwindowClosed(WindowEvente) 因对窗口调用dispose而将其关闭时调用。2023/4/1第10章基于Swing的图形用户界面设计第85
页publicvoidwindowClosing(WindowEvente) 用户试图从窗口的系统菜单中关闭窗口时调用。publicvoidwindowDeactivated(WindowEvente) 当Window不再是活动Window时调用。publicvoidwindowIconified(WindowEvente) 窗口从正常状态变为最小化状态时调用。publicvoidwindowDeiconified(WindowEvente) 当窗口撤消图标化时,窗口的监视器调用该方法。publicvoidwindowOpened(WindowEvente) 当窗口打开时,窗口的监视器调用该方法。getWindow() 获取发生窗口事件的窗口。2023/4/1第10章基于Swing的图形用户界面设计第86
页2.WindowAdapter适配器indowAdapter类是实现了WindowListener接口的类。【例11-20】使用WindowAdapter的匿名类(匿名类就是WindowAdapter的一个子类)做窗口的监视器。2023/4/1第10章基于Swing的图形用户界面设计第87
页11.15鼠标事件1.鼠标事件的触发组件触发鼠标事件的7种操作:鼠标指针从组件之外进入鼠标指针从组件内退出鼠标指针停留在组件上时,按下鼠标鼠标指针停留在组件上时,释放鼠标鼠标指针停留在组件上时,单击鼠标在组件上拖动鼠标指针在组件上运动鼠标指针鼠标事件的类型是MouseEvent,即组件触发鼠标事件时,MouseEvent类自动创建一个事件对象。2023/4/1第10章基于Swing的图形用户界面设计第88
页2.MouseListener接口与MouseMotionListener接口Java分别使用两个接口来处理鼠标事件(1)MouseListener接口如果事件源使用addMouseMotionListener(MouseListenerlistener)获取监视器,那么用户的下列5种操作可使得事件源触发鼠标事件:鼠标指针从组件之外进入鼠标指针从组件内退出鼠标指针停留在组件上面时,按下鼠标鼠标指针停留在组件上面时,释放鼠标鼠标指针停留在组件上面时,单击或连续单击鼠标2023/4/1第10章基于Swing的图形用户界面设计第89
页创建监视器的类必须要实现MouseListener接口,该接口有5个方法:mousePressed(MouseEvent) 负责处理鼠标按下触发的鼠标事件。mouseReleased(MouseEvente) 负责处理鼠标释放触发的鼠标事件。mouseEntered(MouseEvente) 负责处理鼠标进入组件触发的鼠标事件。mouseExited(MouseEvente) 负责处理鼠标退出组件触发的鼠标事件。mouseClicked(MouseEvente) 负责处理鼠标单击或连击触发的鼠标事件。2023/4/1第10章基于Swing的图形用户界面设计第90
页(2)MouseMotionListener接口如果事件源使用addMouseMotionListener(MouseListenerlistener)获取监视器,那么用户的下列两种操作可使得事件源触发鼠标事件:在组件上拖动鼠标指针在组件上运动鼠标指针相应的有两个处理接口的方法:mouseDragged(MouseEvente)负责处理鼠标拖动事件。mouseMoved(MouseEvente)负责处理鼠标移动事件。2023/4/1第10章基于Swing的图形用户界面设计第91
页3.MouseEvent类在处理鼠标事件时,程序经常关心鼠标在当前组件坐标系中的位置,以及触发鼠标事件使用的是鼠标的左键或右键等信息。MouseEvent类中有下列几个重要的方法:getX() 鼠标事件调用该方法返回触发当前鼠标事件时,鼠标指针在事件源坐标系中的x-坐标。getY() 鼠标事件调用该方法返回触发当前鼠标事件时,鼠标指针在事件源坐标系中的y-坐标。getClickCount() 鼠标事件调用该方法返回鼠标被连续单击的次数。2023/4/1第10章基于Swing的图形用户界面设计第92
页getModifiers()鼠标事件调用该方法返回一个整数值,如果是通过鼠标左键触发的鼠标事件,返回的值等于InputEvent类中的类常量BUTTON1_MASK;如果是右键返回的是InputEvent类中的类常量BUTTON3_MASK来表示。getSource() 鼠标事件调用该方法返回触发当前鼠标事件的事件源。【例11-21】分别监视按钮、标签和窗口内容面板上的鼠标事件,当发生鼠标事件时,获取鼠标的坐标值,注意,事件源的坐标系的左上角是原点。2023/4/1第10章基于Swing的图形用户界面设计第93
页4.用鼠标拖动组件用鼠标拖动容器中的组件时,可以先获取鼠标指针在组件坐标系中的坐标x,y,以及组件的左上角在容器坐标系中的坐标a,b;如果在拖动组件时,想让鼠标指针的位置相对于拖动的组件保持静止,那么,组件左上角在容器坐标系中的位置应当是a+x-x0,a+y-y0,其中x0,y0是最初在组件上按下鼠标时,鼠标指针在组件坐标系中的位置坐标。【例11-22】窗体中添加了一个分层窗格,分层窗格中添加了一些组件。该例子使用MouseListener和MouseMotionListener接口处理鼠标事件。2023/4/1第10章基于Swing的图形用户界面设计第94
页5.弹出式菜单单击鼠标右键出现“弹出式菜单”是用户熟悉和常用的操作。弹出式菜单由JPopupMenu类负责创建。构造方法:publicJPopupMenu() 构造无标题弹出式菜单publicJPopupMenu(Stringlabel)
构造由参数label指定标题的弹出式菜单。通过调用publicvoidshow(Componentinvoker,intx,inty) 设置弹出式菜单在组件invoker上的弹出的位置。2023/4/1第10章基于Swing的图形用户界面设计第95
页【例11-23】在文本区上单击鼠标右键时,在鼠标位置处弹出菜单,用户选择相应的菜单项拷贝、剪贴等操作。返回2023/4/1第10章基于Swing的图形用户界面设计第96
页11.16焦点事件组件可以触发焦点事件。组件可以使用publicvoidaddFocusListener(FocusListenerlistener)增加焦点事件监视器。当组件具有焦点监视器后,如果组件从无输入焦点变成有输入焦点或从有输入焦点变成无输入焦点都会触发FocusEvent事件。创建监视器的类必须要实现FocusListener接口,该接口有两个方法:publicvoidfocusGained(FocusEvente)publicvoidfocusLost(FocusEvente)2023/4/1第10章基于Swing的图形用户界面设计第97
页11.17键盘事件当一个组件处于激活状态时,组件可以成为触发KeyEvent事件的事件源。当某个组件处于激活状态时,如果用户敲击键盘上一个键就导致这个组件触发KeyEvent事件。1.使用KeyListener接口处理键盘事件组件使用addKeyListener方法获得监视器。监视器是一个对象,创建该对象的类必须实现接口KeyListener。接口KeyListener中有3个方法:2023/4/1第10章基于Swing的图形用户界面设计第98
页publicvoidkeyPressed(KeyEvente)publicvoidkeyTyped(KeyEvente)publicvoidKeyReleased(KeyEvente)当按下键盘上某个键时,监视器就会发现,然后方法keyPressed会自动执行,并且KeyEvent类自动创建一个对象传递给方法keyPressed中的参数e。方法keyTyped是Pressedkey和keyReleased方法的组合,当键被按下又释放时,keyTyped方法被调用。用KeyEvent类的publicintgetKeyCode()方法,可以判断哪个键被按下、敲击或释放,getKeyCode方法返回一个键码值。2023/4/1第10章基于Swing的图形用户界面设计第99
页【例11-24】通过处理键盘事件来实现软件序列号的输入。当文本框获得输入焦点后,用户敲击键盘将使得当前文本框触发KeyEvent事件,在处理事件时,程序检查文本框中光标的位置,如果光标已经到达指定位置,就将输入焦点转移到下一个文本框。2023/4/1第10章基于Swing的图形用户界面设计第100
页2.处理复合键键盘事件KeyEvent对象调用getModifiers()方法,可以返回下列的整数值,它们分别是InputEvent类的类常量ALT_MASK、CTRL_MASK、SHIFT_MASK【例11-25】用户通过CTRL+C、CTRL+X和CTRL+V实现文本区内容的拷贝、剪切和粘贴。返回2023/4/1第10章基于Swing的图形用户界面设计第101
页11.18AWT线程1.AWT线程当Java程序包含图形用户界面(GUI)时,Java虚拟机在运行应用程序时会自动启动更多的线程。AWT-EventQuecue-()线程负责处理GUI事件,AWT-Windows线程负责将窗体或组件绘制到桌面。2.挂起、恢复和终止线程通过GUI界面事件,即在AWT-EventQuecue线程中,可以通知其它线程开始运行、挂起、恢复或死亡。2023/4/1第10章基于Swing的图形用户界面设计第102
页所谓挂起一个线程就是让线程暂时让出CPU的使用权限,暂时停止执行,挂起一个线程可以使用wait方法。恢复线程就是让曾挂起的线程恢复执行过程,即从曾中断处继续线程的执行。为了恢复线程,可以让主线程或其它线程执行notifyAll()方法,通知挂起的线程继续执行。终止线程就是让线程结束run方法的执行进入死亡状态。【例11-26】通过单击“开始”按钮启动线程,该线程负责移动一个红色的标签。通过单击“挂起”按钮暂时中断线程的执行,单击“恢复”按钮恢复线程。通过单击“终止”按钮终止线程。返回2023/4/1第10章基于Swing的图形用户界面设计第103
页10.19计时器使用Timer类的构造方法:Timer(inta,Objectb)创建一个计时器。参数a的单位是豪秒,确定计时器每隔a毫秒“震铃”一次;参数b是计时器的监视器。计时器发生的震铃事件是ActinEvent类型事件。当震铃事件发生时,监视器就会监视到这个事件,监视器就回调ActionListener接口中的actionPerformed方法。【例11-27】使用了计时器,使得标签每隔一秒钟显示一个汉字。2023/4/1第10章基于Swing的图形用户界面设计第104
页11.20MVC设计模式MVC是一种通过三个不同部分构造一个软件或组件的理想办法。模型(model)用于存储数据的对象。视图(view)为模型提供数据显示的对象。控制器(controller)处理用户的交互操作,对于用户的操作作出响应,让模型和视图进行必要的交互,即通过视图修改、获取模型中的数据;当模型中的数据变化时,让视图更新显示。2023/4/1第10章基于Swing的图形用户界面设计第105
页【例11-28】 首先编写一个封装三角梯形的类,然后再编写一个窗口。要求窗口使用三个文本框和一个文本区为三角形对象中的数据提供视图,其中三个文本框用来显示和更新梯形对象的上底、下底和高的长度;文本区对象用来显示梯形的面积。窗口中用一个按钮作为控制器,用户单击该按钮后,程序用3个文本框中的数据分别作为梯形的上底、下底和高的长度,并将计算出的三角形的面积显示在文本区中2023/4/1第10章基于Swing的图形用户界面设计第106
页11.21播放音频假设音频文件hello.au位于应用程序当前目录中,播放音频的步骤如下:1.创建File对象FilemusicFile=newFile("hello.au");2.获取URI对象URIuri=musicFile.toURI();3.获取URL对象URIurl=uri.toURI();2023/4/1第10章基于Swing的图形用户界面设计第107
页4.创建音频对象使用Applet的一个静态的方法(类方法):newAudioClip(.URL)根据参数url封装的音频获得一个可用于播放
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 低压电器 课件 单元二 项目二 任务四 主令电器的使用
- 山西应用科技学院《金融信托与租赁》2023-2024学年第二学期期末试卷
- 西安航空职业技术学院《动物微生物与免疫学》2023-2024学年第二学期期末试卷
- 云南省师宗县2025年中考最后冲刺模拟(一)语文试题文试题含解析
- 浙江省台州市坦头中学2024-2025学年初三下学期中考模拟训练(五)英语试题试卷含答案
- 苏州卫生职业技术学院《医学图像处理B》2023-2024学年第二学期期末试卷
- 浙江省杭州市杭州二中2024-2025学年高三下学期返校数学试题含解析
- 上海市嘉定区封浜高中2024-2025学年高三入学检测试题生物试题含解析
- 宁波财经学院《教师职业理念与师德修养》2023-2024学年第二学期期末试卷
- “经营”英语竞争力讲座
- 2025年金银花项目投资分析及可行性报告
- 针对项目实施的重点、难点的分析和解决方案
- T-SAEG 004-2024 汽车安全气囊系统标定要求及试验方法
- 2025年驾驶三力测试题及答案
- 大学生心理健康 第8章-教学教案-爱情心理
- 2023年北京市中考英语试卷(含解析)
- 2025年前期物业管理中的法律法规解读与应用
- 2025年河南工业职业技术学院单招职业倾向性测试题库1套
- 《传奇歌后邓紫棋》课件
- 2025年度农业补贴补偿合同范本3篇
- 化工厂节能降耗培训
评论
0/150
提交评论