[工学]第9章 图形用户界面设计.ppt_第1页
[工学]第9章 图形用户界面设计.ppt_第2页
[工学]第9章 图形用户界面设计.ppt_第3页
[工学]第9章 图形用户界面设计.ppt_第4页
[工学]第9章 图形用户界面设计.ppt_第5页
已阅读5页,还剩136页未读 继续免费阅读

下载本文档

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

文档简介

第 9 章 图形用户界面设计,小程序,Java Applet介绍,Applet可以翻译为小应用程序,Java Applet就是用Java语言编写的一些小应用程序,它们可以直接嵌入到网页中,并能够产生特殊的效果。包含Applet的网页被称为Java-powered页,可以称其为Java支持的网页。,小程序,Java Applet介绍,当用户访问这样的网页时, Applet被下载到用户的计算机上执行,但前提是用户使用的是支持Java的网络浏览器。由于Applet是在用户的计算机上执行的,因此它的执行速度不受网络带宽或者Modem存取速度的限制。用户可以更好地欣赏网页上Applet产生的多媒体效果。,小程序,Java Applet介绍,在Java Applet中,可以实现图形绘制,字体和颜色控制,动画和声音的插入,人机交互及网络交流等功能。 Applet还提供了名为抽象窗口工具箱(Abstract Window Toolkit, AWT)的窗口环境开发工具。 AWT利用用户计算机的GUI元素,可以建立标准的图形用户界面,如窗口、按钮、滚动条等等。 目前,在网络上有非常多的Applet范例来生动地展现这些功能,读者可以去调阅相应的网页以观看它们的效果。,小程序,Applet的工作原理 含有Applet的网页的HTML文件代码中部带有 和这样一对标记,当支持Java的网络浏览器遇到这对标记时,就将下载相应的小应用程序代码并在本地计算机上执行该Applet。,小程序,Applet的开发步骤大致可以分为以下三个步骤: (1)用UltraEdit或Notepad等纯文本软件编辑Java Applet源程序。 (2)利用javac编译器将Applet源程序转换成class字节码文件。 (3)编写HTML页面,并通过APPLET/APPLET标签引用上述字节码文件。,小程序,例1、带有一个Applet的主页 An Example Homepage Welcome to ddvip homepage! This is an example homepage, you can see an applet in it。 ,小程序,例2、java applet小应用程序 import java.awt.*; import java.applet.*; public class myApplet extends Applet String str=“”; public void paint(Graphics g) str=getParameter(“date”); g.drawString(str,60,70); ,小程序,例2、java applet小应用程序对应得HTML文件myApplet.html ,小程序,小程序的生命周期 Applet小程序的生命周期相对于Application而言较为复杂。在其生命周期中涉及到Applet类的四个方法: init()、start()、stop()和destroy(),Applet的生命周期中有相对应的四个状态:初始态、运行态、停止态和消亡态。,小程序,小程序的生命周期(实例:AppletLife.java) 当程序执行完init()方法以后,Applet小程序就进入了初始态; 然后立刻执行start()方法,Applet小程序进入运行态; 当Applet小程序所在的浏览器图标化或者是转入其它页面时,该Applet小程序立刻执行stop ()方法,使Applet小程序进入停止态; 在停止态中,如果浏览器又重新加载该Applet小程序所在的页面,或者是浏览器从图标中还原,则Applet小程序又会调用start()方法,进入运行态; 不过,在停止态时,若浏览器被关闭,则Applet小程序会调用destroy()方法,使其进入消亡态。,paint()方法,Applet小程序的窗口绘制通常是由paint()方法来完成的。paint()方法在小程序执行后会被自行调用,并且以后在遇到窗口缩小化后再恢复或者被其他窗口遮挡后再恢复情形,它都会被自动调用,以重新绘制窗口。 paint()方法包含一个Graphics类的参数对象,这个对象可以被用来输出文本、绘制图形、显示图像等。该方法的格式如下: public void paint(Graphics g) /编写代码 ,Applet多媒体编程-文字,import java.awt.*; import java.applet.*; public class TextApplet extends Applet Font f1 = new Font(“Times New Roman“,Font.PLAIN,12); Font f2 = new Font(“宋体“,Font.BOLD,24); Font f3 = new Font(“黑体“,Font.BOLD,36); Color c1 = new Color(255,0,0); /红色 Color c2 = new Color(0,255,0); /绿色 Color c3 = new Color(0,0,255); /蓝色 public void paint(Graphics g) g.setFont(f1); g.setColor(c1); g.drawString(“Times New Roman“,20,30); g.setFont(f2); g.setColor(c2); g.drawString(“宋体“,20,60); g.setFont(f3); g.setColor(c3); g.drawString(“黑体“,20,120); ,Applet多媒体编程-图形,import java.awt.*; import java.applet.*; public class LineApplet extends Applet public void paint(Graphics g) int x1,y1,x2,y2; x1 = 10; y1 = 10; x2 = 100; y2 = 100; g.drawLine(x1,y1,x2,y2); ,Applet多媒体编程-图形,import java.awt.*; import java.applet.*; public class RectApplet extends Applet public void paint(Graphics g) g.drawRect(10,10,60,60); g.fillRect(80,10,60,60); ,Applet多媒体编程-图形,import java.awt.*; import java.applet.*; public class PolyApplet extends Applet public void paint(Graphics g) int x = 30,90,100,140,50,60,30 ; int y = 30,70,40,70,100,80,100 ; int pts = x.length; g.drawPolygon(x,y,pts); ,import java.awt.*; import java.applet.*; public class LampApplet extends Applet public void paint(Graphics g) /绘制灯上的黑点 g.fillArc(78,120,40,40,63,-174); g.fillArc(173,100,40,40,110,180); g.fillOval(120,96,40,40); /绘制灯的上下轮廓 g.drawArc(85,157,130,50,-65,312); g.drawArc(85,87,130,50,62,58); /绘制灯的左右轮廓 g.drawLine(85,177,119,89); g.drawLine(215,177,181,89); /绘制灯柱线 g.drawLine(125,250,125,160); g.drawLine(175,250,175,160); /绘制底座 g.fillRect(10,250,260,30); ,图形用户界面基本概念,图形用户界面 GUI :Graphical User Interface AWT: 抽象窗口工具包(Abstract Window Toolkit) 相关软件包 java.awt包 提供基本GUI组件、视觉控制和绘图工具API java.awt.event包 提供java GUI事件处理API Swing: 可以看作是AWT的改良版,而不是替代AWT,是对AWT的提高和扩展。 Swing中的类是从AWT中继承的,有些Swing类直接扩展AWT中对应的类。,图形用户界面的构成,组件 组件(Component)是图形用户界面的基本组成元素,凡是能够以图形化方式显示在屏幕上并能够与用户进行交互的对象均为组件,如菜单、按钮、标签、文本框、滚动条等。 组件不能独立地显示出来,必须将组件放在一定的容器中才可以显示出来。 JDK的java.awt包中定义了多种GUI组件类,如Menu、Button、Label、TextField等。 抽象类java.awt.Component是除菜单相关组件之外所有Java AWT组件类的根父类,该类规定了GUI组件的基本特性,如尺寸、位置和颜色效果等,并实现了作为一个GUI部件所应具备的基本功能。,图形用户界面的构成,容器 容器(Container)实际上是Component的子类,因此容器类对象本身也是一个组件,具有组件的所有性质,另外还具有容纳其它组件和容器的功能。 容器类对象可使用方法add()添加组件 两种主要的容器类型: java.awt.Window 可自由停泊的顶级窗口 java.awt.Panel 可作为容器容纳其他组件,但不能独立存在,必须被添加到其他容器(如Frame)中。,容器,顶层容器:JFrame,JApplet,JDialog,JWindow 中间容器:JPanel,JScrollPane,JSplitPane,JToolBar等 基本控件:JButton,JComboBox,JList,JMenu,JTextField 可编辑控件:JColorChooser,JFileChooser,JTextArea,AWT包结构,组件类层次结构,Swing包结构,图形用户界面的实现,选取组件 设计布局 响应事件 应用原则 Swing比AWT提供更全面、更丰富的图形界面设计功能 Java 2平台支持AWT组件,但鼓励用Swing组件 主要讲述AWT和Swing的图形界面设计,常用容器JFrame(Frame),JFrame对象的显示效果是一个可自由停泊的顶级“窗口”,带有标题和尺寸重置图标 JFrame默认初始化为不可见的,可以调用JFrame对象的setVisible(true)方法使之变为可见。 JFrame.show()方法已经过时 作为容器JFrame还可使用add()方法包含其他组件。,JFrame的主要构造方法,JFrame():创建无标题的窗口对象 JFrame(String s):创建一个标题名是s的窗口对象,JFrame类的常用方法,public void setTitle(String title) 将此窗体的标题设置为指定的字符串。 public String getTitle() 获得窗体的标题。标题显示在窗体的边框中。 public void setBounds(int x, int y, int width, int height): 移动组件并调整其大小。由 x 和 y 指定左上角的新位置,由 width 和 height 指定新的大小。 public void setBounds(Rectangle r) 移动组件并调整其大小,使其符合新的有界矩形 r。由 r.x 和 r.y 指定组件的新位置,由 r.width 和 r.height 指定组件的新大小 public void setSize(int width, int height) 调整组件的大小,使其宽度为 width,高度为 height。,JFrame类的常用方法,public void setResizable(boolean resizable) 设置此窗体是否可由用户调整大小。 public void setBackground(Color c) 设置组件的背景色。 背景色对每个组件的影响各不相同,并且部分受背景色影响的组件在不同的操作系统之间可能有所不同。 public void pack() 调整此窗口的大小,以适合其子组件的首选大小和布局。如果该窗口和/或其所有者还不可显示,则在计算首选大小之前都将变得可显示。在计算首选大小之后,将会验证该窗口。 public void setVisible(boolean b) 根据参数 b 的值显示或隐藏此窗口。 小提示:该方法已经替代了过时的方法show()。,例1,import java.awt.*; import javax.swing.*; public class Example9_1 public static void main(String args) JFrame mw = new JFrame(“我的第一个窗口“); mw.setSize(550,500); JButton button = new JButton(“我是一个按钮“); mw.getContentPane().add(button); mw.setVisible(true); /注意:程序编译直接运行后,窗体的关闭按钮不能执行,必须按Ctrl+C键来关闭窗体!,常用容器JFrame(Frame),用Swing编写GUI程序时,通常不直接用JFrame创建窗口对象,而用JFrame派生的子类创建窗口对象,在子类中可以加入窗口的特定要求和特别的内容等。,例2,import javax.swing.*; import java.awt.*; class MyWindowDemo extends JFrame public MyWindowDemo(String name,JButton button,Color c,int w,int h) super(name); this.setSize(w,h); Container contentPane = this.getContentPane(); contentPane.add(button); contentPane.setBackground(c); ,public class Example9_2 public static MyWindowDemo mw1; public static MyWindowDemo mw2; public static void main(String args) JButton butt1 = new JButton(“我是一个按钮“); String name1 = “我的第一个窗口“; String name2 = “我的第二个窗口“; mw1 = new MyWindowDemo(name1,butt1,Color.blue,350,450); mw1.setVisible(true); JButton butt2 = new JButton(“我是另一个按钮“); mw2 = new MyWindowDemo(name2,butt2,Color.magenta,300,400); mw2.setVisible(true); /注意:Frame/JFrame组件默认布局是BorderLayout,当窗体中放置了多个组件时,它们会互相叠加,且这个最上面的组件填充了整个窗体。因此,通常要对窗体进行布局设置。,例3,import java.awt.*; import javax.swing.*; public class Example1 public static void main(String args) JFrame mw = new JFrame(“我的第一个窗口“); mw.setSize(550,500); JButton button = new JButton(“我是一个按钮“); JButton b1 = new JButton(“next“); JButton b2 = new JButton(“center“); mw.getContentPane().add(button); mw.getContentPane().add(b1); mw.add(b2); mw.setVisible(true); ,JPanel,是最简单的容器,没有边框,不能被移动、缩放或关闭 通常作为一个容器组件被加入到其他容器中。该容器可以嵌套 主要作用是方便布局管理 面板的默认布局是FlowLayout 构造函数 JPanel() :使用默认的布局管理器创建新面板。 JPanel(LayoutManager layout):创建具有指定布局管理器的新面板。,例4,import java.awt.*; import javax.swing.*; public class Example4 private void fillJpanel(Container c) Button button1,button2,button3; button1=new Button(“确定“); button2=new Button(“取消“); button3=new Button(“保存“); c.add(button1);c.add(button2);c.add(button3); public static void main(String args) Example4 obj=new Example4(); obj.myJPanel(); ,例4,public void myJPanel() JFrame jframe=new JFrame(“一个面板应用“); Container contentPane=jframe.getContentPane(); contentPane.setLayout(new FlowLayout();/对窗体进行布局设置 JPanel jpanel1,jpanel2; jpanel1=new JPanel(); jpanel2=new JPanel(); fillJpanel(jpanel1); fillJpanel(jpanel2); contentPane.add(jpanel1);contentPane.add(jpanel2); jpanel1.setBackground(Color.red); jpanel1.setForeground(Color.blue); jpanel2.setBackground(Color.white); jpanel2.setForeground(Color.black); jframe.setSize(200,250); jframe.show(); ,布局设计,FlowLayout:依次放置组件,JPanel默认方式 BorderLayout:将组件放置在边界上,JFrame默认方式 CardLayout:将组件像扑克牌一样叠放,每次只能显示其中一个组件 GridLayout:将显示区域按行、列划分成一个个大小相等的格子,组件依次放入这些格子中 GridBagLayout:将显示区域划分成许多矩形小单元,组件依次放入这些格子中。 每个容器都有一个布局管理器,布局管理器是实现LayoutManager接口的类,FlowLayout (流式布局管理),FlowLayout布局是将其中的组件按照加入的先后顺序从左到右排列 一行排满之后就转到下一行继续从左到右排列 不改变组件尺寸,按照组件原始大小进行显示 组件的对齐方式默认每一行都居中排列,也可以在构造方法中设置不同组件的间距、行距及对齐方式 FlowLayout布局是小应用程序和面板的默认布局。,FlowLayout构造方法,FlowLayout(),生成一个默认的FlowLayout布局,组件居中,间隙像素为5个像素。 FlowLayout(int aligment),设定每一行组件的对齐方式,aligment取值可为FlowLayout.LEFT,FlowLayout.RIGHT,FlowLayout.CENTER。 FlowLayout(int aligment,int horz,int vert):设定对齐方式,并设定组件的水平间距和垂直间距。 用超类Container的方法setLayout()为容器设定布局。如setLayout(new FlowLayout()。,BorderLayout,把容器内的空间简单地划分为东“East”、西“West”、南“South”、北“North”、中“Center”五个区域。 加入组件时,都应该指明加入哪一个区域中。 一个位置放一个组件。如果某个位置要加入多个组件,应先将要加入该位置的组件放入另一个容器中。,BorderLayout 布局管理器,BorderLayout型布局容器尺寸缩放原则: 北、南两个区域在水平方向缩放。 东、西两个区域在垂直方向缩放。 中部可在两个方向上缩放。,BorderLayout布局的构造方法,BorderLayout():生成一个默认的BorderLayout布局,没有间隙 BorderLayout(int horz,int vert):设定组件之间的水平间距horz和垂直间距vert。 加入容器的方法:add(组件名,位置) BorderLayout布局是JWindow,JFrame和JDialog的默认布局。,import java.awt.*; import javax.swing.*; public class Example9_5 public static void main(String args) JLabel label1,label2,label3,label4,label5; JFrame mw = new JFrame(“我是一个窗口“); mw.setSize(250,200); Container con = mw.getContentPane(); con.setLayout(new BorderLayout(); label1 = new JLabel(“东标签“); label2 = new JLabel(“南标签”,JLabel.CENTER);/标签居中 label3 = new JLabel(“西标签“); label4 = new JLabel(“北标签“,JLabel.CENTER); label5 = new JLabel(“中标签“,JLabel.CENTER); con.add(label1,“East“); con.add(label2,“South“); con.add(label3,“West“); con.add(label4,“North“); con.add(label5,“Center“); mw.setVisible(true); ,例5,GridLayout布局,GridLayout是把容器划分为若干行和列的网格状,行和列由程序控制,组件放在网格的小格子中。 布局比较精确。 由于每个网格具有相同形状和大小,要求放入容器的组件也应保持相同的大小。 如GridLayout(3,4);,GridLayout构造方法,GridLayout():生成一个单列的GridLayout布局,默认情况下无间隙 GridLayout(int row,int col):设定一个有row行和col列的GridLayout布局 GridLayout(int row,int col,int horz,int vert):设定布局的行和列,并指定组件的水平间距和垂直间距 GridLayout布局以行为基准,当放置的组件个数超额时,自动增加列;反之,组件太少也会自动减少列,行数保持不变,组件按行优先顺序排列,CardLayout布局,CardLayout布局的容器可容纳多个组件,多个组件拥有同一个显示空间,每一时刻只能显示一个组件 CardLayout设计步骤: 创建CardLayout布局对象 使用setLayout()方法为容器设置布局 调用容器的add()方法将组件加入容器 CardLayout布局加入组件的方法是: add(组件代号,组件),用CardLayout类提供的方法显示某一组件的方式 show(容器名,组件代号):指定某个容器中的某个组件显示。如: myCard.show(p,k); 显示容器p中组件代号为k的组件 按组件加入的顺序显示组件,如“ myCard.first(p);显示容器p中的第一个组件 myCard.last(p);显示容器p中的最后一个组件 myCard.next(p); myCard.previous(P),CardLayout布局,组件定位,Java组件在容器中的定位由布局管理器决定。 如要人工控制组件在容器中的定位,可取消布局管理器(setLayout(null)),然后使用Component类的下述成员方法: setLocation(); setSize(); setBounds();,小结,Java工具包 java.awt 抽象窗口组件工具包 提供的图形功能是各种通用型操作系统所提供的图形高能的交集。重量级组件。 javax.swing 在AWT基础上构建的一套新的图形界面系统,提供了AWT所能提供的所有功能,并且用纯粹的Java代码对AWT的功能进行了大幅度的扩充。轻量级组件。 组件(Component):构成GUI的基本元素 容器(Container)组件 顶层容器:JFrame、JDialog、JApplet 中间容器:JPanel、JScrollPane、JSplitPane、JToolBar 特殊容器:JinternalFrame、JLayeredPane 非容器组件,小结,图形用户界面的实现 选取组件 设计布局 响应事件 向容器添加组件的方法 add(Componet comp) 注意:Swing组件不能直接添加到顶层容器中,它必须添加到一个与Swing顶层容器相关联的内容面板(content pane)上。 frame.getContentPane().add(childComponet) Jpanel contentPane=new Jpanel(); frame.setContentPane(contentPane);,布局管理器总结,Frame是一个顶级窗口,Frame的缺省布局管理器为BorderLayout Panel无法单独显示,必须添加到某个容器中。 Panel的缺省布局管理器为FlowLayout。 当把Panel作为一个组件添加到某个容器中后,该Panel仍然可以有自己的布局管理器。,布局管理器总结,使用布局管理器时,布局管理器负责各个组件的大小和位置,因此用户无法在这种情况下设置组件大小和位置属性,如果试图使用Java语言提供的setLocation(),setSize(),setBounds()等方法,则都会被布局管理器覆盖。 如果用户确实需要亲自设置组件大小或位置,则应取消该容器的布局管理器,方法为: setLayout(null),滚动窗口JScrollPane,为组件添加滚动条 构造方法: JScrollPane() 创建一个空的JScrollPane ,需要时水平和垂直滚动条都可显示。以后使用setViewportView(Complent)方法添加组件。 JScrollPane(Componet view) 创建一个显示指定组件内容的 JScrollPane。只要组件的内容超过视图大小就会显示水平和垂直滚动条。 注意:滚动窗口中只能添加一个组件 JList、JLabel、JTextArea等,JScrollPane主要方法,public void setHorizontalScrollBarPolicy(int policy) 确定水平滚动条何时显示在滚动窗格上。选项有: JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED JScrollPane.HORIZONTAL_SCROLLBAR_NEVER JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS public void setVerticalScrollBarPolicy(int policy) 确定垂直滚动条何时显示在滚动窗格上。合法值是: JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED JScrollPane.VERTICAL_SCROLLBAR_NEVER JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,实例9-5,import java.awt.*; import javax.swing.*; public class myJScrollPE public static void main(String args) JFrame jframe=new JFrame(“按钮+面板+滚动窗口“); Container contentPane=jframe.getContentPane(); contentPane.setLayout(new FlowLayout(); JPanel jpanel=new JPanel(); JScrollPane jscrollpane=new JScrollPane();/ JButton jbutton1=new JButton(“确定“); JButton jbutton2=new JButton(“取消“); JButton jbutton3=new JButton(“保存“); jpanel.add(jbutton1); jpanel.add(jbutton2); jpanel.add(jbutton3); jscrollpane.setViewportView(jpanel);/ contentPane.add(jscrollpane); jframe.setSize(800,650);/ jframe.show();/ ,JScrollPane的简单用法,import java.awt.*; import java.awt.event.*; import javax.swing.*; public class JTextArea2 public static void main(String args) JFrame f=new JFrame(“JTextArea2“); Container contentPane=f.getContentPane(); contentPane.setLayout(new BorderLayout(); JPanel p1=new JPanel(); p1.setLayout(new GridLayout(1,1); p1.setBorder(BorderFactory.createTitledBorder(“构造TextArea使用GridLayout,加ScrollBar“); JTextArea t1=new JTextArea(5,25); t1.setTabSize(10); t1.setFont(new Font(“标楷体“,Font.BOLD,16); t1.setLineWrap(true);/激活自动换行功能 t1.setWrapStyleWord(true);/激活断行不断字功能 p1.add(new JScrollPane(t1);/将JTextArea放入JScrollPane中,这样就能利用滚动的效果看到输入超过 /JTextArea高度的文字. contentPane.add(p1); f.pack();/调整此窗口的大小,以适合其子组件的首选大小和布局。 f.show(); f.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); ,菜单组件,java.awt.MenuBar类/菜单栏类 MenuBar() setMenuBar(菜单对象) java.awt.Menu类/菜单类 java.awt.MenuItem类/菜单项类 java.awt.CheckboxMenuItem类 /此类表示一个可包括在菜单中的复选框 java.awt.PopupMenu类/弹出菜单类,Swing菜单组件,JMenuBar类 菜单栏:用来管理菜单,不参与交互操作 JMenu类 菜单:用来存放菜单项和整合菜单项的组件。 JMenuItem类 菜单项:菜单系统中 最基本的组件。,使用菜单组件的例子,import java.awt.*; import java.awt.event.*; public class Exam5_19 extends Frame implements ActionListener, ItemListener TextField text; public Exam5_19() super(“我的菜单窗口”); setSize(300, 200); public void init() MenuBar myB = new MenuBar(); setMenuBar(myB);/将此窗体的菜单栏设置为指定的菜单栏。 Menu m1 = new Menu(“文件”); m1.add(new MenuItem(“打开”);/添加子菜单(方法一) MenuItem m11 = new MenuItem(“保存”);/创建子菜单 m11.setEnabled(false);,使用菜单组件的例子,m1.add(m11);/添加子菜单(方法二) m1.addSeparator();/将一个分隔线或连字符添加到菜单的当前位置 m1.add(“退出”);/添加子菜单(方法三) m1.addActionListener(this);/添加事件监听器 myB.add(m1); Menu m2 = new Menu(“编辑”); m2.add(“复制”); Menu m21 = new Menu(“颜色”); m21.add(“前景色”); m21.add(“背景色”); m21.addActionListener(this); m2.add(m21); m2.addSeparator(); CheckboxMenuItem mycmi = new CheckboxMenuItem(“全选”); /创建复选菜单 mycmi.addItemListener(this);,使用菜单组件的例子,m2.add(mycmi); m2.addActionListener(this); myB.add(m2); Menu m3 = new Menu(“帮助”); m3.add(“关于”); m3.addActionListener(this); myB.setHelpMenu(m3); text = new TextField(); add(“South”, text); ,使用菜单组件的例子,public static void main(String args) Exam5_19 myMenu = new Exam5_19(); myMenu.init(); myMenu.setVisible(true); public void itemStateChanged(ItemEvent e) text.setText(“状态改变”); public void actionPerformed(ActionEvent e) text.setText(e.getActionCommand(); if (e.getActionCommand() = “退出”) System.exit(0); ,对话框,java.awt.Dialog类 Dialog 是一个带标题和边界的顶层窗口,一般用于从用户处获得某种形式的输入。有边框和标题,可独立使用的容器。 Dialog(Frame f) Dialog(Frame f, boolean b) Dialog(Frame f, String s) Dialog(Frame f, String s, boolean b) setTitle()/getTitle() setModal()/setSize()/setVisible() 操作步骤 创建一个窗口类 创建一个对话框类 设置对话框大小 创建主类,启动和初始化窗口和对话框类,Swing使用JOptionPane类,提供许多现成的对话框 输入:showInputDialog();/提示用户进行输入 确认:showConfirmDialog(); 信息:showMessageDialog(); 选项: showOptionDialog();/可选择的对话框 方法中通过返回一个整数,来表示用户单击了哪个按钮。 如果JOptionPane提供的对话框不能满足需要,可以使用JDialog类自行设计对话框。,Swing使用JOptionPane类,模式和非模式对话框 模式对话框指必须经过确认才能继续允许程序的对话框 口令对话框、删除对话框、选择参数对话框、错误提示对话框 非模式对话框是指显示对话框后,用户可以不用关闭此对话框而继续运行程序 查找替换对话框、插入符号对话框 大部分对话框都是模式对话框,Swing使用JOptionPane类,常用参数 messageType 定义 message 的样式。外观管理器根据此值对对话框进行不同地布置,并且通常提供默认图标。可能的值为: ERROR_MESSAGE INFORMATION_MESSAGE WARNING_MESSAGE QUESTION_MESSAGE PLAIN_MESSAGE optionType 定义在对话框的底部显示的选项按钮的集合: DEFAULT_OPTION YES_NO_OPTION YES_NO_CANCEL_OPTION OK_CANCEL_OPTION,简单对话框实例,import javax.swing.*; class JOptionPE public static void main( String args ) int response = JOptionPane.showConfirmDialog( null, “Really wanna give me your credit card number?“, “Decision! Decision!“, JOptionPane.OK_CANCEL_OPTION,JOptionPane.PLAIN_MESSAGE );,简单对话框实例,String acknowledgement = response = JOptionPane.OK_OPTION ? “Ill send you the bills!“ : “Oh well, thats just fine.“; JOptionPane.showMessageDialog( null, acknowledgement ); ,事件处理,界面设计 (静态) 如何使界面动起来 ? 通过事件触发对象的响应机制 事件? 鼠标移动、鼠标点击、键盘键入等,事件处理,事件处理机制 事件源 事件对象 事件监听者 如何实现 实现(implements)事件监听接口(interface)产生一个监听器对象(Listener) 监听谁? 将该监听器对象注册到组件对象中 编写事件响应方法,事件处理,1. 事件、监视器和监视器注册 2. 实现事件处理的途径 java.awt.event包中用来检测并对事件作出反应的模型包括以下三个组成元素 (1). 源对象:事件发生在这个组件上,它与一组“侦听”该事件的对象保持着联系。 (2). 监视器对象:是一个实现预定义接口的类的一个对象,该对象的类要提供对发生的事件做处理的方法。 (3). 事件对象:它包含描述当事件发生时从源传递给监视器的特定事件的信息。,事件处理,3. 事件类型和监视器接口 在java语言中,为了便于系统管理事件,系统将事件分类,称为事件类型。 系统为每个事件类型提供一个接口。 要作为监视器的类必须实现相应的接口,并且提供接口规定的响应事件的方法。,组件和事件类型,监视器接口方法,基本控制组件,使用步骤: 创建基本控制组件类的对象,指定对象属性; 将组件对象加入到指定容器的适当位置(布局设计); 创建事件对象的监听者。 Swing组件(javax.swing.*),键盘事件KeyEvent,KeyListener KEY_PRESSED: KEY_RELEASED: KEY_TYPED:表示键盘按键被敲击,鼠标事件MouseEvent,MouseListener类 mouseClicked(MouseEvent e) mouseEntered(MouseEvent e) mouseExited(MouseEvent e) mousePressed(MouseEvent e) mouseReleased(MouseEvent e) MouseMotionListener类 mouseDragged(MouseEvent e) mouseMoved(MouseEvent e) MouseEvent类 int getX()/或得鼠标事件X坐标 int getY()/获得鼠标事件Y坐标 point getClickCount()/获得鼠标的单击次数,按钮(Button 和 JButton),构造方法: JButton():创建一个没有标题的按钮对象 JButton(String s):创建一个标题为s的按钮对象 其他方法: setLabel(String s) getLabel() addActionListener(ActionListener aL) removeActionListener(ActionListener aL) public void setActionCommand(String command) 设置

温馨提示

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

评论

0/150

提交评论