一、实验目的与要求

(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)》第十二周学习总结相关推荐

  1. 201771010118马昕璐《面向对象程序设计java》第八周学习总结

    第一部分:理论知识学习部分 1.接口 在Java程序设计语言中,接口不是类,而是对类的一组需求描述,由常量和一组抽象方法组成.Java为了克服单继承的缺点,Java使用了接口,一个类可以实现一个或多个 ...

  2. 20177101010101 白玛次仁《面向对象程序设计》第十八周学习总结

    实验十八  总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设 ...

  3. 201671010103 2016-2017-2 《Java程序设计》第十二周学习心得

    Java的抽象窗口工具箱(Abtract Window Toolkit,AWT )包含在java.awt中它提供了许多用来设计GUI的组件类和容器类:而Swing类库被包含在javax.swing包里 ...

  4. 面向对象程序设计上机练习十二(运算符重载)

    面向对象程序设计上机练习十二(运算符重载) Time Limit: 1000MS  Memory Limit: 65536KB Submit  Statistic Problem Descriptio ...

  5. 面向对象程序设计——Java语言 第3周编程题 查找里程(10分)

    面向对象程序设计--Java语言 第3周编程题 查找里程(10分) 题目内容 下图为国内主要城市之间的公路里程: 你的程序要读入这样的一张表,然后,根据输入的两个城市的名称,给出这两个城市之间的里程. ...

  6. 20145240《信息安全系统设计基础》第十二周学习总结

    20145240<信息安全系统设计基础>第十二周学习总结 前三周博客链接 第九周学习总结 第十周学习总结 第十一周学习总结 视频学习内容总结 指针数组与数组指针 数组指针(也称行指针) 定 ...

  7. 20145206 《信息安全系统设计基础》第十二周学习总结

    20145206 <信息安全系统设计基础>第十二周学习总结 本周学习目标 1.第九周代码检查 2.第十周代码检查 3.第十一周代码检查 博客链接 20145206 <信息安全系统设计 ...

  8. 第十二周学习周报(20180521-20180527)

    第十二周学习周报 一.本周学习情况 1.学习了吴恩达老师微专业课<深度学习工程师> 第三篇:结构化机器学习项目 第一周内容:机器学习(ML)策略(1) 2.看了fast-rcnn算法详解和 ...

  9. 20135327郭皓——信息安全系统设计基础第十二周学习总结

    第十二周(11.23-11.29): 学习计时:共6小时 读书: 代码: 作业: 博客: 一.学习目标 掌握进程控制 掌握信号处理的方法 掌握管道和fifo进行进程间通信的方法 二.学习资源  编译. ...

  10. 第十二周-学习进度条

      第十二周 所花时间(包括上课) 20h 代码量(行) 230 博客园(篇) 2 了解到的知识点 fragment的相关知识 转载于:https://www.cnblogs.com/liujinxi ...

最新文章

  1. 《Linux内核设计与实现》读书笔记(8)--- 内核同步方法(2)
  2. h5仿微信聊天(高仿版)、微信聊天表情|对话框|编辑器
  3. 机房漏水后,漏水报警器是如何检测应急处理的?
  4. ML之kNNC:基于iris莺尾花数据集(PCA处理+三维散点图可视化)利用kNN算法实现分类预测daiding
  5. 谭浩强课后题之----求阶乘和
  6. c++函数传参:值传递、指针传递、引用传递
  7. 集算器协助MongoDB计算之交叉汇总
  8. 解决MyEclipse里Tomcat端口被占用而无法启动的情况
  9. (1)ActivityThread分析
  10. 不要再闲玩啦!博主手把手带你两个月入门自然语言处理,还不赶紧碗里来!...
  11. mysql5.7主从恢复_MySQL 5.7 开启主从同步开启GTID恢复数据
  12. 细胞自动机,那是什么?
  13. 计算机相关课程考核,计算机专业编程实践类课程考核方法
  14. 《Delta-Sigma数据转换器从入门到精通》笔记之漫谈均值
  15. 板绘都有哪些优缺点?应该注意什么
  16. R语言使用逻辑回归分类算法
  17. html网站点击特效,HTML5 svg和CSS3炫酷鼠标点击按钮特效
  18. 老男孩培训往期脱产班学生檄文
  19. 苹果向2周内新购iPad一代用户退款100美元
  20. 自动售货机发展优势你了解多少?

热门文章

  1. smartUp手势插件Chrome
  2. markdown语法进阶——字体、字号与颜色设置
  3. 计算机模拟技术在高分子领域的应用,模拟技术的原理、方法及在高分子材料研究中的应用...
  4. Window环境下MQTT安装
  5. 微博秒拍等网站的视频图片下载工具:在线下载工具
  6. 写在2019年来临前的倒数0.5小时
  7. php计算距离元旦还有多少天,2020年元旦顺口溜
  8. msxml4.0 sp4_MSXML4和80072efd中的安全性
  9. 计算机模式识别科学家年薪,年薪可达80万,学人工智能要去这些学校
  10. FFMPEG视频编码 NVIDIA 和 INTEL 硬件加速 x265 8bit 和 10bit