博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
苏浪浪 201771010120 十二周
阅读量:5016 次
发布时间:2019-06-12

本文共 8554 字,大约阅读时间需要 28 分钟。

实验十二  图形程序设计

实验时间 2018-11-14

1、实验目的与要求

(1) 掌握Java GUI中框架创建及属性设置中常用类的API;

(2) 掌握Java GUI中2D图形绘制常用类的API;

(3) 了解Java GUI中2D图形中字体与颜色的设置方法;

(4) 了解Java GUI中2D图像的载入方法。

2、实验内容和步骤

实验1: 导入第10章示例程序,测试程序并进行代码注释。

测试程序1:

运行下列程序,观察程序运行结果。

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);   

   }

}

package a;import javax.swing.*;public class SimpleFrameTest{   public static void main(String[] args)   {     JFrame  frame = new JFrame(); //创建对象窗体     frame.setBounds(0, 100,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(() ->         {            SimpleFrame frame = new SimpleFrame();//创建对象窗体            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//对于窗口退出该执行的操作            frame.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);   }}

:”都是创建窗体的程序;第一个程序更加简便易懂 ,第二个显得比较繁琐;

测试程序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);//屏幕宽/2;长/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("我是一个框体,不要理我", MESSAGE_X, MESSAGE_Y);//使用此图形上下文的当前字体和颜色绘制由指定 string 给定的文本。最左侧字符的基线位于此图形上下文坐标系的 (x, y) 位置处。    }      public Dimension getPreferredSize() { return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); }}

 

 

测试程序4:

l  在elipse IDE中调试运行教材424 -425页程序10-4,结合程序运行结果理解程序;

l  掌握2D图形的绘制方法。

 

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);//屏幕宽/2;长/2;      setLocationByPlatform(true);      // 设置框架图标      Image img = new ImageIcon("小浪.gif").getImage();      setIconImage(img);         }}

 

测试程序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 = "代练请找我!";      Font f = new Font("Serif", Font.BOLD, 40);      g2.setFont(f);      // 测量消息传递程序的大小      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;      // 画出消息      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);      // draw the image in the upper-left corner      g.drawImage(image, 0, 0, null);      // tile the image across the component      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)

实验总结:掌握了Java GUI中框架创建及属性设置中常用类的API、Java GUI中2D图形绘制常用类的API; 了解了Java GUI中2D图形中字体与颜色的设置方法以及Java GUI中2D图像的载入方法。在老师与学长的演示讲解之下也熟悉了这章所要学习的的新知识,通过在实验平台上也对与以前的知识有所回顾。

转载于:https://www.cnblogs.com/xiaolangoxiaolang/p/9965324.html

你可能感兴趣的文章
Django模板语言相关内容
查看>>
running and coding
查看>>
实现QQ第三方登录、网站接入
查看>>
HTML CSS 层叠样式表 三
查看>>
Qt pro pri 文件学习1
查看>>
[思路]导入导出功能
查看>>
【iOS】UICollectionView自己定义Layout之蜂窝布局
查看>>
发布aar到jcenter
查看>>
跨浏览器问题的五种解决方案
查看>>
ch02 fundamental definition 01
查看>>
Jquery Uploadify3.21.与2.1版本 使用中存在的问题--记录三
查看>>
Linux查看进程的内存占用情况 分类: ubuntu ...
查看>>
[BZOJ 2818]Gcd
查看>>
160. Intersection of Two Linked Lists
查看>>
人生苦短,我用python-- Day11
查看>>
ehcache memcache redis 三大缓存男高音_转
查看>>
Java构造方法、重载及垃圾回收
查看>>
.Net Core AES加密解密
查看>>
Spring Quartz实现任务调度
查看>>
python | 桶排序、冒泡排序、选择排序、去重
查看>>