Java面向对象程序设计第10章_图形界面1_第1页
Java面向对象程序设计第10章_图形界面1_第2页
Java面向对象程序设计第10章_图形界面1_第3页
Java面向对象程序设计第10章_图形界面1_第4页
Java面向对象程序设计第10章_图形界面1_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

1、Java面向对象程序设计面向对象程序设计 第第10章章Java Swing图形用户界面 主讲:王美丽主讲:王美丽办公室:信息学院403 Email: meili_主要内容主要内容AWT与与SwingSwing常用的控件常用的控件窗口事件、鼠标事件和键盘事件窗口事件、鼠标事件和键盘事件难点难点窗口事件、鼠标事件和键盘事件窗口事件、鼠标事件和键盘事件10.1 10.1 AWTAWTAWTAWT:Abstract Window ToolkitAbstract Window ToolkitJavaJava抽象窗口工具包抽象窗口工具包提供了许多用来设计提供了许多用来设计GUIGUI的组件类。的组件类。

2、Java的的java.awt特点:特点:提供了一套与本地图形界面进行交互的接口。提供了一套与本地图形界面进行交互的接口。操作系统所提供的图形库(平台无关性差)由于AWT 是依靠本地方法来实现其功能的,我们通常把AWT控件称为重量级控件重量级控件。10.1 10.1 Java SwingJava Swing概述概述 Swing:Swing:利用利用AWTAWT下层的图形、颜色、字体、工下层的图形、颜色、字体、工具包及布局管理器等构件设计具包及布局管理器等构件设计; ;使用使用“JavaJava基类(基类(JFCJFC)”(Java Java Foundation ClassesFoundatio

3、n Classes,是用于可发跨平台,是用于可发跨平台GUIGUI组件的组件的JavaJava类库)从根本上代替了一些陈旧类库)从根本上代替了一些陈旧的东西。的东西。SwingSwingSwing Swing 是在是在AWTAWT的基础上构建的一套新的图形界面系统,的基础上构建的一套新的图形界面系统,它提供了它提供了AWT AWT 所能够提供的所有功能,并且用纯粹的所能够提供的所有功能,并且用纯粹的JavaJava代码对代码对AWT AWT 的功能进行了大幅度的扩充。的功能进行了大幅度的扩充。由于由于 Swing Swing 控件是用控件是用100%100%的的JavaJava代码来实现的,因

4、代码来实现的,因此在一个平台上可以在其他平台上使用。此在一个平台上可以在其他平台上使用。由于在Swing 中没有使用本地方法来实现图形功能,我们通常把Swing控件称为轻量级控件。 AWTAWT与与SwingSwing的区别与联系的区别与联系AWT AWT 是基于本地方法,其运行速度比较快;是基于本地方法,其运行速度比较快;SwingSwing是基于是基于AWT AWT 程序,其运行速度比较慢。程序,其运行速度比较慢。联系:联系:SwingSwing组件的事件机制和布局组件的事件机制和布局, ,就是直接延用的就是直接延用的AWTAWT组件的。组件的。结论:如果做一个applet或者嵌入式开发,

5、而且不需要过多的部件,可以使用,这样速度会快些;如果做一个独立application,可以使用swing,这样会漂亮一点。Swing的关键技术在于的关键技术在于AWT,所以必须熟悉,所以必须熟悉AWT技术。技术。Java SwingJava Swing类层次图类层次图 组件、容器、布局组件、容器、布局 SwingSwing常用控件常用控件组件类名称功能JButton按钮用来进行点击触发事件,实现具体操作JLabel标签放置提示性的图片或文字JTextField文本域支持单行文本输入JTextArea文本区支持多行文本输入JRadioButton单选框支持单项选择JCheckbox复选框支持多项

6、选择JList列表框列出所有的选项进行选择JComboBox选择框 列出所有的选项进行选择,并且支持自定义选项10.2 10.2 窗口窗口 框架框架 ( (Frame, JFrame) Frame, JFrame) 是是 Java Java 图形用户界面图形用户界面的基础,它就是我们通常所说的窗口,是的基础,它就是我们通常所说的窗口,是 Windows/XWindow Windows/XWindow 应用程序的典型特征。应用程序的典型特征。 Java提供的提供的JFrame类的实例是一个底层容器,即通常所称的窗类的实例是一个底层容器,即通常所称的窗口。其他组件必须被添加到底层容器中,以便借助这

7、个底层容口。其他组件必须被添加到底层容器中,以便借助这个底层容器和操作系统进行信息交互。(器和操作系统进行信息交互。(注意不允许将一个窗口添加到注意不允许将一个窗口添加到另一个容器中另一个容器中) JFrame JFrame类是类是ContainerContainer类的间接子类。当需要一个类的间接子类。当需要一个窗口时,可使用窗口时,可使用JFrameJFrame或其子类创建一个对象。或其子类创建一个对象。 10.2.1 10.2.1 JFrameJFrame常用方法常用方法 JFrame() 创建一个无标题的窗口。创建一个无标题的窗口。JFrame(String s) 创建标题为创建标题为

8、s的窗口。的窗口。public void setBounds(int a,int b,int width,int height 设置窗口的初始位置是设置窗口的初始位置是(a,b),即距屏幕左面即距屏幕左面a个像素、距屏幕上方个像素、距屏幕上方b个像素;窗口的宽是个像素;窗口的宽是width,高是高是height。public void setSize(int width,int height) 设置窗口的设置窗口的大小。大小。10.2.1 10.2.1 JFrameJFrame常用方法常用方法 public void setLocation(int x,int y) 设置窗口的位置,设置窗口的

9、位置,默认位置是默认位置是(0,0)。public void setVisible(boolean b) 设置窗口是否可见,设置窗口是否可见,窗口默认是不可见的。窗口默认是不可见的。public void setResizable(boolean b) 设置窗口是否设置窗口是否可调整大小,默认可调整大小。可调整大小,默认可调整大小。public void dispose() 撤消当前窗口,并释放当前窗撤消当前窗口,并释放当前窗口所使用的资源。口所使用的资源。setTitle(“My first Frame”)10.2.2 10.2.2 菜单条、菜单、菜单项菜单条、菜单、菜单项 1菜单条菜单条J

10、Component类的子类类的子类JMenubar负责创建菜负责创建菜单条,单条,JFrame类有一个将菜单条放置到窗口类有一个将菜单条放置到窗口中的方法中的方法:setJMenuBar(JMenuBar bar);该方该方法将菜单条添加到窗口的顶端法将菜单条添加到窗口的顶端 。10.2.2 10.2.2 菜单条、菜单、菜单项菜单条、菜单、菜单项 2 2菜单菜单:JComponentJComponent类的子类类的子类JMenuJMenu负责创建菜单负责创建菜单, , JMenuJMenu类类的主要方法有以下几种的主要方法有以下几种 JMenu() JMenu() 建立一个空标题的菜单。建立一

11、个空标题的菜单。 JMenu(String s) JMenu(String s) 建立一个指定标题菜单,标题由参数建立一个指定标题菜单,标题由参数s s确确定。定。 public void add(JMenuItem item) public void add(JMenuItem item) 向菜单增加由参数向菜单增加由参数itemitem指定的菜单选项。指定的菜单选项。 public JMenuItem getItem(int n) public JMenuItem getItem(int n) 得到指定索引处的菜得到指定索引处的菜单选项。单选项。 public int getItemCou

12、nt() public int getItemCount() 得到菜单选项的数目。得到菜单选项的数目。10.2.2 10.2.2 菜单条、菜单、菜单项菜单条、菜单、菜单项 3.3.菜单项菜单项 JComponent JComponent类的子类类的子类JMenuItemJMenuItem负责创建菜单项:负责创建菜单项:JMenuItem(String s)JMenuItem(String s) 构造有标题的菜单项。构造有标题的菜单项。JMenuItem(String text, Icon icon)JMenuItem(String text, Icon icon) 构造有标题和图标的构造有标题

13、和图标的菜单项菜单项new JmenuItem(“new JmenuItem(“菜单项菜单项1”1”,new ImageIcon(“a.gif”)new ImageIcon(“a.gif”)/工程文件下面工程文件下面public String getText() public String getText() 得到菜单选项的名字。得到菜单选项的名字。public void setText(String namepublic void setText(String name) ) 设置菜单选项的名字为设置菜单选项的名字为参数参数namename指定的字符串。指定的字符串。public void

14、setAccelerator(KeyStroke keyStroke)public void setAccelerator(KeyStroke keyStroke) 为菜为菜单项设置快捷键。单项设置快捷键。10.2.2 10.2.2 菜单条、菜单、菜单项菜单条、菜单、菜单项 4 4嵌入子菜单嵌入子菜单 JMenu JMenu是是JMenuItemJMenuItem的子类,因此菜单本身也是一个菜的子类,因此菜单本身也是一个菜单项,当把一个菜单看作菜单项添加到某个菜单中时,单项,当把一个菜单看作菜单项添加到某个菜单中时,称这样的菜单为子菜单。称这样的菜单为子菜单。public void add(J

15、MenuItem item) 向菜单增加由参数向菜单增加由参数item指定的菜单选项。指定的菜单选项。10. 3 10. 3 文本框文本框 使用使用JComponentJComponent的子类的子类JTextFieldJTextField创建文本框。创建文本框。特点:用户在文本框中输入单行文本。特点:用户在文本框中输入单行文本。 JTextField() JTextField() 创建文本框,文本框的长度为一个机器创建文本框,文本框的长度为一个机器字符长。字符长。 JTextField(int x) JTextField(int x) 创建文本框,文本框的长度为创建文本框,文本框的长度为x

16、x个个机器字符长。机器字符长。 TextField(String s ) TextField(String s ) 创建文本框,文本框的初始字创建文本框,文本框的初始字符串为符串为s s。10.3.1 10.3.1 JTextFieldJTextField类的主要方法类的主要方法 public void setText(String s) public void setText(String s) 设置文本框中设置文本框中的文本为参数的文本为参数s s指定的文本。指定的文本。 public String getText() public String getText() 获取文本框中的文本。获

17、取文本框中的文本。 public void setEditable(boolean b) public void setEditable(boolean b) 指定文本指定文本框的可编辑性。文本框默认为可编辑的。框的可编辑性。文本框默认为可编辑的。 10.3.1 10.3.1 JTextFieldJTextField类的主要方法类的主要方法 setHorizontalAlignment(int alignment) setHorizontalAlignment(int alignment) 设置文设置文本框中文本的对齐方式,其中本框中文本的对齐方式,其中alignmentalignment的有

18、效值是的有效值是JTextField.LEFTJTextField.LEFT、JTextField.CENTERJTextField.CENTER、JTextField.RIGHT JTextField.RIGHT 。 public void addActionListener(ActionListener) public void addActionListener(ActionListener) 向文本框增加动作监视器(将监视器注册到文本向文本框增加动作监视器(将监视器注册到文本框)。框)。 public void public void removeActionListener(Acti

19、onListener) removeActionListener(ActionListener) 移去文本移去文本框上的动作监视器。框上的动作监视器。10. 4 10. 4 密码框密码框 使用使用JComponentJComponent的子类的子类JPasswordFieldJPasswordField创创建密码框。建密码框。 文本框的密码框是允许用户在密码框中输文本框的密码框是允许用户在密码框中输入单行密码,密码框的默认回显字符是入单行密码,密码框的默认回显字符是* *。 密码框常用方法:密码框常用方法: setEchoChar(char c):setEchoChar(char c):重新设

20、置回显字符。重新设置回显字符。 char getPassword(): char getPassword():返回实际的密码。返回实际的密码。 例题例题10-910-910. 10. 5 5 文本区文本区 JComponentJComponent的子类的子类JTextAreaJTextArea负责创建文本负责创建文本区,用户可以在文本区输入多行的文本。区,用户可以在文本区输入多行的文本。 10.7 布局当把组件添加到容器中时,希望控制组件在容器当把组件添加到容器中时,希望控制组件在容器中的位置,这就需要学习布局设计的知识。中的位置,这就需要学习布局设计的知识。布局管理器:其实就是一个自动的排版

21、机,选定布局管理器:其实就是一个自动的排版机,选定一种布局管理器也就确定了一种控件的排版方式。一种布局管理器也就确定了一种控件的排版方式。使用布局管理器的缺点是控件在屏幕上的确切位使用布局管理器的缺点是控件在屏幕上的确切位置难以确定置难以确定10.7 布局GUIGUI所提供的六种布局管理器:所提供的六种布局管理器:JFlowLayoutJFlowLayout(顺序)(顺序)JGridLayoutJGridLayout(网格)(网格) GridBagLayout GridBagLayout (网格包)(网格包)BorderLayoutBorderLayout(边框)(边框)CardLayoutC

22、ardLayout(卡片)(卡片)BoxLayoutBoxLayout(盒式)(盒式)nullnull布局布局10.7.1 10.7.1 FlowLayoutFlowLayout布局布局 FlowLayoutFlowLayout类创建的对象称做类创建的对象称做FlowLayoutFlowLayout型布局。型布局。JPanelJPanel型容器的默认布局。型容器的默认布局。 FlowLayout FlowLayout类的一个常用构造方法如下:类的一个常用构造方法如下: FlowLayout();FlowLayout(); 该构造方法可以创建一个居中对齐的布局对象。该构造方法可以创建一个居中对齐

23、的布局对象。 例如:例如:FlowLayout flow=new FlowLayout();FlowLayout flow=new FlowLayout();如果一个容器如果一个容器concon使用这个布局对象使用这个布局对象 con.setLayout(flow);con.setLayout(flow); con可以使用可以使用Container类提供的类提供的add方法将组件顺序地添加到方法将组件顺序地添加到容器中容器中 . FlowLayoutFlowLayout类的两个常用方法如下:类的两个常用方法如下: setAlignment(int aligin)setAlignment(int

24、 aligin):重新设置布局的对齐方式重新设置布局的对齐方式setHgap(int hgap)setHgap(int hgap)和和setVgap(int vgap)setVgap(int vgap): :重新设置水平间隙和重新设置水平间隙和垂直间隙。垂直间隙。 10.7.2 10.7.2 BorderLayoutBorderLayout布局布局 BorderLayout BorderLayout 布局是布局是WindowWindow型容器(型容器(JFrameJFrame)的默认布局。)的默认布局。如果一个容器使用这种布局,那么容器空间简单地划分为如果一个容器使用这种布局,那么容器空间简单

25、地划分为东、西、南、北、中五个区域,中间的区域最大。东、西、南、北、中五个区域,中间的区域最大。10.7.3 10.7.3 CardLayout CardLayout 布局布局 使用使用CardLayout CardLayout 的容器可以容纳多个组件,这些组件被的容器可以容纳多个组件,这些组件被层叠放如容器中,最先加入容器的是第一张(在最上面)层叠放如容器中,最先加入容器的是第一张(在最上面), ,依次向下排序。依次向下排序。 如制作Windows 风格的用户向导界面来依次显示一系列面板。10.7.4 10.7.4 GridLayoutGridLayout布局布局 GridLayoutGri

26、dLayout是使用较多的布局编辑器,其基本布局策略是使用较多的布局编辑器,其基本布局策略是把容器划分成若干行乘若干列的网格区域,组件就位是把容器划分成若干行乘若干列的网格区域,组件就位于这些划分出来的小格中。于这些划分出来的小格中。10.7.5 10.7.5 BoxLayoutBoxLayout布局布局 用用BoxLayout类可以创建一个布局对象,称为盒式布局。将组类可以创建一个布局对象,称为盒式布局。将组件排列成一行或者一列。件排列成一行或者一列。 10.7.6 10.7.6 nullnull布局布局 1例如,例如,p是某个容器是某个容器 p.setLayout(null);把把p的布局

27、设置为的布局设置为空布局。空布局。 2向空布局向空布局的容器的容器p p添加一个组件添加一个组件c c需要两个步骤需要两个步骤 首先,容器首先,容器p p使用使用add(c)方法添加组件方法添加组件 然后组件然后组件c c再调用再调用setBounds(int a,int b,int width,int height)方法设置该组件在容器方法设置该组件在容器p p中的位置和本身的大小。中的位置和本身的大小。 按钮与标签按钮与标签 Jbutton Jlabel JLabel j= new JLabel(标签标签, new ImageIcon(1.jpg),0);2010-1-103010. 13

28、 10. 13 Component Component类的常用方法类的常用方法 ComponentComponent类是所有组件的父类。类是所有组件的父类。 组件都是矩形形状组件都是矩形形状, ,组件本身有一个默认的坐标系组件本身有一个默认的坐标系。 10.13.1 10.13.1 组件的颜色组件的颜色 1 1、组件的常用方法、组件的常用方法 public void setBackground(Color c)public void setBackground(Color c) 设置组件的背景色。设置组件的背景色。 public void setForeground(Color c) publ

29、ic void setForeground(Color c) 设置组件的前景色。设置组件的前景色。 public Color getBackground() public Color getBackground() 获取组件的背景色。获取组件的背景色。 public Color getForeground() public Color getForeground() 获取组件的前景色。获取组件的前景色。 2 2、ColorColor类的构造方法类的构造方法 public Color(int red,int green,ing blue) public Color(int red,int gre

30、en,ing blue) ColorColor类在类在java.awtjava.awt包中。包中。 10.13.2 10.13.2 组件的字体组件的字体 1 1、组件的常用方法、组件的常用方法 public void setFont(Font f)public void setFont(Font f) 设置组件上的字体。设置组件上的字体。 public Font getFont() public Font getFont() 获取组件上的字体。获取组件上的字体。 2 2、FontFont类创建的对象称为字体对象。类创建的对象称为字体对象。FontFont类的构造方法是:类的构造方法是: pub

31、lic Font(String name,int style,int size); public Font(String name,int style,int size); FontFont类在类在java.awtjava.awt包中。包中。 3 3、获取计算机上所有可用的字体名称,并存放到字符串数组中获取计算机上所有可用的字体名称,并存放到字符串数组中 GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();GraphicsEnvironment ge=GraphicsEnvironment.getLo

32、calGraphicsEnvironment(); String fontName=ge.getAvailableFontFamilyNames(); String fontName=ge.getAvailableFontFamilyNames();10.13.3 10.13.3 组件的大小与位置组件的大小与位置 public void setSize(int width,int height)public void setSize(int width,int height) 设置组件的大小。设置组件的大小。public void setLocation(int x,int ypublic void setLocation(int x,int y) ) 设置组件在容器中的位置。设置组件在容器中的位置。public Dimension getSize()public Dimension getSize()返回一个返回一个DimensionDimension对象对象, ,该对像含有名字该对像含有名字是是widthwidth

温馨提示

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

评论

0/150

提交评论