版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、9.1 Java 2D图形处理Java 2D API为程序员提供了一个二维图形框架,其功能非常强大,增强了抽象窗口工具包(AWT)的文字、文本和图形功能,程序员通过调用其中的API方法就能实现对图形的反转、缩放和旋转等。第1页,共145页。1. Font类Font类表示Java程序中的字体,该类主要用来实现文本的可视效果。Font对象用来创建一种字体,使用Font类时,首先需要导入java.awt.Font类。Font类的主要构造方法及其含义如表9-1所示。第2页,共145页。第3页,共145页。其中,参数name指定字体的名称,style指定字体的样式,size指定字体的磅数。例如:Font
2、 font1 = new Font(Font.SERIF,Font.BOLD,20);Font font2 = new Font(font1);Font类给出的字体很少,程序员可使用系统支持的其他字体,如“宋体”、“黑体”等,可以使用它们创建Font对象。程序员可使用下述方法调用获取系统中可用的字体名称: GraphicsEnvironment local = GraphicsEnvironment.getLocalGraphicsEnvironment( ); String fonts = local.getAvailableFontFamilyNames( );第4页,共145页。2. C
3、olor类Color类用来封装标准RGB颜色空间中的颜色。按照标准RGB的要求,所有颜色都是由红、绿、蓝三原色按照不同比例构成的,每种原色使用一个int值(0255 )表示。使用Color类时,首先需要导入java.awt.Color类。Color类的主要构造方法及其含义如表9-2所示。Color color1 = new Color(100, 100, 100);Color color2 = new Color(100,100,100,0);第5页,共145页。第6页,共145页。3. Graphics2D类Graphics2D类继承于java.awt.Graphics,是描绘2D图像的类。
4、 在使用Graphics2D类时,需要使用强制类型转换将Graphics类型转换为Graphics2D,如下所示:public void paint( Graphics g) Graphics2D graphics2d = (graphics2D)g;第7页,共145页。4. BasicStroke类在描绘图形时,可以选择笔画的属性,比如改变线条的粗细,使用线条的样式等。BasicStroke类为图形的轮廓定义了一系列的显示属性。通常,可以用一个BasicStroke对象设置一个Graphics2D对象的Stroke属性,这一设置需要使用Graphics2D类中提供的setStroke()方法
5、。使用Stroke时,首先需要导入java.awt.BasicStroke类。BasicStroke类的主要构造方法及其含义如表9-3所示。第8页,共145页。第9页,共145页。第10页,共145页。图9-1 例9-1运行结果第11页,共145页。5. Java2D基本图形java.awt.geom包中定义了一些基本几何图形,包括直线(Line2D)、矩形(Rectangle2D)、圆角矩形(RoundRectangle2D)、椭圆(Ellipse2D)等,也可以描绘文字。典型的基本图形的绘制如例9-2所示。第12页,共145页。第13页,共145页。图9-2 例9-2运行结果第14页,共1
6、45页。 9.2 Swing基础知识Swing为程序员构建图形用户界面提供了一系列的组件,能够向Java应用程序加入丰富的图形化功能和交互性。Swing组件完全由Java语言实现。通过Swing,程序员可以创建外观跨平台或兼容当前平台的图形用户界面。Swing是Java基础类库(Java Foundation Classes,JFC)的一部分。第15页,共145页。1. Swing和AWTAWT的全称是抽象窗口工具集(Abstract Window Toolkit),其中包含用户界面相关的组件。它的类库包括创建Java图形界面程序的所有工具。用户可以利用AWT在容器中创建标签、按钮、复选框、文
7、本框等用户界面元素。 第16页,共145页。总结Swing组件与AWT组件的区别如下:(1) Swing组件的实现不包含任何本地代码,其平台独立性可以使其不受硬件平台的限制;(2) Swing组件比AWT组件拥有更多、更好的功能;(3) Swing库是AWT库的扩展,相比AWT提供的简单的工具,它提供了更多的特性和工具,可以用来实现更复杂的图形用户界面。第17页,共145页。2. Java GUI APIJava GUI API所包含的类可以分为以下三种。(1) 组件类(component class)。 (2) 容器类(container class)。 (3) 辅助类(helper cla
8、ss)。 第18页,共145页。9.3 容器结构及常用容器容器组件的主要作用是容纳其他组件,并按照一定的方式组织排列它们,单个组件是不能直接显示在用户界面的,需要将组件放置在容器中,同一个容器中的所有组件通常同时被显示或同时被隐藏。第19页,共145页。1. 容器的结构容器分为顶层容器和面板,顶层容器用来包含其他非顶层容器和基本组件。第20页,共145页。2. 顶层容器1) JFrame窗体JFrame窗体是java.awt.Frame的子类,是Java图形应用程序的顶层容器,用来存放Swing组件,该容器不能包含在其他的容器之中。GUI的应用程序通常至少使用一个框架窗口。JFrame组件可以
9、用于在Swing程序中创建窗体。第21页,共145页。第22页,共145页。第23页,共145页。第24页,共145页。图9-3 例9-3运行结果第25页,共145页。JFrame可以调用setDefaultCloseOperation(int operation)方法关闭窗体。Java提供了几种方式来关闭窗体,这几种方式在javax.swing.WindowConstants接口中定义,常用的有以下4种:DO_NOTHING_ON_CLOSE:窗体关闭时什么都不做。DISPOSE_ON_CLOSE:移除窗口的默认窗口关闭操作。HIDE_ON_CLOSE:隐藏窗口的默认关闭操作。EXIT_ON
10、_CLOSE:退出应用程序默认窗口关闭操作。第26页,共145页。2) JDialog窗体JDialog窗体是java.awt.Dialog的子类,是Swing组件中的对话框。JDialog窗体与JFrame类似,使用的时候也需要调用getContentPane()方法获取JDialog中的容器,然后在这个容器中添加组件或者设置布局管理器。 第27页,共145页。第28页,共145页。第29页,共145页。第30页,共145页。图9-4 例9-4运行结果第31页,共145页。3. 常用面板1) JPanel面板JPanel是javax.swing.JComponent的子类,是一个轻量级容器。
11、JPanel是一个面板容器,既可以加入到其他的容器中使用,也可以把其他组件(如JButton、JTextArea、JLable等)加入到JPanel中。第32页,共145页。第33页,共145页。第34页,共145页。图9-5 例9-5运行结果第35页,共145页。2) JScrollPane面板在设置界面时,可能会出现一个比较小的容器需要显示一个较大部分内容的情况,这时就可以使用JScrollPane面板。JScrollPane面板是带有滚动条的容器,可以很好地解决上面的问题,但是JScrollPane面板只能放置一个组件,所以如果想要放置多个组件,可以先将组件放置在JPanel容器上,再将
12、JPanel容器放置到JScrollPane面板上。 第36页,共145页。例9-6 JScrollPanelDemo.java:带有滚动条的JScrollPane面板。第37页,共145页。图9-6 例9-6运行结果第38页,共145页。3) 其他面板JTabbedPane:可以同时包含多个组件,但是每次只能显示一个,用户可以在组件之间方便地切换。第39页,共145页。9.4 布 局 管 理基本组件放置到顶级容器或者面板中,组件可能会充满整个框架并且相互重叠,从而无法正常使用。程序员为了能够设计出美观的界面,需要使用布局管理器来控制组件在容器中的相对位置。Java.awt包中定义了几种布局管
13、理器类,每一种布局管理器类对应一种布局策略。 第40页,共145页。1. FlowLayout类FlowLayout为流式布局管理器,是最简单的布局管理器,也是JApplet和JPanel默认的布局管理器,它按照组件添加的顺序,从左到右依次排列组件。FlowLayout类的构造方法及其含义如表9-7所示。第41页,共145页。第42页,共145页。第43页,共145页。图9-7 例9-7运行结果第44页,共145页。2. BorderLayout类BorderLayout为边界布局管理器,是JFrame、JDialog的默认布局管理器,它将容器分为北、南、东、西和中间五个区域,可以将组件放置在
14、这五个区域中,当框体大小改变时,南、北位置的组件可以水平方向拉伸,东、西位置的组件可以垂直方向拉伸,中间位置的组件水平和垂直方向都可以拉伸。BorderLayout类的构造方法及其含义如表9-8所示。第45页,共145页。第46页,共145页。第47页,共145页。图9-8 例9-8运行结果第48页,共145页。3. GridLayout类GridLayout为网格布局管理器,该布局管理器能够按照矩阵的形式管理容器中的组件。GridLayout布局管理器按照添加的顺序依次从左到右、从上到下一行一行放置组件。第49页,共145页。第50页,共145页。第51页,共145页。图9-9 例9-9运行
15、结果第52页,共145页。4. CardLayout类CardLayout为卡片布局管理器,它将组件像卡片一样放置在容器中,一次只显示一张卡片,一张卡片放置一个组件。卡片布局使得多个组件可以共享同一个显示空间,初始时显示该空间中第一个添加的组件,并通过CardLayout提供的方法来切换卡片显示其他组件。CardLayout类的常用方法及其含义如表9-10所示。第53页,共145页。第54页,共145页。第55页,共145页。第56页,共145页。图9-10 例9-10运行结果1第57页,共145页。图9-11 例9-10运行结果2第58页,共145页。5. 使用null布局管理器一般容器都有
16、默认的布局方式,但是有时候需要组件按照绝对位置和绝对大小放置,这时容器提供的默认布局方式会产生干扰。Java提供了对null布局的支持,使得程序员可以在固定的位置上放置组件,操作步骤如下:(1) 首先使用setLayout(null )将容器的布局方式设置为null布局。(2) 再调用组件的setBounds(int x,int y,int width,int height)方法设置组件在容器中的位置和大小,单位为像素(参数x、y为组件左边缘和上边缘距离窗体左边缘和上边缘的距离,width和height为组件的宽和高)。第59页,共145页。第60页,共145页。图9-12 例9-11运行结果
17、第61页,共145页。 9.5 事件的捕获与事件模型Java应用程序在运行过程中,用户通过程序的用户界面进行某个操作时,比如单击了一个按钮,便会引发一个相应的动作,也称为事件。Java定义了很多事件类,分别描述不同的用户行为,程序员可以根据这些事件类实现自己相应的功能。 第62页,共145页。1. Java的事件机制Java的事件机制主要涉及以下三类对象。Event(事件):事件封装了事件源对象和与事件相关的信息(通常就是一次用户操作)。如果程序需要获得界面组件上所发生事件的相关信息,一般可以通过EventObject类中getSource()方法获得。Event Source(事件源):事件
18、发生的地方,通常就是各个组件,比如JButton等。Event Listener(事件监听器):注册在事件源上,用来监听事件源所发生的事件,并对各种事件做出相应的响应。第63页,共145页。2. 事件监听器1) 匿名内部类监听器匿名内部类是没有名字的内部类,可以实现一步完成定义内部类和创建该类实例,匿名内部类使得程序变得整洁。 第64页,共145页。第65页,共145页。图9-13 例9-12运行结果第66页,共145页。2) 内部类监听器程序也可以使用内部类定义监听器类,只需要创建一个监听器类,可以将这个监听器类共享给多个组件,然后让监听处理器去检测事件源,即由哪个组件产生的事件,最后使用相
19、应的事件处理方法处理。例9-13使用内部类编写一个监听器类,实现多个组件共享同一个监听器。第67页,共145页。例9-13 InnerListenerDemo.java:内部类监听器示例。第68页,共145页。3) 使用框架作为监听器类程序还可以使用一个框架作为事件监听器,通过将框架注册到需要监听的组件上,实现事件的监听和处理。例9-14的程序通过这种方式来实现事件监听。第69页,共145页。第70页,共145页。3. 监听器接口适配器前面章节介绍了如何在组件(事件源)上绑定监听器,使用组件提供的addxxxListener方法,需要实现xxxListener接口类中全部抽象方法,但是有时程序
20、员并不想实现全部抽象方法,只是需要其中的几个。为了方便,Java为程序员提供了更为方便的监听器接口适配器类,如表9-11所示,它提供了监听器接口中全部方法的默认实现,程序员只需要根据自己的需要重写相关的方法即可。 第71页,共145页。第72页,共145页。1) 窗口事件前面章节介绍了组件上的一些动作事件,比如单击按钮,在文本框中输入文本等。本节给出一个WindowEvent的例子(例9-15),用来介绍Window类及其子类可以触发的窗口事件。顺便介绍监听器接口适配器的用法。WindowListener接口中需要重写的方法及其含义如表9-12所示。第73页,共145页。第74页,共145页。
21、第75页,共145页。图9-14 例9-15运行结果第76页,共145页。2) 鼠标事件当用户在应用程序界面上点击鼠标时会产生相应的鼠标事件,MouseEvent对象会捕获到这个事件,并交给相应的事件监听器去处理。MouseListener接口中需要重写的方法及其含义如表9-13所示。MouseMotionListener接口中需要重写的方法及其含义如表9-14所示。第77页,共145页。第78页,共145页。第79页,共145页。第80页,共145页。第81页,共145页。图9-15 例9-16运行结果第82页,共145页。3) 按键事件按键事件是利用键盘来控制和执行一些操作,或者从键盘上获
22、取输入。当用户在键盘上按下、释放一个键,或者使用键盘在一个组件上敲击时,都会触发按键事件。这些事件由KeyEvent对象捕获。KeyListener接口中需要重写的方法及其含义如表9-15所示。第83页,共145页。第84页,共145页。第85页,共145页。第86页,共145页。图9-16 例9-17运行结果第87页,共145页。图9-17 例9-17的控制台输出结果第88页,共145页。 9.6 Swing组件概览第9.2节已经简单介绍了AWT与Swing的区别,下面分别介绍Swing所包含的组件,大致可以分为如下四类:按钮组件、列表组件、菜单组件以及文本组件。 第89页,共145页。1.
23、 按钮组件1) 提交按钮组件Swing中的提交按钮是由JButton对象来表示的,其主要构造方法及其含义如表9-16所示。第90页,共145页。第91页,共145页。第92页,共145页。图9-18 例9-18运行结果第93页,共145页。事实上,设置按钮属性除了通过构造方法外,还可以通过调用其他方法调用来实现。例如,在调用缺省构造方法创建按钮之后,可以调用setText()和setIcon()方法为按钮设置显示文字和图标,其方法形式如下:JButton.setText(String text);JButton.setIcon(new ImageIcon(“icon.png”);第94页,共1
24、45页。2) 单选按钮组件 单选按钮(JRadioButton)在图形界面上显示为一个圆形图标,在应用程序中一般将多个单选按钮放置在一个按钮组内,当用户选中其中某个单选按钮后,该按钮组中其他按钮将被自动取消。第95页,共145页。第96页,共145页。单选按钮与提交按钮的用法基本一致,区别在于实例化的时候单选按钮需添加到按钮组,其具体步骤如下:(1) 建立单选框对象。JRadioButton radio1 = new JRadioButton(“财富”);JRadioButton radio2 = new JRadioButton(“知识”,true);(2) 只有分为一组的单选框才有单选的关
25、系,将单选框分组的代码如下:ButtonGroup group = new ButtonGroup();group.add(radio1);group.add(radio2);第97页,共145页。(3) 将单选框放到容器中。container.add(radio1);container.add(radio2);第98页,共145页。3) 复选框组件复选框(JCheckBox)与单选按钮的作用类似,每个复选框都有“选中”与“不选中”两种情况,与单选按钮不同的是这些选项之间没有相互排斥的关系,可以进行多选设置。第99页,共145页。第100页,共145页。复选框的创建分为以下两步:(1) 创建一
26、个复选框对象。JCheckBox check1 = new JCheckBox(“草莓”);JCheckBox check2 = new JCheckBox(“苹果”,true);JCheckBox check5 = new JCheckBox(“樱桃”,true);JCheckBox check6 = new JCheckBox(“柚子”);其中“苹果”和“香蕉”默认被选中。 (2) 将复选框组件放到容器中。container.add(check1);container.add(check6);实现的复选框结果如图9-19所示。第101页,共145页。图9-19 复选框运行结果第102页,共
27、145页。2. 列表组件1) 下拉框组件 下拉框又叫组合框(JComboBox),是一种在多个选项中选择一个选项的组件。单从功能上看,它和前面的单选框很像,也是在多个选项中选一项,但是下拉框具有下拉功能,因此它比单选框要节省空间。第103页,共145页。第104页,共145页。创建下拉框的步骤如下:(1) 建立一个数据类型,如数组、向量或ComboBoxModel类型,将所有预设的选项都存储在该数据类型中。例如将所有预设内容存入一个数组,语句如下:String comboStr = “草莓”,“苹果”,“香蕉”,“荔枝”,“樱桃”,“柚子”,“其他”;(2) 创建下拉框对象,将字符串数组放到下
28、拉框中,语句如下:JComboBox combo=new JComboBox(comboStr );(3) 将下拉框对象放入容器中,语句如下:container.add(combo);第105页,共145页。下拉框中的内容除了可以显示外还可以编辑,对于可编辑的下拉框,允许用户修改选项内容,对于不可编辑的下拉框,用户只能从预设的选项中选择。创建可编辑的下拉框只需调用setEditable()方法来设置,使用如下语句:combo.setEditable(true);第106页,共145页。图9-20 下拉框运行结果1 第107页,共145页。图9-21 下拉框运行结果2第108页,共145页。2)
29、 列表框组件列表框(JList)是允许用户从一个列表中选择一项或多项的组件,它与下拉框的区别在于列表框只在窗体上占据固定的大小,列表框的所有项目都是可见的,如果选项很多,超出了列表框可见区的范围,则列表框的旁边会有一个滚动条。第109页,共145页。第110页,共145页。 对于上述没有参数的构造方法,可以在初始化列表框后通过使用setListData()方法对列表框属性进行设置。列表框的建立分为以下三步:(1) 创建列表框对象。列表框是JList类的对象,在创建列表框对象时,若使用数组作为初始化列表框的参数,语句如下:String listStr = “草莓”,“苹果”,“香蕉”,“荔枝”,
30、“樱桃”,“柚子”,“葡萄”,“芒果”;JList list = new JList(listStr);通过以上方式创建的列表框如图9-22所示。 第111页,共145页。图9-22 列表框运行结果1 第112页,共145页。(2) 设置列表框属性。在创建好列表框以后,可以根据需要设置它的属性。例如,选项模式可以通过setSelectionMode()方法来设定,共有三种不同的选项模式。 单项选择:只能选择多项中一项,语句如下:list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);运行结果如图9-23所示。第113页,共145页。
31、图9-23 列表框运行结果2第114页,共145页。 区间选择。可以选择一个区间范围,语句如下:list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);运行结果如图9-24所示。 多项选择。可以选择一个区间或几个文件,语句如下:list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);运行结果如图9-25所示。第115页,共145页。图9-24 列表框运行结果3 第116页,共145页。图9-25 列表框运行结果4第117页,共145
32、页。(3) 将列表框放到一个滚动条面板中。通常情况下,列表框中的项目数都多于它能显示的数量,因此需要一个滚动条面板,将列表框添加到其中以便显示所有项目。代码如下所示:JScrollPane scrollpanel = new JScrollPane(list);scrollpanel.setPreferredSize(new Dimension(200,100);第118页,共145页。3. 菜单组件1) 下拉式菜单(1) 菜单条。 (2) 菜单。 第119页,共145页。第120页,共145页。(3) 菜单项。菜单项(JMenuItem)是组成菜单的最小单位,在菜单项上可以注册ActionE
33、vent事件监听器。当单击菜单项时,执行actionPerformed()方法。JMenuItem的主要构造方法及其含义如表9-22所示。第121页,共145页。第122页,共145页。建立菜单的步骤如下: 建立菜单栏对象。首先建立一个JMenuBar对象,然后利用框架的setJMenuBar()方法将菜单栏对象放置与框架的顶端,语句如下:JMenuBar menuBar = new JMenuBar();frame.setJMenuBar(menuBar);第123页,共145页。 建立菜单组。菜单组包含一组菜单项,通过点击它可显示它所包含的所有菜单项,菜单组是JMenu对象,下面的代码建立
34、了一个菜单组并把它加入到菜单栏中:JMenu menu = new JMenu(“设置”);menuBar.add(menu);菜单运行结果如图9-26所示,其中的“设置”、“帮助”就是两个不同的菜单组。第124页,共145页。 建立菜单项。将一个菜单项加入菜单组中的代码如下:JMenuItem menuItem = new JMenuItem(“字体”);menu.add(menuItem);建立菜单项运行结果如图9-27所示,图中分别为“设置”菜单组加入了三个菜单项“字体”、“颜色”和“大小”。第125页,共145页。图9-26 建立菜单组运行结果 第126页,共145页。图9-27 建立
35、菜单项运行结果第127页,共145页。2) 弹出式菜单弹出式菜单(JPopupMenu)是一种特殊形式的菜单,它与下拉式菜单类似,但JPopupMenu创建的弹出式菜单并不固定在窗口的某个位置,而是由鼠标指针与系统判断并决定其在哪里出现。JPopupMenu类的主要构造方法及其含义如表9-23所示。第128页,共145页。第129页,共145页。第130页,共145页。图9-28 弹出式菜单运行结果第131页,共145页。4. 文本组件1) 文本框组件文本框(JTextField)是一个单行文本编辑框,用于显示或编辑一行文字。文本框是由javax.swing包中的JTextField类来创建的,该类继承了javax.swing.text.JTextComponent类,主要的构造方法及其含义如表9-24所示。第132页,共145页。第133页,共145页。创建文本框组件首先要创建一个文本框对象,再将对象放入容器中,语句如下:JTextField text = new JTextField(20);container.add(text);其中,文本框构造方法中的参数“20”是该文本框可以显示的字符长度,但并不意味着可输入的字符串长度为20,可输入的字符串长度远大于可以显示的字符串长度,如图9-29所示。第134页,共145页。图9-29 文本框运行结果第135页,共145页
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年一建民航实务考前真题冲刺特训试卷及答案
- 2026年一建矿业实务考前易错题重组卷试卷及答案
- 2026年一建矿业工程基础达标试卷及答案
- 2026电网外协招聘面试题及答案
- 2026富昌贸易面试题及答案
- 2026酒店ai面试题库及答案
- 《暑假查漏巩固|初中历史中国近代史全单元基础梳理完整教案》
- 全钒液流电池储能电站巡视检查项目及要求、典型异常及处理、故障及处理、维护项目及要求
- 黑龙江省佳木斯市富锦市部分校2025-2026学年八年级下学期7月期末历史试卷(含答案)
- 人工智能在风控中的应用探索-第1篇
- 2025年中级(四级)化学检验员(化工分析)职业技能理论知识试题考试试题(含答案)
- 临床镇痛药物的应用与管理
- 铸造工安全培训课件
- 安徽省2025年公需科目三安徽农业大学测验参考答案
- 2025云南省行政执法资格考试考前模拟题(含答案)
- 【鄂尔多斯】2024年内蒙古鄂尔多斯职业学院人才引进39人笔试附带答案详解
- 2024衡阳蒸湘区中小学教师招聘考试试题及答案
- 《齐齐哈尔烤肉制作工艺与服务规范》
- DB52T 1161-2016 贵州省旅游购物场所等级划分与评定
- 2024年广东省深圳市南山区中考英语三模试卷
- 男生殖系统肿瘤案例分析阴茎癌课件
评论
0/150
提交评论