Java图形用户界面设计.ppt_第1页
Java图形用户界面设计.ppt_第2页
Java图形用户界面设计.ppt_第3页
Java图形用户界面设计.ppt_第4页
Java图形用户界面设计.ppt_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

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

文档简介

第四章,图形用户界面设计,图像用户界面,图形用户界面(GUI)使用图形的方式,借助菜单、按钮等标准界面元素和鼠标操作,帮助用户方便的发送指令,并将运行结果以图形方式显示得给用户。 通过使用抽象窗口工具包(AWT)来创建图形用户界面(GUI)。AWT包中提供了3大类: 容器类(Container) UI 组件类(UI Component) 帮助类(LayoutManager、Graphics、Color等) 在JDK1.2版本以后,引入新的包javax.swing。Swing GUI组件在AWT的基础上增加了很多功能。,java.awt包中的类体系结构,Button,Label,Jcomponent,UI组件_1,Java的图形用户界面的最基本组成部分是组件,组件是一个可以以图形化的方式显示在屏幕上并能与用户进行交互的对象,例如一个按钮,一个标签等。 组件不能独立地显示出来,必须将组件放在一定的容器中才可以显示出来。 在Componen类中定义了AWT组件具有的一般功能如大小和位置控制 ,外形控制,组件的状态控制等。 AWT支持的组件:按钮、标签、文本框、文本区、复选框、单选按钮、滚动条、单选按钮、表格、菜单等。,UI组件_2,标签,文本框,文本区,按钮,容器,容器(Container)实际上是Component的子类,因此容器本身也是一个组件,具有组件的所有性质,另外还具有容纳其它组件和容器的功能,通过容器来组织其它界面成分和元素。 容器类具有的功能是组件管理和布局管理。在组件管理中,包含的方法有add()、remove()、getComponent()等,分别用于添加组件、删除组件和获得某个组件。 Container类可直接或间接派生出两个常用容器:框架(Frame类)和面板(Panel类)。,帮助类,Graphics类:是所有用来在组件上进行图形绘制时所使用的图形环境上下文的父类. 布局管理类(LayoutManager):为了使我们生成的图形用户界面具有良好的平台无关性,Java语言中,提供了布局管理器这个工具来管理组件在容器中的布局,而不使用直接设置组件位置和大小的方式。为容器设置布局管理类时,可调用容器类中的setLayout()方法。 Color类和Font类。,容器类组件_1,容器分为顶层容器和非顶层容器两大类。 顶层容器可以独立的窗口,不需要其他组件支持。顶层容器的类是Windows,其重要子类是Frame和Dialog。 非顶层容器不是独立的窗口,必须位于窗口之内,非顶层容器包括Panle及ScrollPane等,Panel的重要子类是Applet类。 Container类的特点是:容器类可以容纳其他组件,加入容器中后,组件的位置由布局管理器决定。,容器类组件_2,Container类的常用方法有: add(Component comp) 将指定组件放到容器中。 remove(Component comp) 删除指定组件 setLayout(LayoutManager mgr) 设置容器布局,框架,JFrame的继承层次结构为: Java.lang.Object java.awt.Component java.awt.Container java.awt.Window java.awt.Frame java.awt.JFrame Jframe被默认初始化为不可见的。 当一个JFrame窗口被创建以后,需要调用setSize()方法来设置窗口的大小,并调用setVisible()来显示窗口。,使用JFrame容器示例,import javax.swing.*; import java.awt.*; class FrameTest public static void main(String args) Jframe f=new JFrame(“窗体标题”); f.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE); f.setVisible(true); f.setSize(240,90); ,使用GUI组件必须导入该包,设置窗体属性,面板,面板(JPanel)也是一种容器,可以将组件和其他面板添加到Panle中,在程序中经常用于布局和定位。 与框架不同的是,面板对象不是一个单独的窗口,它只是包含在窗口中的一个区域,必须将面板添加到窗体中,通常是使用add()方法将Panel添加到Window和Frame中。 JPanel层次结构ContainerPanelJPanel,使用JPanle容器示例,import java.awt.*; import javax.swing.*; public class FrameWithPanel public static void main(String args) JFrame fm1=new JFrame(“hello“); JPanel pan=new JPanel(); pan.setSize(100,100); pan.setBackground(Color.yellow); fm1.getContentPane().add(pan); fm1.setVisible(true); ,加入组件到框架窗体,等价于 Container m=getContentPane(); m.add(panelObj);,布局管理器,布局管理器(Layout Manager)是用来安排容器中多个组件的位置及大小,以确保GUI中各组件能安排在适当的位置。 每当需要重新调整屏幕大小或重新绘制屏 幕上任一项目时,就要用到布局管理器。 AWT包提供一组用来进行布局管理的类,每个布局管理类对应一种布局策略。,布局类型,Java中的布局类型包括以下几种: FlowLayout(流式布局) BorderLayout (边界布局) GridLayout(网格布局) CardLayout (卡片布局) BoxLayout(框布局) GridBagLayout(网格包布局),如何设置布局,每个容器(Container对象)都有一个与它相关的缺省的布局管理器。 - Applet 的缺省布局是 FlowLayout ,Frame的缺省布局是 BorderLayout ,Panel的缺省布局是 FlowLayout 。 在没有设置新的布局前,在容器中添加组件都按照该容器的缺省布局排列。 可以通过setLayout( )方法为容器设置新的布局。,FlowLayout,FlowLayout的构造函数有: FlowLayout( ):生成一个默认的流式布局 FlowLayout(int alignment):可以设定每一行组件的对齐方式 FlowLayout(int alignment,int horz,int vert):可以设定组件间的水平和垂直距离,Applet和面板的缺省布局 组件从左上角开始按从左到右、从上到下的方式排列,FlowLayout mylayout = new FlowLayout(); FlowLayout exLayout = new FlowLayout(FlowLayout.RIGHT); setLayout(exlayout); / 为容器设置新布局,BorderLayout_1,下面是BorderLayout所定义的构造函数: - BorderLayout( ):生成默认的边界布局 - BorderLayout(int horz,int vert): 可以设定组件间的水平和垂直距离,窗口、框架和对话框等的缺省布局 组件可被置于容器的北、南、东、西或中间位置,BorderLayout_2,BorderLayout 类定义了几个常量值以指定相应区域: BorderLayout.NORTH 对应容器的顶部 BorderLayout.EAST 对应容器的右部 BorderLayout.SOUTH 对应容器的底部 BorderLayout.WEST 对应容器的左部 BorderLayout.CENTER 对应容器的中部 加入组件方法: void add(Component Obj, int region);,. . . setLayout(new BorderLayout(); Button btnEast=new Button(“东“); Button btnWest=new Button(“西“); Button btnNorth=new Button(“北“); Button btnSouth=new Button(“南“); Button btnCenter=new Button(“中“); add(btnEast,BorderLayout.EAST); add(btnWest,BorderLayout.WEST); add(btnNorth,BorderLayout.NORTH); add(btnSouth,BorderLayout.SOUTH); add(btnCenter,BorderLayout.CENTER); . . .,GridLayout,GridLayout的构造函数如下所示: - GridLayout():生成一个单列的网格布局 - GridLayout(int row,int col):生成一个设定行数和列数的网格布局 - GridLayout(int row,int col,int horz,int vert):可以设置组件之间的水平和垂直间隔,用于将容器区域划分为一个矩形网格 组件按行和列排列,. . . Button btn; / 声明按钮数组 String str=“1“,“2“,“3“,“4“,“5“,“6“,“7“,“8“,“9“; setLayout(new GridLayout(3,3); btn=new Buttonstr.length; / 创建按钮数组 for(int i=0;istr.length;i+) btni=new Button(stri); add(btni); ,CardLayout,卡片布局管理器可以让一群组件使用相同的空间,如同一叠卡片,只有最上边的可以被看到。 常用的构造函数有: - CardLayout():生成一个卡片布局管理器。 - CardLayout(int hgap, int vgap): 生成一个卡片布 局管理器,并指定卡片内组件之间的空间。 其他常用的方法如下: first(Container parent):显示容器的第一个组件。 last(Container parent):显示容器的最后一个组件。 next(Container parent):显示容器的下一个组件。 previous(Container parent):显示容器的前一个组件。 show(Container parent, String name):显示容器中名字为name的组件。必须先指定各组件的名字。,GridBagLayout_1,通过使用以下语法容器可获得 GridBagLayout: GridBagLayout gb=new GridBagLayout(); ContainerName.setLayout(gb); GridBagLayout类仅仅创建了一个布局,要指出组件的位置和尺寸,还需创建GridBagConstraints类来约束。 GridBagConstraints 类中包含 GridBagLayout 类用来定位及调整组件大小所需的全部信息。,组件大小不必相同 组件按行和列排列 放置顺序不一定为从左至右和由上至下,GridBagLayout_2,GridBagConstraints对象指定好约束后,由GridBagLayout 对象调用setContrains()方法约束指定的组件。方法原型: setContrains(Component comp, GridBagConstraints cons),GridBagConstraints 类_1,成员变量列表: gridx, gridy : 指定组件显示区域左上角单元格坐标 gridwidth, gridheight : 指定组件在行或列占用的单元格数量。 weightx, weighty : 指定在调整窗口大小时,如何在行、列间分配额外的空间。这些变量的缺省值为 0.0,表示每个网格显示区域不变。,成员变量列表: fill : 组件大小超出显示它的区域时,组件如何填充此单元,共有4可选值。缺省值为:GridBagConstraints.NONE,表示组件以最小尺寸显示;HORIZONTAL;VERTICAL;BOTH。 anchor : 如组件没有填充全部区域,指定组件放置在单元中的位置,共有9个可选值。缺省值为:GridBagConstraints.CENTER fill和anchor参数是静态变量。,GridBagConstraints 类_2,Null(空布局管理器),在这种布局管理器下,可任意安排组件的大小和位置。但当窗口大小改变时或跨平台时,设计好的界面会改变。 无布局管理器的用法: - 设置容器空布局管理器,setLayout(null) - 向容器中添加组件 - 调用组件的setBounds()方法指定组件放 置位置 component.setBounds(top,left,width,height);,学生信息编辑器,事件处理机制,什么是事件? 对对象所做的一组动作称为事件。 在GUI程序运行中,通过鼠标、键盘与 GUI 界面直接或间接交互都会生成事件。 如:按下一个按钮、通过键盘输入一个字符、选择列表框中的一项、点击一下鼠标等。当事件发生后,系统会通知我们去处理这些事件。对这些事件做出相应处理的程序,称为事件处理器。 事件处理机制中,涉及到三个对象:事件本身、事件的来源和事件处理器,事件,事件是事件类的一个对象,事件类的根类是java.util.EventObject。通常所用到的事件类在java.awt.event包中。 事件对象的属性包含了与事件相关信息。如可以使用EventObject类中的getSource()方法获得事件源。,事件体系结构,AWT 事件类型_1,AWT 事件类型_2,事件源,事件源是产生事件的对象。 一个事件源可能会生成不同类型的事件。,事件监听器,事件监听器是在一个事件发生时被通知的对象,也称为事件处理器。 监听器对象属于一个监听器类的实例,这个类实现了一个特殊的接口,称为“监听者接口”。,委托事件处理机制,事件源对象,监听者对象,事件源类,监听者类,创建对象,创建对象,委托事件处理关系,触发事件,进行中,接收事件对象,事件传递,处理事件,注册事件,事件源提供了一组方法,用于为事件注册一个或多个监听器对象,并向其发送事件对象。 每种不同的事件都有其自己的注册方法。一般形式为: public void addListener (TypeListener e) public void removeListener (TypeListener e) 事件源将在发生事件时向所有注册的监听器对象发送事件对象。 监听器对象根据事件对象中的信息来确定它们对事件的响应。,总结处理事件的具体方法,确认触发的事件,取得事件类(如ActionEvent)的名字,并删掉其中的“Event”字样,加上“Listener”字样。这就是我们类需要实现的事件监听类接口。 实现上面的接口,针对想要捕获的事件编写方法代码。如想要捕获鼠标的移动,就要为MouseMotionListener接口中的mouseMoved()方法编写代码(当然还要实现其他一些方法)。 为事件处理器(监听器接口)创建一个对象,让自己的组件完成对它的注册,方法是在接收器的名字里假如一个前缀“add”,如“addMouseMotionListener()”。,按钮单击事件示例,public class MyEventTest extends JPanel JButton myButton = new JButton(“蓝色“); . . . / 创建面板或其他 GUI 组件 MyListener myAction = new MyListener(); MyButton.addActionListener(myAction); private class MyListener implements ActionListener public MyListener() . . . / 初始化 public void actionPerformed(ActionEvent event) . . ./需要为事件进行的操作 ,实现了ActionListener接口的监听器,实现了actionPerformed方法,以便根据参数 ActionEvent 对象的信息对事件做出响应,为按钮事件 注册监听器,内部类,内部类为非静态的嵌套类。 在类中定义的类称为内部类,而该类称为外部类。 内部类可以访问其外部类的所有变量和方法,并能够以和外部类的其他非静态成员相同的方式直接引用它们。 内部类完全在其包围类的范围之内。,Inner Class的对象关系,外部类的对象,内部类的对象,适配器类,为了使事件处理变得简单,Java 为具有多个方法的监听器接口提供适配器类。适配器类实现并提供了一个事件监听器接口中的所有的方法,但这些方法都是空方法。,private class MyMouseAdapter extends MouseAdapter private Color bgColor; public MyMouseAdapter (Color c) bgColor = c; public void mouseClicked(MouseEvent mevent) setBackground(bgColor); repaint(); ,任何 GUI 对象的获得或失去焦点都被视为焦点事件,并且事件源必须向事件监听器通知事件对象已失去或已获得焦点。 焦点监听器需要实现两个方法:focusGained 和 focusLost。 要进行错误检查或数据校验时,对焦点的捕捉就显得尤其重要。,焦点事件,焦点事件示例,public void focusLost(FocusEvent event) if(event.getComponent() = ccField ,实现了当捕捉到失去 焦点事件时如何响应,检验失去焦点的组件中的文本格式是否正确,如果格式不正确,将焦点移回到该组件,窗口事件,当一个窗口被激活、禁止、关闭、正在关闭、最小化、恢复、打开时将生成窗口事件。 需要实现的方法如下: windowActivated、 windowClosed windowClosing、 windowDeactivated windowDeiconified、windowIconified windowOpened,窗口事件示例,class MyFrame extends JFrame boolean w; public MyFrame() w=false; setTitle(“测试适配器类“); setSize(300, 200); JPanel panel = new JPanel(); getContentPane().add(panel); addWindowListener(new MyWindowAdapter(); private class MyWindowAdapter extends WindowAdapter public void windowClosing(WindowEvent wevent) if(w) dispose(); else System.exit(0); ,实现了windowClosing方法,以响应窗口关闭时的事件,import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MyAdapterDemo public static void main(String args) MyFrame frm = new MyFrame(); frm.show(); ,在按下或释放键盘上的一个键时,将生成键盘事件。 keyEvent 类包含用来表示按下或点击的键的常量。 生成 keyEvent 时将调用实现keyListener接口的对象。 如果程序需要处理特殊的键,如方向键,需要通过调用keyPressed( ) 方法来处理。,键盘事件,public void keypressed(KeyEvent k) int keyCode = k.getKeyCode(); if ( keyCode = KeyEvent.VK_RIGHT & k.isShiftDown() . . . ,检测用户是否按下了Shift+右箭头键,键盘事件示例,class MyPanel extends JApplet public MyPanel() JPanel panelObj=new Jpanel(); JTextField tField = new JTextField(20); getContentPane(). add(panelObj); panelObj.add(tField); MyKeyAdapter bAction = new MyKeyAdapter(); tField.addKeyListener(bAction); private class MyKeyAdapter extends KeyAdapter public void keyPressed(KeyEvent kevent) setBackground(Color.blue); repaint(); public void keyReleased(KeyEvent kevent) setBackground(Color.red); repaint(); public void keyTyped(KeyEvent kevent) if (kevent.getKeyChar() = x) System.exit(0); ,按下键时背景变为兰色,释放键时背景变为红色,输入字符x时退出程序,鼠标事件,任何时候移动、单击、按下或释放鼠标,都会生成鼠标事件。 鼠标事件对应两种监听器:MouseListener 和 MouseMotionListener。 需要实现的方法如下: mouseClicked、 mouseEntered、mouseExited mousePressed、mouseReleased mouseDragged、mouseMoved,public void mouseClicked(MouseEvent m) int x = m.getX(); int y = m.getY(); int clickCount = m.getClickCount(); if(clickCount = 2) Graphics g = getGraphics(); g.drawString(“鼠标双击!“, x, y); g.dispose(); ,鼠标事件示例,获得点击鼠标时鼠标指针的x及y坐标,确定单击和双击,多个监听器,所有AWT事件源均支持监听器的多点传送模型。 可以将同一事件发送到多个监听器对象。 需要向一个事件源添加多个监听器,以便使所有注册的监听器都能够对事件源生成的事件作出响应。,按钮,可以使用以下任一构造函数来创建按钮: JButton() : 新建一个空的按钮 JButton(String text) : 新建一个包含给定字符串的按钮 JButton(String text,Icon icon) : 新建一个包含给定字符串和图标的按钮,按钮是任何GUI都不可或缺的组件 用来捕捉用户操作的最为简便的方式,. . . JButton btnOk=new JButton(“确定!“); JButton btnCancel=new JButton(“取消!“); add(btnOk); add(btnCancel); . . .,ImageIcon类,图标是固定大小的图像,通常很小,用于点缀组件,可通过ImageIcon类获得。如: Icon iconObj=new ImageIcon(“temp.jpg“); 如图标与程序文件不再同一目录,则需指名文件所在目录。如: F:tempn4ico_default.gif,class IconTest extends PanelTest JButton buttonObj; ImageIcon iconObj; public IconTest() iconObj=newImageIcon(“temp.jpg“); buttonObj=new JButton(iconObj); panelObj.add(buttonObj); ,标签,可以通过以下任一构造函数来创建: JLabel( ) : 新建一个空标签 JLabel(String labeltext): 新建一个包含给定文本的标签 JLabel(Icon image): 使用指定图像新建一个标签 JLabel(String labeltext, int alignment) :新建一个包含给定对齐方式的标签,对齐方式可以为 Label.LEFT、Label.RIGHT 或 Label.CENTER JLabel(String labeltext,Icon icon, int alignment),通常用来指明项目的用途 标签不可以被用户编辑,. . . labelObj1=new JLabel(“左对齐“,JLabel.RIGHT); labelObj2=new JLabel(“右对齐“,JLabel.RIGHT); add(labelObj1); add(labelObj2); . . .,文本框,可以通过以下任一构造函数来创建: JTextField() : 新建一个文本域 JTextField(int columns) : 新建一个包含给定列数的文本域 JTextField(String s) : 新建一个包含给定字符串的文本域 JTextField(String s, int columns) : 新建一个包含给定字符串和列数的文本域,一种用来输入文本的GUI组件 只能接受一行输入,. . . textObj=new JTextField(“默认值“,15); add(textObj); . . .,文本区_1,可以通过以下构造函数来创建: JTextArea( ) : 新建一个TextArea JTextArea(int rows, int cols) : 新建一个包含给定行数和列数的TextArea JTextArea(String text, int rows, int cols) : 新建一个包含给定字符串、行数和列数的TextArea,要接受输入多行文本时使用 可以包括滚动条,. . . JTextArea txtComment=new JTextArea(“默认值”,5,15); add(txtComment); . . .,文本区_2,JTextArea有如下属性: lineWrap、rows、lineCount、tabSize等。 可以使用以下方法完成文本区的插入、追加和替换。 public void insert(Sting s,int pos) public void append(Sting s) public void replaceRange(Sting s,int start,int end),. . . textObj.insert(“数据“,2); textObj.append(“=12345“); . . .,滚动面板,可以通过以下构造函数来创建: JScrollPane(Component view, int vsbPolicy, int hsbPolicy): 添加指定组件到新的滚动面板容器上,可指定垂直和水平滚动条。,作为滑块使用 用来实现窗口的滚动,. . . ScrollPane ScrollPaneObj= New JScrollPane(textObj, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); panelObj.add(ScrollPaneObj); . . .,复选框,可以通过以下构造函数来创建: JCheckBox(String text,Icon icon,boolean selected): 新建一个带图标和标签的复选框 复选框中常用的方法: setSelected(boolean state) isSelected(),. . . Icon iObj=new ImageIcon(“c:1.gif“); checkBoxObj1=new JCheckBox(“复选框“,iOBJ,false); panelObj.add(checkBoxObj1); . . .,单选按钮,可以通过以下构造函数来创建: JRadioButton(String text,boolean selected): 新建一个标签的单选按钮。,. . . rButtonObj1=new JRadioButton(“单选按钮1“,true); panelObj.add(radioButtonObj1); . . . ButtonGroup buttonGroupObj=new ButtonGroup(); buttonGroupObj.add(rButtonObj1); buttonGroupObj.add(rButtonObj2);,建立约束,文本组合框,可以通过以下构造函数来创建: JComboBox(Object items): 新建一个下拉列表框 文本组合框常用属性: selectedIndex、selectedItem等。 文本组合框常用方法: addItem(Object item) removeItem(Object anObject) removeAllItem(),. . . String comboStr=“文本列表框“,“文本列表框1“,“文本列表框2“,“文本列表框3“,; comboBoxObj=new JComboBox(comboStr); comboBoxObj.addItem(“文本列表框8”); comboBoxObj.removeItem(“文本列表框5“); panelObj.add(comboBoxObj); . . .,文本列表框,可以通过以下构造函数来创建: JList(Object listData ) : 新建一个含指定元素的列表框,. . . String listStr=“文本列表框“,“文本列表框1“,“文本列表框2“,“文本列表框3“; listObj=new JList(listStr); panelObj.add(listObj); . . .,表格,可以通过以下构造函数来创建: JTable(Object rowData, Object cNames): 新建一

温馨提示

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

评论

0/150

提交评论