201771010112罗松《面向对象程序设计(java)》第十二周学习总结
一、实验目的与要求
(1) 掌握Java GUI中框架创建及属性设置中常用类的API;
(2) 掌握Java GUI中2D图形绘制常用类的API;
(3) 了解Java GUI中2D图形中字体与颜色的设置方法;
(4) 了解Java GUI中2D图像的载入方法。
2、实验内容和步骤
实验1: 导入第10章示例程序,测试程序并进行代码注释。
测试程序1:
l 运行下列程序,观察程序运行结果。
import javax.swing.*;public class SimpleFrameTest{public static void main(String[] args){JFrame frame = new JFrame(); frame.setBounds(0, 0,300, 200);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true); }}
l 在elipse IDE中调试运行教材407页程序10-1,结合程序运行结果理解程序;与上面程序对比,思考异同;
l 掌握空框架创建方法;
l 了解主线程与事件分派线程概念;
l 掌握GUI顶层窗口创建技术。
package simpleFrame;import java.awt.*; import javax.swing.*;/*** @version 1.33 2015-05-12* @author Cay Horstmann*/ public class SimpleFrameTest {public static void main(String[] args){EventQueue.invokeLater(() ->//lambda表达式 {SimpleFrame frame = new SimpleFrame();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出并关闭,值是3frame.setVisible(true);});} }class SimpleFrame extends JFrame {private static final int DEFAULT_WIDTH = 300;private static final int DEFAULT_HEIGHT = 200;public SimpleFrame()//构造器 {setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);//调节组件的大小 } }
实验结果如下图所示:
区别:所给示例程序是Java自带的,而测试程序是用户自定义的。
测试程序2:
l 在elipse IDE中调试运行教材412页程序10-2,结合程序运行结果理解程序;
l 掌握确定框架常用属性的设置方法。
package sizedFrame;import java.awt.*; import javax.swing.*;/*** @version 1.34 2015-06-16* @author Cay Horstmann*/ public class SizedFrameTest {public static void main(String[] args){EventQueue.invokeLater(() ->{JFrame frame = new SizedFrame();frame.setTitle("SizedFrame");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);});} }class SizedFrame extends JFrame {public SizedFrame(){// 获取屏幕尺寸 Toolkit kit = Toolkit.getDefaultToolkit();Dimension screenSize = kit.getScreenSize();int screenHeight = screenSize.height;int screenWidth = screenSize.width;// 设置框架宽度、高度,并让平台拾取屏幕位置setSize(screenWidth / 2, screenHeight / 2);setLocationByPlatform(true);// 设置框架图标 Image img = new ImageIcon("icon.gif").getImage();setIconImage(img); } }
实验结果如下图所示:
测试程序3:
l 在elipse IDE中调试运行教材418页程序10-3,结合运行结果理解程序;
l 掌握在框架中添加组件;
l 掌握自定义组件的用法。
package notHelloWorld;import javax.swing.*; import java.awt.*;/*** @version 1.33 2015-05-12* @author Cay Horstmann*/ public class NotHelloWorld {public static void main(String[] args){EventQueue.invokeLater(() ->{JFrame frame = new NotHelloWorldFrame();frame.setTitle("NotHelloWorld");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);});} }/*** A frame that contains a message panel*/ class NotHelloWorldFrame extends JFrame {public NotHelloWorldFrame(){add(new NotHelloWorldComponent());pack();} }/*** A component that displays a message.*/ class NotHelloWorldComponent extends JComponent {public static final int MESSAGE_X = 75;//行坐标public static final int MESSAGE_Y = 100;//列坐标private static final int DEFAULT_WIDTH = 300;private static final int DEFAULT_HEIGHT = 200;public void paintComponent(Graphics g){g.drawString("Not a Hello, World program", MESSAGE_X, MESSAGE_Y);}public Dimension getPreferredSize() { return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); } }
实验结果如下图所示:
测试程序4:
l 在elipse IDE中调试运行教材424 -425页程序10-4,结合程序运行结果理解程序;
l 掌握2D图形的绘制方法。
package draw;import java.awt.*; import java.awt.geom.*; import javax.swing.*;/*** @version 1.33 2007-05-12* @author Cay Horstmann*/ public class DrawTest {public static void main(String[] args){EventQueue.invokeLater(() ->{JFrame frame = new DrawFrame();frame.setTitle("DrawTest");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);});} }/*** A frame that contains a panel with drawings*/ class DrawFrame extends JFrame {public DrawFrame(){ add(new DrawComponent());pack();} }/*** A component that displays rectangles and ellipses.*/ class DrawComponent extends JComponent {private static final int DEFAULT_WIDTH = 400;private static final int DEFAULT_HEIGHT = 400;public void paintComponent(Graphics g){Graphics2D g2 = (Graphics2D) g;// 画一个矩形double leftX = 100;double topY = 100;double width = 200;double height = 150;Rectangle2D rect = new Rectangle2D.Double(leftX, topY, width, height);g2.draw(rect);// 画出封闭的椭圆 Ellipse2D ellipse = new Ellipse2D.Double();ellipse.setFrame(rect);g2.draw(ellipse);// 画一条对角线 g2.draw(new Line2D.Double(leftX, topY, leftX + width, topY + height));// 画一个圆心相同的圆double centerX = rect.getCenterX();double centerY = rect.getCenterY();double radius = 150;Ellipse2D circle = new Ellipse2D.Double();circle.setFrameFromCenter(centerX, centerY, centerX + radius, centerY + radius);g2.draw(circle);}public Dimension getPreferredSize() { return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); } }
实验结果如下图所示:
测试程序5:
l 在elipse IDE中调试运行教材432页-433程序10-5,结合程序运行结果理解程序;
l 了解2D图形中字体的设置的方法;
package font;import java.awt.*; import java.awt.font.*; import java.awt.geom.*; import javax.swing.*;/*** @version 1.34 2015-05-12* @author Cay Horstmann*/ public class FontTest {public static void main(String[] args){EventQueue.invokeLater(() ->{JFrame frame = new FontFrame();frame.setTitle("FontTest");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);});} }/*** A frame with a text message component*/ class FontFrame extends JFrame {public FontFrame(){ add(new FontComponent());//往容器内添加了一个窗口 pack();} }/*** A component that shows a centered message in a box.*/ class FontComponent extends JComponent {private static final int DEFAULT_WIDTH = 300;private static final int DEFAULT_HEIGHT = 200;public void paintComponent(Graphics g)//画笔 {Graphics2D g2 = (Graphics2D) g;String message = "Hello, World!";Font f = new Font("Serif", Font.BOLD, 36);g2.setFont(f);// 测量message的大小 FontRenderContext context = g2.getFontRenderContext();Rectangle2D bounds = f.getStringBounds(message, context);// 设置(x,y) =文本左上角double x = (getWidth() - bounds.getWidth()) / 2;double y = (getHeight() - bounds.getHeight()) / 2;// 增加上升到y以达到基线double ascent = -bounds.getY();double baseY = y + ascent;//画出message g2.drawString(message, (int) x, (int) baseY);g2.setPaint(Color.LIGHT_GRAY);// 画出基线 g2.draw(new Line2D.Double(x, baseY, x + bounds.getWidth(), baseY));// 绘制包围的矩形 Rectangle2D rect = new Rectangle2D.Double(x, y, bounds.getWidth(), bounds.getHeight());g2.draw(rect);}public Dimension getPreferredSize() { return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); } }
实验结果如图所示:
测试程序6:
l 在elipse IDE中调试运行教材436页-437程序10-6,结合程序运行结果理解程序;
l 了解2D图形图像的显示方法。
package image;import java.awt.*; import javax.swing.*;/*** @version 1.34 2015-05-12* @author Cay Horstmann*/ public class ImageTest {public static void main(String[] args){EventQueue.invokeLater(() ->{JFrame frame = new ImageFrame();frame.setTitle("ImageTest");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);});} }/*** A frame with an image component*/ class ImageFrame extends JFrame {public ImageFrame(){add(new ImageComponent());pack();} }/*** A component that displays a tiled image*/ class ImageComponent extends JComponent {private static final int DEFAULT_WIDTH = 300;private static final int DEFAULT_HEIGHT = 200;private Image image;public ImageComponent(){image = new ImageIcon("blue-ball.gif").getImage();}public void paintComponent(Graphics g){if (image == null) return;int imageWidth = image.getWidth(null);int imageHeight = image.getHeight(null);//在左上角绘制图像 g.drawImage(image, 0, 0, null);// 将图像平铺到组件上for (int i = 0; i * imageWidth <= getWidth(); i++)for (int j = 0; j * imageHeight <= getHeight(); j++)if (i + j > 0) g.copyArea(0, 0, imageWidth, imageHeight, i * imageWidth, j * imageHeight);}public Dimension getPreferredSize() { return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); } }
实验2:课后完成PTA平台题目集:2018秋季西北师范大学面向对象程序设计(Java)练习题集(ch6-ch9)
三、实验总结
通过本周的学习,我知道了AWT与Swing的概念,了解了Java GUI中框架创建及属性设置中常用的API。具体了解Swing库中容器,组件和框架的的定义,大致了解了图形程序设计,知道了以后如果开发游戏,这方面的知识非常有用,我会利用闲暇时间努力学习的。
转载于:https://www.cnblogs.com/xuezhiqian/p/9977557.html
201771010112罗松《面向对象程序设计(java)》第十二周学习总结相关推荐
- 201771010118马昕璐《面向对象程序设计java》第八周学习总结
第一部分:理论知识学习部分 1.接口 在Java程序设计语言中,接口不是类,而是对类的一组需求描述,由常量和一组抽象方法组成.Java为了克服单继承的缺点,Java使用了接口,一个类可以实现一个或多个 ...
- 20177101010101 白玛次仁《面向对象程序设计》第十八周学习总结
实验十八 总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设 ...
- 201671010103 2016-2017-2 《Java程序设计》第十二周学习心得
Java的抽象窗口工具箱(Abtract Window Toolkit,AWT )包含在java.awt中它提供了许多用来设计GUI的组件类和容器类:而Swing类库被包含在javax.swing包里 ...
- 面向对象程序设计上机练习十二(运算符重载)
面向对象程序设计上机练习十二(运算符重载) Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Descriptio ...
- 面向对象程序设计——Java语言 第3周编程题 查找里程(10分)
面向对象程序设计--Java语言 第3周编程题 查找里程(10分) 题目内容 下图为国内主要城市之间的公路里程: 你的程序要读入这样的一张表,然后,根据输入的两个城市的名称,给出这两个城市之间的里程. ...
- 20145240《信息安全系统设计基础》第十二周学习总结
20145240<信息安全系统设计基础>第十二周学习总结 前三周博客链接 第九周学习总结 第十周学习总结 第十一周学习总结 视频学习内容总结 指针数组与数组指针 数组指针(也称行指针) 定 ...
- 20145206 《信息安全系统设计基础》第十二周学习总结
20145206 <信息安全系统设计基础>第十二周学习总结 本周学习目标 1.第九周代码检查 2.第十周代码检查 3.第十一周代码检查 博客链接 20145206 <信息安全系统设计 ...
- 第十二周学习周报(20180521-20180527)
第十二周学习周报 一.本周学习情况 1.学习了吴恩达老师微专业课<深度学习工程师> 第三篇:结构化机器学习项目 第一周内容:机器学习(ML)策略(1) 2.看了fast-rcnn算法详解和 ...
- 20135327郭皓——信息安全系统设计基础第十二周学习总结
第十二周(11.23-11.29): 学习计时:共6小时 读书: 代码: 作业: 博客: 一.学习目标 掌握进程控制 掌握信号处理的方法 掌握管道和fifo进行进程间通信的方法 二.学习资源 编译. ...
- 第十二周-学习进度条
第十二周 所花时间(包括上课) 20h 代码量(行) 230 博客园(篇) 2 了解到的知识点 fragment的相关知识 转载于:https://www.cnblogs.com/liujinxi ...
最新文章
- 《Linux内核设计与实现》读书笔记(8)--- 内核同步方法(2)
- h5仿微信聊天(高仿版)、微信聊天表情|对话框|编辑器
- 机房漏水后,漏水报警器是如何检测应急处理的?
- ML之kNNC:基于iris莺尾花数据集(PCA处理+三维散点图可视化)利用kNN算法实现分类预测daiding
- 谭浩强课后题之----求阶乘和
- c++函数传参:值传递、指针传递、引用传递
- 集算器协助MongoDB计算之交叉汇总
- 解决MyEclipse里Tomcat端口被占用而无法启动的情况
- (1)ActivityThread分析
- 不要再闲玩啦!博主手把手带你两个月入门自然语言处理,还不赶紧碗里来!...
- mysql5.7主从恢复_MySQL 5.7 开启主从同步开启GTID恢复数据
- 细胞自动机,那是什么?
- 计算机相关课程考核,计算机专业编程实践类课程考核方法
- 《Delta-Sigma数据转换器从入门到精通》笔记之漫谈均值
- 板绘都有哪些优缺点?应该注意什么
- R语言使用逻辑回归分类算法
- html网站点击特效,HTML5 svg和CSS3炫酷鼠标点击按钮特效
- 老男孩培训往期脱产班学生檄文
- 苹果向2周内新购iPad一代用户退款100美元
- 自动售货机发展优势你了解多少?
热门文章
- smartUp手势插件Chrome
- markdown语法进阶——字体、字号与颜色设置
- 计算机模拟技术在高分子领域的应用,模拟技术的原理、方法及在高分子材料研究中的应用...
- Window环境下MQTT安装
- 微博秒拍等网站的视频图片下载工具:在线下载工具
- 写在2019年来临前的倒数0.5小时
- php计算距离元旦还有多少天,2020年元旦顺口溜
- msxml4.0 sp4_MSXML4和80072efd中的安全性
- 计算机模式识别科学家年薪,年薪可达80万,学人工智能要去这些学校
- FFMPEG视频编码 NVIDIA 和 INTEL 硬件加速 x265 8bit 和 10bit