Java图形界面编程PPT演示课件_第1页
Java图形界面编程PPT演示课件_第2页
Java图形界面编程PPT演示课件_第3页
Java图形界面编程PPT演示课件_第4页
Java图形界面编程PPT演示课件_第5页
已阅读5页,还剩107页未读 继续免费阅读

下载本文档

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

文档简介

Java图形界面编程,第四章,2,4.1本章任务,掌握Java图形界面设计的基本原理;理解java.awt和javax.swing软件包的类层次结构;掌握利用Java的GUI组件来创建按钮、标签、列表、面板等组件;掌握Java图形界面的事件模型;掌握利用Java布局管理器来对Java图形界面进行布局管理。,3,4.2基础知识,4,基本的AWT组件,图形用户界面(GUI)可以通过键盘或鼠标来响应用户的操作。抽象窗口工具包(AWT)是一组Java类,此组Java类允许创建图形用户界面(GUI)。AWT提供用于创建生动而高效的GUI的各种组件。,5,java.awt包中的类体系结构,6,容器,可以存放组件的区域,可在容器上进行绘制和着色java.awt包中的Container类可直接或间接派生出两个常用容器:框架(Frame类)和面板(Panel类)。框架是一个带有边框的独立的窗口。面板是包含在窗口中的一个不带边框的区域。,7,容器框架,框架是独立于Applet和浏览器的一个窗口。可以通过以下任一构造函数来创建:Frame():创建一个不含标题的标准窗口Frame(StringTitle):创建一个含有标题的窗口,这个标题是由参数title指定的。当一个Frame窗口被创建以后,需要调用setSize()方法来设置窗口的大小,并调用setVisible()来显示窗口。,8,容器-面板,面板不是一个单独的窗口,它只是包含在窗口中的一个区域。面板是可以将许多组件组合起来的一种容器。最简单的创建面板的方式就是通过面板的构造函数Panel()来进行。必须将面板添加到窗体中。,9,使用容器示例,importjava.awt.*;classPanelTestextendsPanelpublicstaticvoidmain(Stringargs)PanelTestp=newPanelTest();Framef=newFrame(正在测试面板!);f.add(p);f.setSize(300,200);f.setVisible(true);,使用GUI组件必须导入该包,将面板添加到框架窗体中,10,AWT组件,组件指可以放置在用户界面上的任何东西,可以将组件设置为可见或重新调整其大小。AWT支持的组件:标签、文本域、文本区、按钮、复选框、选择框等。高级组件包括滚动条、滚动窗格和对话框。向窗口加入一个组件:首先生成所需组件的实例,然后调用add()方法,此方法是在Container类中定义的。,11,不同组件,标签,文本域,文本区,按钮,12,标签,可以通过以下任一构造函数来创建:Label():新建一个空标签Label(Stringlabeltext):新建一个包含给定文本的标签Label(Stringlabeltext,intalignment):新建一个包含给定对齐方式的标签,对齐方式可以为Label.LEFT、Label.RIGHT或Label.CENTER,通常用来指明项目的用途标签不可以被用户编辑,13,文本域,可以通过以下任一构造函数来创建:TextField():新建一个文本域TextField(intcolumns):新建一个包含给定列数的文本域TextField(Strings):新建一个包含给定字符串的文本域TextField(Strings,intcolumns):新建一个包含给定字符串和列数的文本域,一种用来输入文本的GUI组件只能接受一行输入,14,标签和文本域使用示例,importjava.awt.*;classTextLabelDemoextendsFrameLabellblName=newLabel(“名称:”);TextFieldtxtName=newTextField(20);publicTextLabelDemo(Stringtitle)super(title);setLayout(newFlowLayout();add(lblName);add(txtName);publicstaticvoidmain(Stringargs)TextLabelDemot=newTextLabelDemo(正在测试组件!);t.setSize(300,200);t.show();,新建一个标签,新建一个文本域,添加到窗口,15,文本区,可以通过以下构造函数来创建:TextArea():新建一个TextAreaTextArea(introws,intcols):新建一个包含给定行数和列数的TextAreaTextArea(Stringtext,introws,intcols):新建一个包含给定字符串、行数和列数的TextArea,要接受输入多行文本时使用可以包括滚动条,.TextAreatxtComment=newTextArea();add(txtComment);.,16,按钮,可以使用以下任一构造函数来创建按钮:Button():新建一个空的按钮Button(Stringtext):新建一个包含给定字符串的按钮,按钮是任何GUI都不可或缺的组件用来捕捉用户操作的最为简便的方式,.ButtonbtnOk=newButton(确定!);ButtonbtnCancel=newButton(取消!);add(btnOk);add(btnCancel);.,17,复选框,可以使用以下任一构造函数来创建复选框:-Checkbox():创建一个空的复选框,且未被选中-Checkbox(Stringtext):创建一个用给定字符串作为标签的复选框,且未被选中-Checkbox(Stringtext,Booleanon):创建一个标签由参数text指定的复选框,允许通过参数on设定复选框的初始状态。,用于多选项的用户输入,用户可以通过单击复选框来选定或取消选定某选项。,18,单选按钮,可以通过复选框组生成一系列互斥的复选框,实现单选按钮功能。在一组单选按钮中只能选择一个按钮。首先创建一个CheckboxGroup对象。CheckboxGroupcg=newCheckboxGroup();然后再创建各单选按钮。Checkboxmale=Checkbox(男,cg,true);Checkboxfemale=Checkbox(女,cg,false);,19,复选框和单选按钮使用示例,importjava.awt.*;classQualificationextendsFrameCheckboxt1=newCheckbox(VisualBasic);Checkboxt2=newCheckbox(VisualC+);Checkboxt3=newCheckbox(Java);CheckboxGroupcg=newCheckboxGroup();Checkboxr1=newCheckbox(专科,cg,false);Checkboxr2=newCheckbox(本科,cg,false);Checkboxr3=newCheckbox(硕士,cg,false);Checkboxr4=newCheckbox(博士,cg,false);Labellb1=newLabel(您的学历为:);Labellb2=newLabel(您精通的语言为:);,新建复选框,新建一个复选框组,添加单选按钮,publicQualification(Strings)super(s);setLayout(newGridLayout(10,1);add(lb1);add(r1);add(r2);add(r3);add(r4);add(lb2);add(t1);add(t2);add(t3);publicstaticvoidmain(Stringargs)Qualificationq=newQualification(学识!);q.setSize(400,250);q.show();,将单选按钮添加到窗体,将复选框添加到窗体,20,选择框,用Choice类可以创建一个选择框Choicemoviestars=newChoice();通过addItem()方法可以添加项目moviestars.addItem(安东尼奥.班德拉斯);moviestars.addItem(莱昂纳多.迪卡普尼奥);moviestars.addItem(桑德.布洛克);moviestars.addItem(休.葛兰特);moviestars.addItem(朱莉亚.罗萡茨);,用来向用户显示一个选择列表,21,Java布局管理器,用户界面上的组件可以按不同方式排列。Java使用布局管理器来管理这些排列方式。每当需要重新调整屏幕大小或重新绘制屏幕上任一项目时,就要用到布局管理器。AWT提供一组用来进行布局管理的类,称为布局管理器或布局。所有布局都实现LayoutManager接口。,22,布局类型,Java中的布局类型包括以下几种:FlowLayout(流式布局)BorderLayout(边界布局)GridLayout(网格布局)GridBagLayout(网格包布局)CardLayout(卡片布局),23,布局类型的选用,每个布局管理器都有自己特定的用途。要按行和列显示几个同样大小的组件,GridLayout会比较合要在尽可能大的空间里显示一个组件,就要选择BorderLayout或GridBagLayout,24,如何设置布局,每个容器(Container对象)都有一个与它相关的缺省的布局管理器。-Applet的缺省布局是FlowLayout在没有设置新的布局前,在容器中添加组件都按照该容器的缺省布局排列。可以通过setLayout()方法为容器设置新的布局。,25,FlowLayout,FlowLayout的构造函数有:FlowLayout():生成一个默认的流式布局FlowLayout(intalignment):可以设定每一行组件的对齐方式FlowLayout(intalignment,inthorz,intvert):可以设定组件间的水平和垂直距离,Applet和面板的缺省布局组件从左上角开始按从左到右、从上到下的方式排列,FlowLayoutmylayout=newFlowLayout();FlowLayoutexLayout=newFlowLayout(FlowLayout.RIGHT);setLayout(exlayout);/为容器设置新布局,26,BorderLayout2-1,下面是BorderLayout所定义的构造函数:-BorderLayout():生成默认的边界布局-BorderLayout(inthorz,intvert):可以设定组件间的水平和垂直距离,窗口、框架和对话框等的缺省布局组件可被置于容器的北、南、东、西或中间位置,27,BorderLayout2-2,BorderLayout类定义了几个常量值以指定相应区域:BorderLayout.NORTH对应容器的顶部BorderLayout.EAST对应容器的右部BorderLayout.SOUTH对应容器的底部BorderLayout.WEST对应容器的左部BorderLayout.CENTER对应容器的中部加入组件方法:voidadd(ComponentObj,intregion);,.setLayout(newBorderLayout();ButtonbtnEast=newButton(东);ButtonbtnWest=newButton(西);ButtonbtnNorth=newButton(北);ButtonbtnSouth=newButton(南);ButtonbtnCenter=newButton(中);add(btnEast,BorderLayout.EAST);add(btnWest,BorderLayout.WEST);add(btnNorth,BorderLayout.NORTH);add(btnSouth,BorderLayout.SOUTH);add(btnCenter,BorderLayout.CENTER);.,28,GridLayout,GridLayout的构造函数如下所示:-GridLayout():生成一个单列的网格布局-GridLayout(introw,intcol):生成一个设定行数和列数的网格布局-GridLayout(introw,intcol,inthorz,intvert):可以设置组件之间的水平和垂直间隔,用于将容器区域划分为一个矩形网格组件按行和列排列,.Buttonbtn;/声明按钮数组Stringstr=1,2,3,4,5,6,7,8,9;setLayout(newGridLayout(3,3);btn=newButtonstr.length;/创建按钮数组for(inti=0;istr.length;i+)btni=newButton(stri);add(btni);,29,GridBagLayout,通过使用以下语法容器可获得GridBagLayout:GridBagLayoutgb=newGridBagLayout();ContainerName.setLayout(gb);要使用此布局,必须提供各组件的大小和布局等信息。GridBagConstraints类中包含GridBagLayout类用来定位及调整组件大小所需的全部信息。,组件大小不必相同组件按行和列排列放置顺序不一定为从左至右和由上至下,30,GridBagConstraints类2-1,成员变量列表:gridx,gridy:指定组件放置于哪个单元中gridwidth,gridheight:指定组件将占用多少行和多少列weightx,weighty:指定在一个GridBagLayout中应如何分配空间,这些变量的缺省值为0ipadx,ipady:指定组件的最小高度和宽度,31,成员变量列表:fill:指定在单元大于组件的情况下,组件如何填充此单元,共有4可选值。缺省值为:GridBagConstraints.NONEanchor:指定将组件放置在单元中的位置,共有9个可选值。缺省值为:GridBagConstraints.CENTER,GridBagConstraints类2-2,32,CardLayout,可存储几个不同的布局。每个布局就像是一个卡片组中的一张卡片。在一个给定的时间总会有一张卡片在顶层。卡片通常为一个Panel对象。每当需要许多面板切换,而每个面板需要显示为不同布局时,可以使用卡片布局。,33,Java事件模型,Java最新的事件处理方法是基于授权事件模型事件源生成事件并将其发送至一个或多个监听器监听器简单地等待,直到它收到一个事件。一旦事件被接受,监听器将处理这些事件,然后返回。,34,事件,在授权事件模型中,事件是一个描述事件源状态改变的对象。通过鼠标、键盘与GUI界面直接或间接交互都会生成事件。如:按下一个按钮、通过键盘输入一个字符、选择列表框中的一项、点击一下鼠标等。,35,事件源,事件源是一个生成事件的对象一个事件源可能会生成不同类型的事件事件源提供了一组方法,用于为事件注册一个或多个监听器。每种事件的类型都有其自己的注册方法。一般形式为:publicvoidaddListener(TypeListenere),36,AWT采取的事件控制过程,监听器对象属于一个类的实例,这个类实现了一个特殊的接口,名为“监听者接口”事件源是一个对象,它可以注册一个或多个监听器对象,并向其发送事件对象。事件源将在发生事件时向所有注册的监听器发送事件对象。监听器对象使用事件对象中的信息来确定它们对事件的响应。,37,按钮单击事件示例,publicclassMyEventTestextendsPanelButtonmyButton=newButton(蓝色);./创建面板或其他GUI组件MyListenermyAction=newMyListener();MyButton.addActionListener(myAction);privateclassMyListenerimplementsActionListenerpublicMyListener()./初始化publicvoidactionPerformed(ActionEventevent)./需要为事件进行的操作,实现了ActionListener接口的监听器,实现了actionPerformed方法,以便根据参数ActionEvent对象的信息对事件做出响应,为按钮事件注册监听器,38,事件体系结构,39,AWT事件类型2-1,40,AWT事件类型2-2,41,监听器接口,监听器通过实现java.awt.event包中定义的一个或多个接口来创建。在发生事件时,事件源将调用监听器定义的相应方法。有兴趣接收事件的任何监听器类都必须实现监听器接口。,42,监听器接口列表2-1,43,监听器接口列表2-2,44,适配器类,为了使事件处理变得简单,Java为具有多个方法的监听器接口提供适配器类。适配器类实现并提供了一个事件监听器接口中的所有的方法,但这些方法都是空方法。,privateclassMyMouseAdapterextendsMouseAdapterprivateColorbgColor;publicMyMouseAdapter(Colorc)bgColor=c;publicvoidmouseClicked(MouseEventmevent)setBackground(bgColor);repaint();,45,事件源、监听器和监听器接口,事件源描述事件对象中事件的性质。每个事件源都被映射至一个或多个事件监听器,发生事件时需要调用这些事件监听器。事件源随后通过将事件对象传递至监听器接口类的方法,将事件信息发送到监听器接口。监听器分析事件对象找出事件信息,以便给出响应。,46,任何GUI对象的获得或失去焦点都被视为焦点事件,并且事件源必须向事件监听器通知事件对象已失去或已获得焦点。焦点监听器需要实现两个方法:focusGained和focusLost。要进行错误检查或数据校验时,对焦点的捕捉就显得尤其重要。,焦点事件,47,焦点事件示例,publicvoidfocusLost(FocusEventevent)if(event.getComponent()=ccField,实现了当捕捉到失去焦点事件时如何响应,检验失去焦点的组件中的文本格式是否正确,如果格式不正确,将焦点移回到该组件,48,窗口事件,当一个窗口被激活、禁止、关闭、正在关闭、最小化、恢复、打开时将生成窗口事件。需要实现的方法如下:windowActivated、windowClosedwindowClosing、windowDeactivatedwindowDeiconified、windowIconifiedwindowOpened,49,窗口事件示例,classMyFrameextendsFramebooleanw;publicMyFrame()w=false;setTitle(测试适配器类);setSize(300,200);MyPanelpanel=newMyPanel();add(panel);addWindowListener(newMyWindowAdapter();privateclassMyWindowAdapterextendsWindowAdapterpublicvoidwindowClosing(WindowEventwevent)if(w)dispose();elseSystem.exit(0);,实现了windowClosing方法,以响应窗口关闭时的事件,importjava.awt.*;importjava.awt.event.*;publicclassMyAdapterDemopublicstaticvoidmain(Stringargs)MyFramefrm=newMyFrame();frm.show();,50,在按下或释放键盘上的一个键时,将生成键盘事件。keyEvent类包含用来表示按下或点击的键的常量。生成keyEvent时将调用keyListener。如果程序需要处理特殊的键,如方向键,需要通过调用keyPressed()方法来处理。,键盘事件,publicvoidkeypressed(keyEventk)intkeyCode=k.getKeyCode();if(keyCode=k.VK_RIGHTadd(tField);MyKeyAdapterbAction=newMyKeyAdapter();tField.addKeyListener(bAction);privateclassMyKeyAdapterextendsKeyAdapterpublicvoidkeyPressed(KeyEventkevent)setBackground(Color.blue);repaint();publicvoidkeyReleased(KeyEventkevent)setBackground(Color.red);repaint();publicvoidkeyTyped(KeyEventkevent)if(kevent.getKeyChar()=x)System.exit(0);,按下键时背景变为兰色,释放键时背景变为红色,输入字符x时退出程序,52,鼠标事件,任何时候移动、单击、按下或释放鼠标,都会生成鼠标事件。鼠标事件有两种监听器:MouseListener和MouseMotionListener。需要实现的方法如下:mouseClicked、mouseEntered、mouseExitedmousePressed、mouseReleasedmouseDragged、mouseMoved,53,publicvoidmouseClicked(MouseEventm)intx=m.getX();inty=m.getY();intclickCount=m.getClickCount();if(clickCount=2)Graphicsg=getGraphics();g.drawString(鼠标双击!,x,y);g.dispose();,鼠标事件示例,获得点击鼠标时鼠标指针的x及y坐标,确定单击和双击,54,多个监听器,所有AWT事件源均支持监听器的多点传送模型。可以将同一事件发送到多个监听器对象。需要向一个事件源添加多个监听器,以便使所有注册的监听器都能够对事件源生成的事件作出响应。,55,4.3案例4及案例分析,具体案例分析见本书,56,4.4扩展知识,57,Swing编程,Java1.2引入称为Swing的新的GUI组件库。Swing包括javax.swing包及其子包。Swing有一个与平台无关的实现,而且具有一个艺术状态的属性集。尽管Swing独立于AWT,但它是依照基本的AWT类实现的。,58,MVC设计模式,59,Swing结构,Object,Component,JFrame,Container,Window,Frame,Dialog,JDialog,JText,JComboBox,JLabel,JList,JMenuBar,JOptionPane,JPanel,JScrollBar,AbstractButton,JToggleButton,JMenuItem,JButton,JCheckBox,JRadioButton,JComponent,JMenu,60,Swing组件,Swing组件独立于本地窗口系统。Swing组件除了AbstractButton类之外都以J开头。Swing组件是基于AWT构建。包含AWT可视化组件的替代组件,也包含复杂组件-树和表,J,61,Swing应用程序的容器层次,设计GUI时,都有用于放置可视化组件的主窗口。Container对象可用于将组件组合在一起。容器中的组件根据特定布局排列。Swing中的容器有两类:-顶级容器-中间容器,62,顶级容器,JFrame:用于框架窗口的类,此窗口带有边框、标题、用于关闭和最小化窗口的图标等。带GUI的应用程序通常至少使用一个框架窗口。JDialog:用于对话框的类。JApplet:用于使用Swing组件的JavaApplet的类。,63,中间容器,JPanel:最灵活、最常用的中间容器。JScrollPane:与JPanel类似,但还可在大的组件或可扩展组件周围提供滚动条。JTabbedPane:包含多个组件,但一次只显示一个组件。用户可在组件之间方便地切换。JToolBar:按行或列排列一组组件(通常是按钮)。,64,SwingGUI框架,你好,世界,菜单栏,顶级容器,GUI组件,GUI组件,内容窗格,65,基本的Swing应用程序,importjavax.swing.*;publicclassHelloSwingpublicstaticvoidmain(Stringargs)JFrameframe=newJFrame(HelloSwing);JLabellabel=newJLabel(你好,Swing);frame.getContentPane().add(label);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(300,200);frame.setVisible(true);,导入必要的包,一般还需导入:importjava.awt.*;importjava.awt.event.*;,设置一个顶级容器,创建一个Swing组件,将组件添加到容器内容窗格,实现了在单击“关闭”按钮时,可以关闭窗口。如果使用的早期版本的平台,则需要通过事件监听器实现,66,JFrame,是放置其他Swing组件的顶级容器JFrame组件用于在Swing程序中创建窗体它的构造函数:JFrame()JFrame(StringTitle)组件必须添加至内容窗格,而不是直接添加至JFrame对象,示例:frame.getContentPane().add(b);,67,JPanel,JPanel组件是一个中间容器用于将小型的轻量级组件组合在一起JPanel的缺省布局为FlowLayoutJPanel具有下列构造函数:JPanel()JPanel(LayoutManagerlm),68,JButton,Swing的按钮相对于AWT中Button类提供了更多的功能。JButton类允许用图标、字符串或两者同时构造一个按钮。构造函数如下:JButton()JButton(Iconicon):icon表示使用的图标JButton(Stringtext):text表示使用的字符串JButton(Stringtext,Iconicon),ImageIconbuttonIcon1=newImageIcon(on.gif);JButtonb1=newJButton(FirstButton,buttonIcon1);b1.setMnemonic(KeyEvent.VK_F);,设置键盘快捷方式,创建一个带图标的JButton,69,JPanel和JButton使用示例,importjava.awt.*;importjavax.swing.*;classPanelDemoextendsJFramepublicPanelDemo(Stringtitle)super(title);Containerc=getContentPane();JPanelcpane=newJPanel();JButtonok=newJButton(确定);cpane.add(ok);JButtoncancel=newJButton(取消);cpane.add(cancel);c.add(cpane,BorderLayout.SOUTH);,publicstaticvoidmain(Stringargs)PanelDemopd=newPanelDemo(JPanel测试);pd.setSize(300,200);pd.setVisible(true);,70,JLabel,它既可以显示文本也可以显示图像构造函数如下:JLabel(Iconicon):icon表示使用的图标JLabel(Stringtext,Iconicon,intalign):text表示使用的字符串;icon表示使用的图标;align表示水平对齐方式,其值可以为:LEFT、RIGHT、CENTER。,ImageIconicon=newImageIcon(Calv.gif);JLabelcalv_label=newJLabel(这是Calvin,icon,SwingConstants.LEFT);,71,文本组件,JtextComponent为所有Swing文本组件的根类,72,JTextField,JTextField组件允许输入或编辑单行文本此类的构造函数包括:JTextField()JTextField(Documentdoc,Stringtext,intcolumns)JTextField(intcolumns)JTextField(Stringtext)JTextField(Stringtext,intcolumns),Containercon=getContentPane();con.setLayout(newFlowLayout();JLabeljl=newJLabel(“文本域”);con.add(jl);JTextFieldtf=newJTextField(20);con.add(tf);,73,JTextArea,JTextArea组件用于接受来自用户的多行文本它可实现可滚动界面JTextArea组件可使用下列构造函数创建:JTextArea()JTextArea(introws,intcols)JTextArea(Stringtext)JTextArea(Stringtext,introws,intcols)JTextArea(Documentdoc)JTextArea(Documentdoc,Stringtext,introws,intcols),JLabeljl=newJLabel(“文本区”);con.add(jl);JTextAreata=newJTextArea(5,10);con.add(ta);,74,选择性输入,为了简化表单填写过程,通常为用户提供多种可供选择的选项,而无需用户写出他们的响应。常用于选择性输入的组件有:复选框单选按钮列表框组合框,75,复选框,复选框用于为用户提供一组选项JCheckBox类具有下列构造函数:JCheckBox()JCheckBox(Iconicon)JCheckBox(Iconicon,booleanselected)JCheckBox(Stringtext)JCheckBox(Stringtext,booleanselected)JCheckBox(Stringtext,Iconicon)JCheckBox(Stringtext,Iconicon,booleanselected),76,单选按钮,单选按钮允许用户从多个选项中选择其中一个ButtonGroup用于在Swing中创建组JRadioButton对象可使用下列构造函数创建:JRadioButton()JRadioButton(Iconicon)JRadioButton(Icon,booleanselected)JRadioButton(Stringtext)JRadioButton(Stringtext,booleanselected)JRadioButton(Stringtext,Iconicon)JRadioButton(Stringtext,Iconicon,booleanselected),77,JCheckBox和JRadioButton使用示例,importjava.awt.*;importjavax.swing.*;classHobbyextendsJPanelJCheckBoxc1=newJCheckBox(阅读,false);JCheckBoxc2=newJCheckBox(音乐,false);JCheckBoxc3=newJCheckBox(绘画,false);JRadioButtonrad1=newJRadioButton(大专);JRadioButtonrad2=newJRadioButton(本科);JRadioButtonrad3=newJRadioButton(硕士);JLabeljl=newJLabel(您有什么爱好?);JLabelj2=newJLabel(您的最高学历?);JButtonexitbtn=newJButton(退出);publicHobby()setLayout(newGridLayout(9,1);add(jl);add(c1);add(c2);add(c3);add(j2);add(rad1);add(rad2);add(rad3);add(exitbtn);,publicclassHobbytestextendsJFrameHobbytest()super();getContentPane().add(newHobby();setSize(300,200);setVisible(true);publicstaticvoidmain(Stringargs)newHobbytest();,78,列表,在可供选择的选项很多时,可向用户呈现一个列表来供他们选择JList组件依次排列项目列表,这些项目可以单选或多选JList类既可显示字符串,也可显示图标JList不支持双击MouseListener可用于解决双击问题,79,JList构造函数,publicJList():使用空模型构造JListpublicJList(ListModeldataModel):构造一个列表,用它显示指定模型中的元素。publicJList(ObjectlistData):构造一个列表以显示指定数组listData的元素。JList不支持滚动。要启用滚动,可使用下列代码:JScrollPanemyScrollPane=newJScrollPane();myScrollPane.getViewport().setView(dataList);,Stringstars=安东尼奥.班德拉斯,来昂纳多.迪卡普尼奥,桑德拉.布洛克,休.格兰特,朱莉亚.罗伯茨;JListmoviestars=newJList(stars);,80,组合框,文本域和下拉列表的组合在Swing中,组合框由JComboBox表示构造函数如下:publicJComboBox():此构造函数使用缺省数据模型创建JComboBoxpublicJComboBox(ComboBoxModelasModel):使用现有ComboBoxModel中的项目的组合框publicJComboBox(Objectitems):包含指定数组元素的组合框,Stringnames=弗雷德里克.福西斯,约翰.克里沙姆,玛丽.希金斯.克拉克,帕特丽夏.康威尔;JComboBoxauthors=newJComboBox(names);,81,菜单显示项目列表,指明各种任务。选择或单击某个选项时会打开另一个列表或子菜单。Swing菜单由菜单栏、菜单和菜单项构成。菜单栏是所有菜单和菜单项的根,菜单,82,JFC菜单组件,83,JMenuBar,JMenuBar是可通过JFrame、JWindow或JInternalFrame的根窗格添加至容器的组件。由多个JMenu组成,每个JMenu在JMenubar中都表示为字符串。JMenuBar需要两个附加类:SingleSelectionModel类:跟踪当前选定的菜单LookAndFeel类:负责绘制菜单栏以及对在其中发生的事件作出响应,84,JMenu,JMenu在JMenuBar下以文本字符串形式显示,而在用户单击它时,则以弹出式菜单显示。JMenu具有两个附加类:JPopupMenu:用于显示JMenu的菜单项LookAndFeel:负责绘制菜单栏中的菜单以及对在其中发生的所有事件作出响应,85,JPopupMenu的函数,86,JMenuItem,JMenu或JPopupMenu中的一个组件,以文本字符串形式显示,可以具有图标JMenuItem的外观可以修改,如字体、颜色、背景、边框等除字符串外,在JMenuItem中还可以添加图标,87,JCheckBoxMenuItem,将复选框作为其项目复选框是使用JCheckBox类创建的可有文本字符串和(或)图标在单击并释放JCheckBoxMenuItem时,菜单项的状态会变为选定或取消选定,88,JRadioButtonMenuItem,除了在任何时间点都只能选择一个单选按钮外,其他的与复选框类似可有文本字符串和(或)图标单击选定的单选按钮不会改变其状态单击未选定的单选按钮时将取消选定此前选定的单选按钮,89,菜单使用示例,importjavax.swing.*;importjava.awt.*;publicclassMenutestextendsJAppletpublicvoidinit()JMenuBarmb=newJMenuBar();JMenufileMenu=newJMenu(显示);JMenupullRightMenu=newJMenu(“问好);fileMenu.add(欢迎);fileMenu.addSeparator();fileMenu.add(pullRightMenu);fileMenu.add(退出);pullRightMenu.add(newJCheckBoxMenuItem(早上好!);pullRightMenu.add(newJCheckBoxMenuItem(下午好!);pullRightMenu.add(newJCheckBoxMenuItem(晚安!再见!);mb.add(fileMenu);setJMenuBar(mb);,90,Applet编程,Applet是一种为通过Web浏览器在Internet上工作而设计的Java程序。Applet是用Java编写的小应用程序,它能够嵌入在HTML网页中,并由支持Java的Web浏览器来解释执行。,91,JavaApplet工作原理,HTML文件嵌入Applet,www服务器,www服务器,www浏览器,请求HTML文件,下载HTML文件,请求Applet字节码,下载Applet字节码,解释执行Applet字节码,92,从Web上下载的javaApplet是在称为沙箱(sandbox)的安全环境中运行的。大多数浏览器上,在沙箱中运行时:Applet绝不能运行任何一个本地可执行程序。Applet除了可以与从中下载它们的服务器进行通信外,不能与任何主机通信。Applet不能读写本地计算机的文件系统。Applet不能查找除版本号等以外的任何关于本地计算机的信息。,Applet的安全性,Applet是设计用于从远程站点加载,然后在本地执行,因此,安全对于Applet是至关重要的问题。,93,JavaApplet程序的基本结构,94,第一个Applet程序,importjava.awt.*;importjava.applet.*;publicclassFirstappletextendsAppletStrings;publicvoidinit()s=你好,世界!;publicvoidpaint(Graphicsg)g.drawString(s,70,80);,覆盖了Applet类的init()方法。该方法主要用于初始化Applet中的变量。,覆盖了Applet类的paint()方法。,用于在屏幕上给定的位置绘制字符串,95,Applet源文件首先用Java编译器编译:javacFirstapplet.java创建一个用于显示Applet的HTML文件:然后在命令提示符处键入下列代码:appletviewerFirstapplet.html,编译和运行Applet,96,要在支持Java的浏览器中查看Applet,则需要加载HTML文件。Applet会显示为HTML网页的一部分。要运行Applet,浏览器必须启用Java插件。,在浏览器中查看Applet,97,Applet和应用程序之间的区别,98,将应用程序转换为Applet,可以将一个图形化的Java应用程序转换成一个Applet。步骤如下:1.取消应用程序中的main方法。2.用Applet或JApplet替换Frame或JFrame,并将此类设为public。否则这个Applet不能被下载。3.去掉应用程序中对窗体的setSize方法和setTitle方法的调用。4.将所有的初始

温馨提示

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

评论

0/150

提交评论