版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1第5讲图形用户界面设计主要内容
AWT和Swing
容器布局
Swing组件
Java图形设计事件处理2AWT和Swing组件AWT:AbstractWindowToolkit(抽象窗口工具集)图形界面是平台相关的;AWT是重量级的,依赖本地代码实现。不同平台外观有差异,不同平台运行AWT程序可能有不同的bug,有违java“一次编写,到处运行”口号。Swing:轻量级纯JAVA的图形库。基于AWT,更丰富,功能更强大。不同平台外观一致。在AWT组件的类名前加“J”。“重量级”组件与“轻量级”组件一同使用时,如果组件区域有重叠,则“重量级”组件总是显示在上面3常用的图形组件AWT:
java.awt.*Lable、Button、List、TextField……..Frame、Panel、ContainerSwing:
javax.swing.*JLable、JButton、JList、JTextField……..JFrame、JPanel不要在容器中混合使用AWT和Swing组件4容器Java的图形用户界面由组件构成,例如按钮(button)、文本输入框(textfield)、标签(label)等都是组件,其中有一类特殊的组件称为容器(container),例如框架(frame)、面板(panel)等。容器是组件的容器,各种组件(包括容器)可以通过add()方法添加到容器中5顶层容器顶层(Toplevel)容器所有组件都必须包含在某个容器中,而有些容器是可以嵌套的,在这个嵌套层次的最外层,必须是一个顶层(Toplevel)容器四种顶层容器(Swing组件中的重量级组件)JFrame、JApplet、JDialog和JwindowJFrame是一个带有标题行和控制按钮(最小化、恢复/最大化、关闭)的独立窗口,创建应用程序时需要使用JFrame。创建小应用程序时使用JApplet,它被包含在浏览器窗口中。创建对话框时使用JDialog。JWindow是一个不带有标题行和控制按钮的窗口,因此通常很少使用
6例1:应用JFrame类建立一个窗体importjava.awt.*;importjavax.swing.*;publicclassJFrameDemo{publicstaticvoidmain(Strings[]){JFrameframe=newJFrame("JFrameDemo");
//创建一个JFrame的实例JButtonbutton=newJButton("Pressme");
//创建一个JButton的实例frame.getContentPane().add(button,BorderLayout.CENTER);
//将JButton放到JFrame的中央frame.pack(); //将JFrame设置到适当的大小frame.setVisible(true);
//显示JFrame }}7将组件放入内容窗格顶层容器都有一个内容窗格(ContentPane)顶层容器中除菜单之外的组件都是放在这个内容窗格中方法一:通过顶层容器的getContentPane()方法获得其缺省的内容窗格,然后将组件添加到内容窗格中。例如:ContainercontentPane=frame.getContentPane();contentPane.add(button,BorderLayout.CENTER);
或frame.getContentPane().add(button,BorderLayout.CENTER);8将组件放入内容窗格方法二:创建一个新的内容窗格取代顶层容器缺省的内容窗格。通常是创建一个JPanel的实例,然后将组件添加到JPanel实例中,再通过顶层容器的setContentPane()方法将JPanel实例设置为新的内容窗格,例如:JPanelcontentPane=newJPanel();contentPane.setLayout(newBorderLayout());contentPane.add(button,BorderLayout.CENTER);frame.setContentPane(contentPane);思考:使用方法二实现例1功能9面板(JPanel)面板(JPanel)是一种用途广泛的容器与顶层容器不同的是,面板不能独立存在,必须被添加到其他容器内部面板可以嵌套,由此可以设计出复杂的图形用户界面
JPanelpanel=newJPanel();panel.setBackground(Color.yellow);panel.add(button);10布局管理器布局管理器控制组件在容器中的大小、形状和位置。每一个容器都有一个默认的布局管理器,也可以通过setLayout()方法来设置其他布局管理器。布局管理器:FlowLayout、BorderLayout、GridLayout、CardLayout、null…….11FlowLayout布局管理器1、FlowLayout流式布局
FlowLayout布局管理是一种最简单的布局管理方法,是JPanel的默认布局它将组件按每行先后自左向右放置,一行放不下时再换行FlowLayout的默认对齐方式为居中对齐
12FlowLayout布局管理器
构造函数:①FlowLayout():创建默认的FlowLayout布局管理器。②FlowLayout(intalign):以指定的对齐方式创建FlowLayout布局管理器。其中的参数有:FlowLayout.LEFT(左对齐)、FlowLayout.RIGHT(右对齐)、FlowLayout.CENTER(居中对齐)。③FlowLayout(intalign,inthgap,intvgap)
:以指定的对齐方式及间距创建FlowLayout布局管理器。其中第一个参数为对齐方式,第二个参数为组件行间距,第三个参数为列间距。13FlowLayout布局管理器示例:setLayout(newFlowLayout(FlowLayout.RIGHT,20,40));setLayout(newFlowLayout(FlowLayout.LEFT));setLayout(newFlowLayout());14FlowLayout布局管理器【例2】编写关于FlowLayout布局的窗框程序,在窗框中放置多个个按钮、标签和文本框。程序代码:Example2.java15BorderLayout布局管理器2、BorderLayout边界布局管理器BorderLayout是顶层容器中内容窗格的默认布局它将整个容器的区域分为东、西、南、北、中五个部分。加入组件时,需指明放置的位置。在BorderLayout布局管理器的管理下,组件必须通过add()方法加入到容器的五个命名区域之一。在容器的每个区域,只能加入一个组件。16BorderLayout布局管理器构造函数①BorderLayout():创建默认的BorderLayout。②BorderLayout(int,int):以指定的行间距和列间距创建BorderLayout。在BorderLayout布局的容器中放置组件,可调用add()方法,例如:
容器对象.add(组件,BorderLayout.SOUTH);17BorderLayout布局管理器【例3】编写关于BorderLayout边框布局的窗框程序,在窗框中放置6个按钮,其中南边放置2个按钮。程序代码:BorderLayoutDemo.java18GridLayout布局管理器3、GridLayout网格布局GridLayout是一种网格式的布局管理器,将容器区域划分成m行*n列的大小相等的格子,而容器中的组件就放入这些格子中,占用大小完全相同的一格。构造函数:①GridLayout():创建默认的GridLayout布局,所有组件在一行中显示。②GridLayout(introws,intcols):按指定行数和列数创建GridLayout布局。③GridLayout(introws,intcols,inthgap,intvgap
):按指定行数、列数、行间距和列间距创建GridLayout布局。19GridLayout布局管理器【例4】编写一个4行2列的GridLayout网格布局程序,可以用来保存学生的基本信息。程序代码:GridLayDemo.java20CardLayout布局管理器4、CardLayout卡片布局一种卡片式的布局管理器,将容器中的组件(通常是面板)像扑克牌一样排列,里面放置多张叠放在一起的卡片(组件),每次只能显示最上面的一张。执行卡片布局next等方法翻看卡片。构造函数①CardLayout():创建默认的CardLayout布局管理器。②CardLayout(introws,intcols):以指定的行间距和列间距创建CardLayout布局管理器。21CardLayout布局管理器
主要方法:
voidfirst()显示第一个加入到CardLayout的组件voidlast()显示最后一个加入到CardLayout的组件voidnext()显示当前组件的下一个组件,如当前是最后一个,则下一个为第一个voidprevious()显示当前组件的前一个组件,如当前是第一个,则前一个为最后一个容器对象.add(卡片组件,“卡片1”);第二个参数用来标识卡片,没有该参数,将引发异常。22CardLayout布局管理器与幻灯片播放【例5】编写CardLayout布局程序,在窗框中部放置一个卡片布局面板(卡片盒),内放3张卡片面板,每张卡片设背景色,并放一个标签。窗框下部安放一个面板,上面放4个按钮:“上翻”、“下翻”、“自动播放”和“暂停”。程序代码:Example4.java
Ex5_88.java23不使用布局管理器5、null布局管理器null布局管理器将主动权交给用户,由用户使用坐标系统来放置每个组件,即调用组件的setBounds()方法来设置其放置位置和大小。1调用容器的setLayout(null)将布局管理器设置为空2调用组件的setBounds()方法设置组件的位置和大小24null布局管理器setBounds()方法的格式:
setBounds(intx,inty,intwidth,intheight)
前两个int型参数设置组件的位置,后两个int型参数设置组件的宽度和高度
25null布局管理器【例6】编写手工布局程序,把窗框布局设为空,然后在上面放置标签、文本框和按钮。程序代码:Example5.java26练习1.使用null布局管理器编写程序实现界面显示效果如图a所示。2.编写程序实现图b所示显示效果,界面中添加6个按钮组件。图a图b27练习参考程序:GridLayoutDemo.javaLogon.java28第5讲图形用户界面设计主要内容
AWT和Swing
容器布局
Swing组件
Java图形设计事件处理29Swing组件按钮经常用到的按钮JButton、JToggleButton、JCheckBox、JRadioButton
均是AbstractButton的子类或间接子类都可以设置文本、设置图标、注册事件监听程序30普通按钮JButton构造方法JButton()——创建一个既没有显示文本也没有图标的按钮JButton(Iconicon)——创建一个没有显示文本但有图标的按钮
JButton(Stringtext)——创建一个有显示文本但没有图标的按钮
JButton(Stringtext,Iconicon)——创建一个既有显示文本又有图标的按钮
和Button不同的是,Button组件上只能显示文字,JButton可以显示文字和图标。31普通按钮JButton构造显示文本为“Sample”的按钮
构造显示文本为“Sample”、带有钻石形状小图标的按钮
JButtonb=newJButton(“Sample”);
JButtonb=newJButton("Sample",newImageIcon("icon.gif"));
32切换按钮JToggleButtonJToggleButton是具有两种状态的按钮,即选中状态和未选中状态JToggleButton的构造方法主要有:JToggleButton(Stringtext,booleanselected)
创建一个有显示文本和指定初始状态但没有图标的切换按钮JToggleButton(Stringtext,Iconicon)
创建一个既有显示文本又有图标的切换按钮JToggleButton(Stringtext,Iconicon,booleanselected)
创建一个既有显示文本又有图标和指定初始状态的切换按钮
33JCheckBox,JRadioButton都是JToggleButton的子类
,构造方法的格式与JToggleButton相同,它们也都具有选中和未选中两种状态
JCheckBox复选框典型的应用是多项选择题isSelected()方法获知按钮的当前状态34JCheckBox复选框【例7】编写使用复选框进行多项兴趣爱好选择的程序。用鼠标单击各个复选框,均会在下面的只读文本框中动态显示选择结果,运行效果如下图:程序代码:Example6.java35JRadioButton单选按钮与ButtonGroup按钮组JRadioButton单选按钮组的典型应用是单项选择题,例如选择题有3个答案,只允许选其中之一,需使用3个单选按钮组成的按钮组。按钮组类ButtonGroup常用方法:(1)ButtonGroup():构造按钮组对象(构造方法只有1个)。(2)voidadd(AbstractButtonb):将按钮添加到组。(3)voidclearSelection():清除按钮组中按钮的选中状态。(4)intgetButtonCount():返回按钮组的按钮个数。(5)voidremove(AbstractButtonb):从按钮组中移除按钮。36JRadioButton单选按钮与ButtonGroup按钮组【例8】编写使用单选按钮组进行志向选择的程序,要求每次只选一个志向。程序运行效果如下:参考程序:Example66.java37标签(JLabel)标签(JLabel)对象通常用于显示提示性的文本信息或图标
构造方法主要有:
JLabel(Stringtext)——构造一个显示文本信息的标签JLabel(Stringtext,inthorizontalAlignment)——构造一个显示文本信息的标签JLabel(Iconimage,inthorizontalAlignment)——构造一个显示图标的标签,水平对齐方式由int型参数horizontalAlignment指定JLabel(Stringtext,Iconicon,inthorizontalAlignment)——构造一个同时显示文本信息和图标的标签,水平对齐方式horizontalAlignment指定38标签(JLabel)
表示水平对齐方式的int型参数horizontalAlignment
的取值可为JLabel.LEFT、JLabel.RIGHT、JLabel.CENTER等常量,分别表示左对齐、右对齐和居中。例:JLabellabel=newJLabel(“hello”,JLabel.LEFT);39组合框(JComboBox)组合框(JComboBox)是一个下拉式菜单,它有两种形式:不可编辑的和可编辑的,对不可编辑的JComboBox,用户只能在现有的选项列表中进行选择;而可编辑的JComboBox,用户既可以在现有选项中选择,也可以输入新的内容
40JComboBox构造方法JComboBox()——创建一个没有任何可选项的组合框JComboBox(Object[]items)——根据Object数组创建组合框,Object数组的元素即为组合框中的可选项
例:创建一个具有四个可选项的组合框:String[]itemList={"One","Two","Three","Four"};JComboBoxjcb=newJComboBox(itemList);
41JComboBox类中方法publicvoidaddItem(ObjectanObject)——在末尾位置添加新的可选项publicvoidinsertItemAt(ObjectanObject,intindex)——在index指定的位置添加新的可选项anObjectpublicvoidremoveAllItems()——删除所有可选项publicvoidremoveItem(ObjectanObject)——删除由anObject指定的可选项publicvoidremoveItemAt(intanIndex)——删除指定位置(由anIndex指定)的可选项
42组合框(JComboBox)应用【例8】编程实现如下界面所示的运行效果。程序代码:JComboBoxDemo.java43列表框(JList)列表(JList)是可供用户进行选择的一系列可选项
构造方法
JList()——构造一个空列表JList(Object[]listData)——构造一个列表,列表的可选项由对象数组listData指定JList(VectorlistData)——构造一个列表,列表的可选项由Vector型参数listData指定44列表框(JList)例:根据String数组构造一个包含四个可选项的列表也可通过下面的命令创建:String[]data={"one","two","three","four"};JListdataList=newJList(data);VectorlistData=newVector();listData.addElement("one");listData.addElement("two");listData.addElement("three");listData.addElement("four");JListlist=newJList(listData);45列表框(JList)的应用【例9】编程用列表框(JList)实现如下界面所示的运行效果。程序代码:JListDemo.java46文本组件(JTextComponent)用于显示信息和提供用户输入功能
在Swing中提供了文本域(JTextField)、口令输入域(JPasswordField)、文本区(JTextArea)等多个文本组件,都有一个共同的基类——JTextComponent
。47JTextComponent一些方法getSelectedText()——从文本组件中提取被选中的文本内容getText()
――从文本组件中提取所有文本内容getText(intoffs,intlen)——从文本组件中提取指定范围的文本内容select(intselectionStart,intselectionEnd)
――在文本组件中选中指定范围的文本内容selectAll()
――在文本组件中选中所有文本内容setEditable(booleanb)
――设置为可编辑或不可编辑状态setText(Stringt)
――设置文本组件中的文本内容setDocument(Documentdoc)——设置文本组件的文档copy()——复制选中的文本到剪贴板cut()——剪切选中的文本剪贴板paste()——将剪贴板的内容粘贴到当前位置
48文本域JTextField文本域是一个单行的文本输入框,可用于输入少量文本主要构造方法:JTextField(intcolumns)——构造一个具有指定列数的空文本域,
JTextField(Stringtext)——构造一个显示指定初始字符串的文本域JTextField(Stringtext,intcolumns)——构造一个具有指定列数、并显示指定初始字符串的文本域
例:构造一个列数为35、初始字符串为“SingleLine”的文本域
JTextFieldtf=newJTextField(“SingleLine”,35);49文本区
JTextArea文本区是一个多行多列的文本输入框。主要构造方法:
JTextArea()——构造一个空文本区JTextArea(Stringtext)——构造一个显示指定初始字符串的文本区JTextArea(introws,intcolumns)——构造一个具有指定行数和列数的空文本区,
JTextArea(Stringtext,introws,intcolumns)——构造一个具有指定行数和列数、并显示指定初始字符串的文本区50文本区
JTextArea例:JTextAreata=newJTextArea(“Initialtext”,4,30)对文本区进行操作的方法append(Stringstr)
将指定文本追加到文本区。insert(Stringstr,intpos)
将指定文本插入到文本区的特定位置。replaceRange(Stringstr,intstart,intend)
指定文本替换文本区中的部分内容
51JPasswordField密码框JPasswordField显示特殊符号,如*,达到保密目的。密码框是文本框的子类,文本框和密码框都属于文本组件。密码框JPasswordField常用方法:(1)JPasswordField()(2)JPasswordField(intcolumns)(3)voidsetEchoChar(charc):设置密码框回显字符。(4)char[]getPassword():获取密码框字符。出于安全考虑,不要使用已过时的getText()方法获取密码框字符。52JTextField文本框与JPasswordField密码框【例10】编写一个Java程序,在程序中生成一个框架窗口,不使用窗口的布局管理器,加入组件,制作密码验证窗口。运行效果如下图:程序代码:PassWordWin.java53菜单组件SWING包中提供的多种菜单组件
JMenuBarJMenuJMenuItem
JCheckBoxMenuItemJRadioButtonMenuItemJPopupMenu54菜单栏JMenuBar菜单栏是窗口中的主菜单,用来包容一组菜单,只有一种构造方法:JMenuBar()
。JFrame、JApplet和JDialog等类中定义了setJMenuBar(JMenuBarmenu)方法,可以把菜单栏放到窗口的上方例:JFrameframe=newJFrame(“JMenuBar”);
JMenuBarmb=newJMenuBar();
frame.setJMenuBar(mb);
55菜单JMenu菜单是最基本的下拉菜单,用来包容一组菜单项或子菜单。构造方法如下:
publicMenu(Stringlabel)//其中label指定了菜单上的文本。菜单加入菜单栏或者另一个菜单中
JMenumenu1=newJMenu("File");JMenumenu2=newJMenu("Option");JMenumenu3=newJMenu("Help");mb.add(menu1);mb.add(menu2);mb.add(menu3);56菜单项JMenuItem常用的菜单项构造方法
JMenuItem(Iconicon)——构造一个只显示图标的菜单项,图标由Icon型参数icon指定
JMenuItem(Stringtext)——构造一个只显示文本的菜单项,文本由String型参数text指定JMenuItem(Stringtext,Iconicon)——构造一个同时显示文本和图标的菜单项,文本由String型参数text指定,图标由Icon型参数icon指定JMenuItem(Stringtext,intmnemonic)——构造一个显示文本并且有快捷键的菜单项,文本由String型参数text指定,快捷键由int型参数mnemonic指定
JMenum1=newJMenu(“File”);JMenuItemmi1=newJMenuItem("Save",KeyEvent.VK_S);JMenuItemmi2=newJMenuItem(“Load”);JMenuItemmi3=newJMenuItem(“Quit”);m1.add(mi1);m1.add(mi2);m1.add(mi3);构造了三个菜单项,分别显示文本“Save”、“Load”和“Quit”,其中第一个菜单项的快捷键为Ctrl+S,三个菜单项均被加入菜单m1中
快捷键也可以在菜单项被创建之后,通过setMnemonic(charmnemonic)方法进行设置
57菜单方法addSeparator()和insertSeparator(intindex):菜单项间加入分隔线例:JMenum1=newJMenu(“File”);
m1.add(mi1);
m1.add(mi2);
m1.addSeparator();
m1.add(mi3);
58复选和单选菜单项这是两种特殊的菜单项,在复选菜单项前面有一个小方框,在单选菜单项前面有一个小圆圈,可以进行选中或不选中的操作,使用方法与复选按钮和单选按钮类似当菜单项的检验状态发生改变时,会引发ItemEvent事件,使用ItemListener中的itemStateChanged()对此事件进行响应
59构造方法复选菜单项构造方法
单选菜单项构造方法boolean型参数指定菜单项的初始状态JCheckBoxMenuItem(Iconicon)JCheckBoxMenuItem(Stringtext)JCheckBoxMenuItem(Stringtext,booleanb)JCheckBoxMenuItem(Stringtext,Iconicon)JCheckBoxMenuItem(Stringtext,Iconicon,booleanb)
JRadioButtonMenuItem(Iconicon)JRadioButtonMenuItem(Iconicon,booleanselected)
JRadioButtonMenuItem(Stringtext)JRadioButtonMenuItem(Stringtext,booleanselected)JRadioButtonMenuItem(Stringtext,Iconicon)JRadioButtonMenuItem(Stringtext,Iconicon,booleanselected)
60菜单组件编程实现如下图运行结果:程序代码:Example22.java61弹出式菜单JPopupMenu弹出式菜单(JPopupMenu)是一种比较特殊的独立菜单,可以根据需要显示在指定位置。有两种构造方法
publicJPopupMenu()——构造一个没有名称的弹出式菜单publicJPopupMenu(Stringlabel)——构造一个有指定名称的弹出式菜单62弹出式菜单构造一个名为“Popup”的弹出式菜单加入菜单或菜单项在显示弹出式菜单时,必须调用show()方法JPopupMenup=newJPopupMenu(“Popup”)
JMenuItems=newJMenuItem(“Save”);JMenuIteml=newJMenuItem(“Load”);p.add(s);p.add(l);
publicvoidshow(Componentorigin,intx,inty)需要有一个组件作参数,该组件的位置将作为显示弹出式菜单的参考原点
63对话框JDialog对话框(JDialog)是与框架类似的可移动窗口,能够被设置为“模式”(model)窗口,即在对话框被关闭前,其他窗口无法接收任何输入信息。对话框的构造方法JDialog(Frameowner)
——构造一个没有标题的非模式对话框JDialog(Frameowner,booleanmodal)
——构造一个没有标题的对话框,boolean型参数modal指定对话框是否为模式窗口JDialog(Frameowner,Stringtitle)
——构造一个有标题的非模式对话框,JDialog(Frameowner,Stringtitle,booleanmodal)
——构造一个有标题的对话框64对话框JDialog例:JDialogdialog=newJDialog(frame,“Dialog”,true)setVisible(true)方法显示,setVisible(false)方法可以将一个对话框隐藏起来65标准对话框JOptionPaneSWING中还提供了用于显示标准对话框(JOptionPane)的JOptionPane类
定义了多个showXxxDialog形式的静态方法showConfirmDialog——确认对话框,显示问题,要求用户进行确认(yes/no/cancel)showInputDialog——输入对话框,提示用户进行输入showMessageDialog——信息对话框,显示信息,告知用户发生了什么情况
showOptionDialog——选项对话框,显示选项,要求用户进行选择
66文件对话框JFileChooser专门用于对文件(或目录)进行浏览和选择的对话框,常用的构造方法:JFileChooser()——根据用户的缺省目录创建文件对话框JFileChooser(FilecurrentDirectory)——根据File型参数currentDirectory指定的目录创建文件对话框JFileChooser(StringcurrentDirectoryPath)——根据String型参数currentDirectoryPath指定的目录创建文件对话框
67文件对话框JFileChooser显示showOpenDialog(Componentparent)显示一个“打开”文件对话框
showSaveDialog(Componentparent)显示“保存”文件对话框
showDialog(Componentparent,StringapproveButtonText)显示一个自定义的文件对话框
标题和按钮上的文本由String型参数approveButtonText指定
Component型参数,指定“父组件”,决定了文件对话框的显示位置,如果该参数为null,则文件对话框显示在屏幕正中
通过getSelectedFile()方法取得用户所选择的文件
68对话框JDialog例:编程实现如下图运行结果:程序代码:Example8.java69练习1.实现计算器程序界面,程序运行效果如下图1所示:2.实现用户注册界面,程序的运行效果如下图2所示:70练习参考程序:CalculatorDemo.javaRegistDemo.java71第5讲图形用户界面设计主要内容
AWT和Swing
容器布局
Swing组件
Java图形设计事件处理72控制组件外观颜色使用下面方法(在Jcomponent中定义)设置组件的前景色和背景色
java.awt.Color类的一个实例作参数,我们可以使用Color类中预定义的颜色常量,比如Color.red和Color.blue,也可以自己创建新的颜色:publicvoidsetForeground(Colorc)——设置前景色
publicvoidsetBackground(Colorc)——设置背景色intr=255,g=255,b=0;ColormyColor=newColor(r,g,b)73字体创建Font对象Font(Stringname,intstyle,intsize):创建指定三个参数:字体名、字体风格和尺寸大小的字体。其中字体风格有如下三种:Font.BOLD(粗体)、Font.ITALIC(斜体)、Font.PLAIN(普通体)。setFont(Fontf)方法对组件中文本的字体进行设定
参数java.awt.Font类的一个实例Fontf=newFont(“TimesNewRoman”,Font.PLAIN,14);
字体名称
字体的大小
字体的风格
Font.BOLDFont.ITALICFont.PLAINFont.BOLD+Font.ITALIC74颜色与字体例:绘制文字:编写一个Java程序,生成一个窗口,在窗口中分别显示红色宋体和黑色粗体的“Java程序设计”文字。参考程序:PaintFont.java75绘图当组件被显示时,调用java.awt.Component类中定义paint(Graphicsg)方法每当需要重绘组件时,调用repaint()方法,该方法将自动调用paint(Graphicsg)javax.swing.JComponent继承java.awt.Component,它的paint(Graphicsg)方法中,会调用如下三个方法:paintComponent(Graphicsg)——绘制组件paintBorder(Graphicsg)——绘制组件的边框paintChildren(Graphicsg)——绘制组件中的子组件
在组件上绘制图形,只需要改写这个方法
76Graphics类的绘图方法1、画线在Java的Graphics类中提供画线功能的是drawLine()方法,其调用格式如下:drawLine(intx1,inty1,intx2,inty2)该方法需要设置四个参数,其中x1,y1表示线段的一个坐标点,x2,y2表示线段的另一个坐标点。
2.矩形的绘制
Graphics类中提供了三种类型的矩形,它们分别是普通矩形、圆角矩形和立体矩形。而每一种矩形都提供两种不同风格的方法,一种是仅画出矩形的边框;另一种是不仅画出边框,并且还用相同的颜色将整个矩形区域填满。772.矩形的绘制
(1)普通矩形
drawRect(intx,inty,intwidth,intheight)
//边框型风格
fillRect(intx,inty,intwidth,intheight)
//填充型风格其中头两个参数分别表示矩形左上角的x坐标和y坐标,后两个参数分别表示矩形的宽度和高度。782.矩形的绘制
(2)立体矩形立体矩形也可以说是三维矩形。其实仅仅是在矩形的边框上增加一点阴影,使矩形看上去相对表平面好像有凸出或凹下的效果,其调用方法的格式如下:draw3DRect(intx,inty,intwidth,intheight,booleanraised)fill3DRect(intx,inty,intwidth,intheight,booleanraised)
这两个方法中的前四个参数与drawRect()方法中所用的参数含义是一样的,第五个参数raised便是定义该立体矩形是具有凸出(值为true)还是凹下(值为false)的效果。
792.矩形的绘制(3)圆角矩形
也就是矩形的四个顶角呈圆弧状,每个圆弧其实是由四分之一的椭圆弧所构成。画圆角矩形的两个方法的调用格式如下:
drawRoundRect(intx,inty,intwidth,intheight,intarcWidth,intarcHeight)
fillRoundRect(intx,inty,intwidth,intheight,intarcWidth,intarcHeight)我们可以看出,它们除了具有和普通矩形含义相同的前四个参数外,还多了两个用来描述圆角性质的参数。其中arcWidth代表了圆角弧的横向直径;arcHeight代表了圆角弧的纵向直径。
80
3.椭圆的绘制在Java中绘制椭圆的方法是给出该椭圆的外接矩形作为参数,其调用格式与画普通矩形的方法相似:
drawOval(intx,inty,intwidth,intheight)
//边框型风格
fillOval(intx,inty,intwidth,intheight)
//填充型风格这里x和y是该椭圆外接矩形的左上角。814.画弧弧是椭圆的一部分,因而画弧的方法就相当于先画一个椭圆,而后取该椭圆中所需要的一部分。它们的调用格式如下:
drawArc(intx,inty,intwidth,intheight,intstartAngle,intarcAngle)fillArc(intx,inty,intwidth,intheight,intstartAngle,intarcAngle)
后两个参数就是用来定义椭圆的一部分:startAngle参数表示该弧从什么角度开始,arcAngle参数表示从startAngle开始逆时针转了arcAngle度。825.多边形的绘制voiddrawPolygon(Polygonp)
参数是多边形对象Polygon,先定义Polygon对象,然后将点加入到该对象中,然后利用drawPolygon进行多边形的绘制:Polygonp=newPolygon();p.addPoint(x1,y1);p.addPoint(x2,y2);...g.drawPolygon(p);835.多边形的绘制intp1X[]={20,20,100,20};//多边形的x坐标
intp1Y[]={20,80,20,20};//多边形的y坐标
intp1=3;//多边形的边数
g.fillPolygon(p1X,p1Y,p1);//画填充多边形
intp2X[]={280,120,50,90,210,280};intp2Y[]={20,50,100,110,70,20};intp2=5;
g.drawPolygon(p2X,p2Y,p2);//画多边形84绘制图形例:编写一个Java程序,生成一个窗口,在窗口中分别绘制直线、矩形、椭圆。效果如下图。参考程序:PaintShape.java85第5讲图形用户界面设计主要内容
AWT和Swing
容器布局
Swing组件
Java图形设计
事件处理
86事件图形界面程序离不开事件(Event),通过事件驱动方式进行人机互动交流。常用事件:MouseEvent:鼠标事件KeyEvent:键盘事件ActionEvent:动作事件,这是高级的语义事件。ItemEvent:选项事件(语义事件)TextEvent:文本事件(语义事件)语义事件能避开细节问题,适用范围广,具有跨平台性。87事件处理模型在Java程序的运行过程中,当用户通过程序的用户界面进行某个操作时,便引发一个相应的事件(Event)。1.事件源引发事件的对象,如按钮、菜单项和文本框等。2.事件对象对于不同的事件源,Java虚拟机会产生相应类型的事件对象。Java自动识别各种不同的事件对象的类型并进行分类处理。3.事件处理(监听)器接口。各种类型的事件均有对应的事件处理器接口。该接口封装了与其对应类型事件的各种处理方法,并建立了事件到相应处理方法的自动映射。88事件处理模型1、事件源对象S因用户的操作(鼠标或键盘)2、系统会自动触发此事件类对象E,并通知所授权的事件监听者L(需事先调用事件源对象的addXxxListener方法向L注册),3、事件监听者L中有处理各种事件的方法(事件处理者1~n)便会处理此事件E的各种状况。SEL89事件处理方法实现事件监听器接口的方法:1)程序加入java.awt.event包:importjava.awt.event;2)给组件注册监听器,使用下列方法:
addxxxListener(事件监听器对象);
3)确定了事件监听器的类型后,必须在程序中定义类来实现这些接口,重写接口中的所有方法。1)addKeyListener(newCharType());2)publicclassCharTypeimplementsKeyListener{publicvoidkeyPressed(KeyEvente){……}//大括号中为处理事件的代码
publicvoidkeyReleased(KeyEvente){}//未用到此方法,所以方法体为空
publicvoidkeyTyped(KeyEvente){}}
90鼠标产生的事件产生条件:当用户按下鼠标、释放鼠标或移动鼠标指针时鼠标事件的表示:1)从MouseEvent类创建的对象表示鼠标事件。监听类:两个鼠标监听器MouseListener和MouseMotionListener2)表示:鼠标按钮相关事件监听器由实现MouseListener接口的对象表示,而鼠标移动相关事件监听器则由实现MouseMotionListener接口的对象表示3)必须实现的方法:其中。MouseListener指定5个必须实现的方法,他们是MouseClicked、MouseEntered、MouseExited、MousePressed和MouseReleased。MouseMotionListener指定两种必须实现的方法,MouseDragged和MouseMoved。4)注册一个鼠标事件源:调用相应的addMouseListener(this)和addMouseMotionListener(this)方法。91鼠标事件处理程序:小画板程序【任务描述】在窗口上按住鼠标左键,并移动鼠标指针到另外一个点,松开后,可以画一个矩形,界面如下图。并在左上角用一个Label显示该矩形的位置,格式如下:(左上角横坐标,左上角纵坐标)-(右上角横坐标,右上角纵坐标)92鼠标事件处理程序:小画板程序【任务分析】该任务可以按如下步骤实现:1)设计一个myPaint类,包含4个全局变量beginX,beginY,endX,endY分别代表矩形的左上角横坐标、左上角纵坐标、右下角横坐标、右下角纵坐标;另外包含一个静态的myPaint类的对象frm。2)myPaint类继承JFrame类,覆盖publicvoidpaint(Graphicsg)方法,并在该方法中根据beginX,beginY,endX,endY画矩形。3)让myPaint类实现MouseListener接口,并实现该接口中的mousePressed()方法中记录鼠标按下的左上角横坐标beginX和左上角纵坐标beginY,在mouseReleased()方法中记录右下角横坐标endX和右下角纵坐标endY。4)在main()方法中建立一个窗口,设置窗口大小和可见性,并添加一个标签用来显示坐标。为frm窗口添加一个鼠标监听器。93鼠标事件处理程序:小画板程序【任务实施】程序代码:myPaint.java94键盘产生的事件在具有键盘焦点的组件中按下或释放键盘等操作时,都发生键盘事件键盘事件对应的事件类是KeyEvent类KeyEvent类主要方法:getKeyCode()获得按下或释放的键代码(整数)getKeyText()获得按下或释放的键的字符串键盘事件对应的事件监听器为:KeyListener或KeyAdapter
主要方法:KeyPressed(KeyEvente)
按下键盘时的处理方法KeyReleased(KeyEvente)
释放键盘时的处理方法KeyTyped(KeyEvente)输入某个按键时的处理方法95键盘产生的事件产生条件:当用户按下或释放一个键时键盘事件的表示:1)从KeyEvent类创建的对象表示键盘事件。监听类:键盘监听器2)表示:它们由实现KeyListener界面的对象代表。3)必须实现的方法:对应三种键盘事件,KeyListener指定了三个必须实现的方法:keyPressed、keyReleased、keyTyped。4)注册一个键盘事件源:调用组件的addKeyListener(this)方法。966.4动作事件凡是由组件产生的事件叫动作事件,动作事件对应的事件类是ActionEvent类。动作事件对应的事件监听器为:ActionListener
监听器的主要方法:
actionPerformed(ActionEvent
e)发生动作事件时被调用97动作事件产生条件:按钮被按下、单行文本框中的回车、列表框的某项被双击或一个菜单项被选中行为事件的表示:1)从ActionEvent类生成一个对象监听类:行为监听器ActionListener2)表示:由实现了ActionListener接口的对象表示行为监听器。3)必须实现的方法:acitonPerformed()4)注册一个行为事件源:需要调用组件的addActionListener(this)方法。5)撤销一个行为事件源:使用组件的removeActionListener(this)方法98动作事件例:编写一个Java程序,在程序中建立一个窗口,有两个文本框和一个按钮,单击按钮,能把左边文本框的内容复制到右边文本框中。程序运行效果如下:程序代码:Copy.java99焦点事件的处理产生条件:当一个组件得到或失去焦点时,发生焦点事件例如用户在对话框中从一个组件移到另外一个组件进行操作时。这些组件只有一个能够得到焦点焦点事件的表示:1)由从FocusEvent类创建的对象来表示监听类:焦点监听器FocusListener2)表示:由实现了FocusListener接口的对象表示行为监听器。3)必须实现的方法:两个必须实现的方法,focusGained和focusLost
4)注册一个行为事件源:需要调用组件的addFocusListener(this)方法。100项目事件的处理产生条件:当用户选择一个单选按钮、复选框、复选框菜单项或者选择列表框、下拉列表框(选择列表)中的项目时项目事件的表示:1)从ItemEvent类创建的对象表示项目事件监听类:项目监听器ItemListener2)表示:它们由实现了ItemListener接口的对象表示。3)必须实现的方法:ItemListener仅指定了一个必须实现的方法itemStateChanged。4)注册一个项目事件源:需要调用组件的addItemListener(this)方法。101例:选项事件和列表选择事件编写程序运行效果如图:使用下拉组合框存放若干个班级名称,选择其中一个班级,在右边的列表框中显示该班所有同学的姓名。若在列表框中选择姓名(可多选),则在下面的文本区中显示选择结果。其中列表框和文本区各置于一个滚动窗格上。参考程序:Example7.java102文本事件的处理产生条件:
当一个文本框或文本域的内容发生改变时文本事件的表示:1)从TextEvent类产生的对象可以表示文本事件。监听类:文本监听器TextListener2)表示:它们由实现TextListener接口的对象来表示。3)必须实现的方法:TextListener只指定了一个必须实现的方法textValueChanged。4)注册一个文本事件源:必须调用组件的add
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年道路危险货物运输安全协议范本3篇
- 2024建筑工程劳务承包合同协议书范本
- 2024版消防器材供货合同
- 2024燃气工程代建及后期维护服务合同3篇
- 2025年度新型城镇化建设项目合作合同3篇
- 2024版水泥购销合同参考样本
- 二零二五年度租赁合同税费承担范本6篇
- 二零二五年度班主任新手跟岗学习与技能培训合同3篇
- 二零二五版房地产交易兜底协议范本3篇
- 个性化资产抵押权利保障协议范本下载一
- 人教版(2025新版)七年级下册英语:寒假课内预习重点知识默写练习
- 艺术品捐赠协议
- 网络安全系统运维方案
- 2024年标准沟渠回填工程承包协议版B版
- 2024年专用:物业安全管理协议3篇
- 【公开课】同一直线上二力的合成+课件+2024-2025学年+人教版(2024)初中物理八年级下册+
- 《政府采购业务培训》课件
- 《医疗器械召回管理办法》培训2024
- 网络安全培训内容课件
- 通信线路维护安全培训
- 专业微信小程序开发协议范例版
评论
0/150
提交评论