Java语言程序设计-第11章_第1页
Java语言程序设计-第11章_第2页
Java语言程序设计-第11章_第3页
Java语言程序设计-第11章_第4页
Java语言程序设计-第11章_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

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

文档简介

1、第十一章,图形用户界面,一、Java的图形用户界面 awt包,AWT包提供的类大致上可以归纳成4大类: 图形界面组件,如:窗口、按钮、菜单等。 2D图形绘制组件,如:直线、圆形。 布局对象:用来安排图形界面组件的位置。 事件处理对象,用来处理图形界面组件所触发的事件。,awt包组件,屏幕坐标位置,缺省状态下原点的位置为屏幕左上角位置(0,0)。x坐标是从左向右移动的水平距离,y坐标是从上向下移动的垂直距离 。,(0,0),X坐标轴,Y坐标轴,建立窗口Frame类的操作,创建窗口的基本和必要操作包括以下方面: (1)可以设置窗口的大小。 (2)给窗口一个标题。 (3)在屏幕的某个位置放置窗口。

2、(4)显示窗口。 (5)关闭窗口。,Java实例建立窗口,import java.awt.*; class Window1 static Frame fra=new Frame(这是一个窗口程序); /创建一个窗口对象fra并设置窗口标题为这是一个窗口程序 public static void main(String args) fra.setBounds(0,0,300,200); /继承Component类的方法,设置窗口大小并将窗口放置在屏幕的某个位置 fra.setResizable(false); /设置窗口尺寸不可以改 fra.setState(fra.NORMAL); /设置窗口

3、为标准状态 fra.show(); /继承Window类的show()方法,在屏幕上显示窗口 ,Frame类的方法,标签组件,标签是用来在窗口中显示文字的组件。它是由java.awt类库中的Label类来创建。通过getText()方法获得标签所显示的文字;通过setText()方法可以改变标签内的文字。,Label类的方法,Java实例建立标签,import java.awt.*; class Label1 public static void main(String args) Frame fra=new Frame(这是创建标签的程序); Label bl=new Label(); /创

4、建一个空标签 fra.setBounds(0,0,300,200); bl.setText(欢迎使用Java语言); /为标签添加文字 bl.setAlignment(Label.CENTER); bl.setBackground(Color.blue); bl.setForeground(Color.red); fra.add(bl); fra.setVisible(true); ,按钮组件,按钮提供用户快速启动某一动作的方法。通常用户在使用鼠标或键盘按下按钮时,计算机会产生一系列的动作,完成一定的操作。,Button类的方法,Java实例建立按钮,import java.awt.*; cl

5、ass But2 public static void main(String args) Frame fra=new Frame(创建按钮程序); Button but=new Button(push me); fra.setBounds(0,0,300,200); fra.setLayout(null); /关闭页面设置 but.setBounds(50,50,100,50); /设置按钮的大小 fra.add(but); fra.setVisible(true); ,文本框,文本框是用来在窗口中显示文字的矩形框,这些文字可以被用户编辑。文本框可以用来输入文字、编辑文字、并显示这些的文字内

6、容。,TextField类的方法,Java实例建立文本框,import java.awt.*; class Text public static void main(String args) Frame fra=new Frame(创建文本框程序); TextField txt1=new TextField(50); TextField txt2=new TextField(50); fra.setBounds(0,0,300,200); fra.setLayout(null); txt1.setBounds(50,50,130,20); txt2.setBounds(50,70,130,20

7、); fra.add(txt1); fra.add(txt2); fra.setVisible(true); ,字体,在java中,各种文字都是以图形的方式输出,所以可以通过使用Font类和FontMetrics类的方法设置字型、字体大小等,输出通过Graphics类提供的输出方法输出文字内容。,Font类的方法,FontMetrics类的方法,Graphics类的方法,使用Graphics类设置字体 的方法: setFont(Font myfont); 使用Graphics类中定义的方法在屏幕上输出设置好字体的文字内容 。下面是输出字符或字符串内容的Graphics类方法,Java实例设置字

8、体,import java.awt.*; public class Fonts extends Frame public Fonts() super( 设置字体程序 ); setSize( 420, 125 ); show(); public void paint( Graphics g ) g.setFont(new Font(Serif,Font.BOLD,12); g.drawString(Serif 12 point bold.,20,50); g.setFont(new Font(Monospaced,Font.ITALIC,24); g.drawString(Monospaced

9、24 point italic.,20,70); g.setFont(new Font(SansSerif,Font.PLAIN,14); g.drawString(SansSerif 14 point plain., 20, 90 ); g.setColor(Color.red); g.setFont( new Font(Serif,Font.BOLD+Font.ITALIC,18); g.drawString(g.getFont().getName()+ +g.getFont().getSize()+ point bold italic.,20,110); public static vo

10、id main( String args ) Fonts app = new Fonts(); ,二、Java语言中的事件处理,当用户在图形用户界面中对特定图形界面元素单击、双击鼠标或单击键盘等操作时,通常会引发一个系统预先定义好的事件,用户只需编写程序代码对特定事件发生时做出何种响应即可。,概念,在对事件进行处理时,它是采用一种委托事件模型的形式。它的含义是将事件的处理委托给独立的对象,这样使得用户界面与程序逻辑分开,整个“委托事件模型”由产生事件的对象、事件对象和监听者对象之间的关系所组成。 产生事件的对象会在事件产生时,将与该事件相关的信息封装在一个称之为“事件对象”的对象中,并将该对象

11、传递给监听者对象,监听者对象根据该事件对象内的信息决定适当的处理方式。监听者对象要受到事件发生的通知,必须在程序中向产生事件的对象注册,当事件产生时,产生事件的对象就会主动通知监听者对象,监听者对象根据产生该事件的对象来决定处理事件的方法。监听者对象就是用来处理事件的对象,它等候事件的发生,并在事件发生时接收到通知。,事件处理,(1)图形用户界面中每一个可能产生事件的组件为事件源,假如一个Button对象引发ActionEvent类代表的事件ACTION_PERFORMED; (2)如果要监听事件源上发生的事件,就要把能够处理该事件的监听者注册给事件源,如将实现了ActionListener接

12、口的对象注册给Button对象。具体注册方法是调用事件源的相关方法,如调用Button类的addActionListener()方法,并以监听者对象作为实际参数。 (3)监听者具有监听和处理事件的能力,它实现了接口的所有抽象方法并写出具体的方法体。如Button对象实现ActionListener接口的抽象方法actionPerformed()。 (4)当事件发生时,事件源将事件作为实际参数传递给监听者中负责处理这类事件的方法。这个方法被自动调用执行,事件得到处理。,事件监听者种类,(1)ActionListener:处理动作事件,例如单击按钮。 (2)ComponetListener:处理组

13、件被隐藏、移动、尺寸移动或显示的事件。 (3)ContainerListener:处理在容器中加入组件或删除组件的事件。 (4)FocusListener:处理组件获得或失去焦点的事件。 (5)KeyListener:监听键盘事件。 (6)MouseListener:监听鼠标的单击、进入组件、退出组件或者按下鼠标的事件。 (7)MouseMotionListener:监听鼠标拖动或者移动的事件。 (8)TextListener:监听文本值改变的事件。 (9)WindowListener:处理窗口激活、失去活动窗口、最小化、不最小化、打开、关闭或者退出的事件。,事件的种类,(1)ActionEv

14、ent:处理按钮、列表双击、单击菜单项目。 (2)ComponentEvent:处理组件被隐藏、移动、尺寸调整或者变为不可见的事件。 (3)FocusEvent:处理组件获得或者失去焦点事件。 (4)InputEvent:处理复选框和列表项单击、控件的选择和可选菜单项的选择的事件。 (5)KeyEvent:处理键盘的输入。 (6)MouseEvent:处理鼠标拖动、移动、单击、按下、释放或者进入、退出组件的事件。 (7)TextEvent:处理文本区域或者文本区域的值的改动。 (8)WindowEvent:处理窗口激活、失去活动窗口、最小化、打开、关闭或者退出的事件。,事件类的继承关系,事件及

15、其响应,每一个事件类都有一个“唯一”的事件处理方法接口, 如处理鼠标事件“MouseEvent”类的对应接口为“MouseListener”接口, 处理按钮“ActionEvent”事件类的对应接口为“ActionListener”接口; 监听者向事件源注册,使监听者能够监听到并处理事件源产生的事件如ActionEvent事件,实现其接口ActionListener。 如:button事件,注册监听者为handler,则: button. addActionListener(handler); class handler implements ActionListener public voi

16、d actionPerformed(ActionEvent e) ,事件监听者接口及实现方法,事件监听者接口及实现方法(续),Java实例实现按钮事件,import java.awt.*; import java.awt.event.*; import javax.swing.ImageIcon; class Event1 extends Frame implements ActionListener Button but1,but2; Label lbl1; public Event1() super(Event Example); addWindowListener(new WindowA

17、dapter() public void windowClosing( WindowEvent e ) System.exit( 0 ); ); initialize(); ,Java实例(续),public void initialize() setSize(300,200); this.setLayout(null); but1=new Button(but1); but1.setBounds(10,40,70,25); but1.addActionListener(this); add(but1); but2=new Button(but1); but2.setBounds(105,40

18、,70,25); but2.addActionListener(this); add(but2); lbl1=new Label(0,Label.CENTER); lbl1.setBounds(75,70,70,25);,Java实例(续),lbl1.setForeground(Color.blue); add(lbl1); setVisible(true); public void actionPerformed(ActionEvent e) if(e.getSource()=but1) int value=(new Integer(lbl1.getText().intValue(); lb

19、l1.setText(String.valueOf(value+1); else if(e.getSource()=but2) lbl1.setText(0); public static void main(String args) new Event1(); ,适配器,如果使用监听者接口,这要求我们必须实现所有的接口定义方法,但是大多数情况下可能只是需要使用其中的一个或几个方法。为了实现接口的全部方法,在AWT中提供了多个相应的适配器类,这些适配器类实现了响应接口的所有方法的空操作。当我们在使用时,只需要扩展适配器类并且覆盖我们需要实现的方法即可,而无需实现原来接口的所有方法。,Java实

20、例Adapter类,import java.awt.*; import java.awt.event.*; class Label1 extends Frame public Label1() super(Event Example); addWindowListener(new WindowAdapter() public void windowClosing( WindowEvent e ) System.exit( 0 ); ); initialize(); public void initialize() this.setLayout(null); Label bl=new Label

21、();,Java实例(续),setSize(300,200); bl.setText(“欢迎使用Java语言”); bl.setBounds(50,50,150,20); bl.setAlignment(Label.CENTER); bl.setBackground(Color.blue); bl.setForeground(Color.red); add(bl); setVisible(true); public static void main(String args) new Label1(); ,三、Swing包,在Java早期版本中,窗体、按钮等组件被列入java.awt包中。但是A

22、WT包隐藏着一个很严重的问题,虽然它是遵循着java“一次编译,随处运用”的理念,然而它在图形组件的绘制方法却不能做到随处运用,因此用AWT包编写出来的程序有可能在不同的操作平台上显示不同的效果,在1998年推出JDK1.2版本时,javax.swing包被列入java的基础类库中。在这里给出一个AWT与swing包的比较: (1)新版的swing包可能与旧版不兼容。 (2)swing包是建立在AWT包的基础上,所以完全舍弃AWT包也不太可能。 (3)AWT包的运行速度比swing快。,JFrame类,JFrame是提供给java应用程序用来放置图形用户界面的一个容器。Swing包中的JFra

23、me类与我们讲解的AWT包中的Frame类都与创建窗口有关,JFrame类是从Frame类派生的。,JFrame类方法,创建JFrame窗口,(1)创建的JFrame窗口是不可见的,要使得可见,需要使用show()方法或setVisible(Boolean b)方法,其中setVisible中的参数b=true。 (2)使用setSize方法设置窗口大小。 (3)向JFrame中添加组件时,必须先取得ContentPane,然后再使用add()方法把组件加入到ContentPane中,这与AWT包中的Frame直接使用add()方法添加组件不同。,Java实例JFrame窗口,import j

24、ava.awt.*; import javax.swing.*; import java.awt.event.*; public class JWindow1 extends JFrame public JWindow1() super( “显示窗口程序” ); setSize(300,200); show(); public static void main(String args) JWindow1 app = new JWindow1(); ,WindowEvent窗口事件,Java实例窗口事件,import java.awt.*; import javax.swing.*; impor

25、t java.awt.event.*; public class JWindow2 extends JFrame JFrame ff1=new JFrame(); JFrame ff2=new JFrame(); public JWindow2() ff1.setSize(300,200); ff1.setTitle(显示窗口1); ff1.setVisible(true); ff1.addWindowListener(new Win_affair(); ff2.setSize(300,200); ff2.setTitle(显示窗口2); ff2.setVisible(false); ff2.

26、addWindowListener(new Win_affair(); public static void main(String args) new JWindow2(); ,Java实例(续),class Win_affair extends WindowAdapter public void windowOpened(WindowEvent e) public void windowActivated(WindowEvent e) public void windowDeactivated(WindowEvent e) if(e.getSource()=ff1) ff1.setVisi

27、ble(false); ff2.setVisible(true); else ff1.setVisible(true); ff2.setVisible(false); public void windowClosing(WindowEvent e) System.exit(0); ,JLabel类,swing包中的Jlabel类与前面讲解了AWT包中的Label类,它们有一个共同特点就是只能显示文字而不能够对文字进行编辑,是静态组件。但JLabel组件允许添加图像,而且当鼠标的光标停留在标签位置时,会显示一段文字提示。这些功能都使得JLabel类的功能较Label类更强。,JButton类,在

28、Swing中,所有按钮都是由AbstractButton类派生的,这与AWT由Button类派生是不同的,而且由AbstractButton类派生出两个组件:JButton组件和JToggleButton组件。其中JButton组件是Swing按钮,而JToggleButton组件是单选按钮和复选框的基类。 Swing中的按钮的功能较AWT中的按钮功能更加强大,包括有给按钮添加图像、使用快捷键以及设置按钮的对齐方式,还可以将多个图像分配给一个按钮以处理鼠标在按钮上的停留等。,Java实例标签和按钮,import javax.swing.*; import java.awt.*; import

29、java.awt.event.*; public class Lal_but extends JFrame private JLabel label1,label2; private JButton but1,but2; public Lal_but() super(标签和按钮测试窗口); Container c=getContentPane(); c.setLayout(new FlowLayout(100,100,10); Icon icon=new ImageIcon(125.gif); label1=new JLabel(标签中有文字和图像,icon,SwingConstants.CE

30、NTER); label1.setToolTipText(这是标签 );,Java实例(续),label1.setHorizontalTextPosition(SwingConstants.CENTER); label1.setVerticalTextPosition(SwingConstants.BOTTOM ); c.add(label1); Icon icon1=new ImageIcon(05.gif); Icon icon2=new ImageIcon(06.gif); Icon icon3=new ImageIcon(10.gif); but1=new JButton(按钮1);

31、c.add(but1); but2=new JButton(按钮2,icon2); but2.setRolloverIcon(icon3); c.add(but2); but1.addActionListener(new listener(); but2.addActionListener(new listener(); setSize(360,200 ); show(); ,Java实例(续),public static void main(String args) Lal_but app = new Lal_but(); app.addWindowListener( new WindowA

32、dapter() public void windowClosing(WindowEvent e) System.exit( 0 ); ); private class listener implements ActionListener public void actionPerformed( ActionEvent e ) JOptionPane.showMessageDialog( null,You pressed:+e.getActionCommand(); ,单选按钮和复选框,单选按钮是由JRadioButton类派生,它是指一组按钮中,用户只能选择其中一个按钮,当用户选上时,此按钮

33、的状态为“选中或ON”,其余的都是“未选中或OFF”状态。在java中,ButtonGroup类为JRadioButton类等提供多选一功能。 复选框由JCheckBox类派生,它提供“选中/未选中”或“ON/OFF”两种状态,当用户单击复选框时改变复选框原来设置的状态;,单选按钮和复选框引发事件,复选框和单选按钮引发的事件是由ItemEvent类派生的,而此类包含了一个ITEM_STATE_CHANGE事件。ItemEvent类的主要方法有: Object getItem()方法:告知用户是哪个选择项的选中状态发生变化。 int getStateChange()方法:可以使用户知道到底是选中

34、哪个选项。 当用户选择某个单选按钮或复选框时,就会引发ItemEvent类派生事件,当事件发生时,监听者会引用ItemListener类中的itemStateChange(ItemEvent e)方法响应事件源对象状态的改变。,Java实例(单选按钮和复选框),import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; class ListCourse extends JList protected static String courseHour= Message

35、System 100, Communication Serve 80, java language 60, c language 60, program design 80, Database principle 80, Data structure 100, microcomputer principle 60; public ListCourse() super(courseHour); setAlignmentX(Component.CENTER_ALIGNMENT); setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELEC

36、TION); class CourseSelect1 extends JFrame implements ActionListener private JLabel label; private JButton button; private String str= All course hour count is ;,Java实例(续),protected ListModel listModel; protected ListSelectionModel listSelect; protected int count; protected ListCourse list; public Co

37、urseSelect1() super(students select course message); Container c =getContentPane(); c.setLayout( new FlowLayout(); Icon icon=new ImageIcon(zzdply.gif); label=new JLabel(course hour ,icon,SwingConstants.LEFT); c.add(label); list=new ListCourse(); c.add( new JScrollPane( list ); button=new JButton(cou

38、nt); c.add(button); button.addActionListener(this); listSelect=list.getSelectionModel(); listModel=list.getModel(); setSize(230,300); show(); ,Java实例(续),public void actionPerformed(ActionEvent e) if(e.getSource()=button) countall(); public void countall() String str=,s; int total = 0; int first = li

39、stSelect.getMinSelectionIndex(); if ( first -1 ) int last = listSelect.getMaxSelectionIndex(); for (int i=first; i 200) str+=nThe study mission is very hardn; JOptionPane.showMessageDialog(null,str+n+ Total :+total,count course hour,JOptionPane.WARNING_MESSAGE); ,Java实例(续),else JOptionPane.showMessa

40、geDialog(null,str+n+ Total :+total,count course hour,JOptionPane.INFORMATION_MESSAGE ); protected float amount(String s) String a = s.substring(s.lastIndexOf( )+1); return Integer.parseInt(a); public static void main(String args) CourseSelect1 course=new CourseSelect1(); course.addWindowListener(new

41、 WindowAdapter() public void windowClosing( WindowEvent e ) System.exit( 0 ); ); ,下拉列表框,下拉列表框是由JComboBox类派生,其特点是将所有选项折叠收藏起来,只显示最前面的那个或被用户选中的某一个。,JComboBox类方法,Java实例下拉列表框,import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Combo extends JFrame private JComboBox images; priv

42、ate JLabel label; private String names=狗.gif,猴.gif,虎.gif,马.gif,鼠.gif,兔.gif; private Icon icons=new ImageIcon(names0), new ImageIcon(names1),new ImageIcon(names2), new ImageIcon(names3),new ImageIcon(names4), new ImageIcon(names5),;,Java实例(续),public Combo() super(下拉列表框显示图形文件 ); Container c=getContent

43、Pane(); c.setLayout(new FlowLayout(); images=new JComboBox(names); images.setMaximumRowCount(3); images.addItemListener( new ItemListener() public void itemStateChanged(ItemEvent e) label.setIcon(iconsimages.getSelectedIndex(); ); c.add(images); label=new JLabel(icons0); c.add(label);,Java实例(续),setSize(450,380); show(); public static void main(String args) Combo app=new Combo(); app.addWindowListener( new WindowAdapter() public void windowClosing(WindowEvent e) System.exit( 0 ); ); ,列表框,列表框是由JList类派生,它与上面讲解的下拉列表框类似,只是下拉列表框一次只能选择一项,而列表框可以选择多项,选择多项的

温馨提示

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

评论

0/150

提交评论