zoukankan      html  css  js  c++  java
  • 201771010126 王燕《面向对象程序设计(Java)》第十二周学习总结

                           实验十二  图形程序设计

    实验时间 2018-11-14

    1、实验目的与要求

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

    创建空框架

    . 在Java中,常采用框架(Frame)创建初始界面,即GUI的顶层窗口

    . AWT库中有一个基于对等体的Frame类。
    . 该类的Swing版本为JFrame,JFrame是Frame子类。

    框架定位与框架属性
    定位:
      常用Component类的setLocation和setBounds方法
    常用属性
      Title:框架标题
      IconImage:框架图标

    (4)确定框架大小
    通过调用Toolkit类的方法来得到屏幕尺寸信息。
    Toolkit kit = Toolkit.getDefaultToolkit(); //生成Toolkit对象
    Dimension screenSize = kit.getScreenSize();//返回Dimension对象的屏幕大小
    int screenWidth = screenSize.width;//获得Dimension对象屏幕的宽度
    int screenHeight=screenSize.height; ;//获得Dimension对象屏幕的高度创建框架时的常用类及API

    java.awt.Component 1.0
    – boolean isVisible() 检查组件是否可见
    – void setVisible(boolean b) 设置组件可见
    – void setSize(int width,int height) 把组件缩放到指定宽度和高度
    – void setBounds(int x,int y,int width,int height) 移动并缩放组件
    – Dimension getSize() 得到组件的大小
    – void setSize(Dimension d) 把组件缩放到指定的大小

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

     java.awt.geom.Retangle2D.Double 1.2
    – Retangle2D.Double(double x,double y,double w,double h)
     java.awt.geom.Retangle2D.Float 1.2
    – Retangle2D.Float(float x,float y,float w, float h)
     java.awt.geom.Ellipse2D.Double 1.2
    – Ellipse2D.Double(double x,double y,double w,double h)

     java.awt.geom.Point2D.Double 1.2
    – Point2D.Double(double x,double y)
     java.awt.geom.Line2D.Double 1.2
    – Line2D.double(Point2D start,Point2D end)
    – Line2D.double(double startX,doublestartY,double endX,double endY)
    – fill(Graphics2D rec) 填充颜色
    – draw(Graphics2D rec) 绘制图形rec

     java.awt.Graphic2D 1.2
    – void drawString(String str, int x, int y);
    – void draw(Shape

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

    Graphics2D类的setPaint方法(Graphics类为setColor方法)用来设置颜色。
    例:g2.setPaint(Color.RED);
    g2.drawString(“Set Color”,100,100);
    (1)Color类中定义的13种标准颜色:BLACK、BLUE、CYAN、DARK_GRAY、GRAY、GREEN、LIGHT_GRAY、MAGENTA、ORANGE、PINK、RED、WHITE、YELLOW

     通过指定红绿蓝三色比例,用Color类对象来复合成一种新的颜色。
     Color构造器如下:
    Color(int redness,int greenness,int blueness)
    其中参数取值为0--255

    (3)常用API教材428页)
     java.awt.Color 1.0
    – void Color(int r,int g,int b)
     java.awt.Graphics 1.0
    – void setColor(Color c)
    – Color getColor( ));
     java.awt.Graphic2D 1.2
    – void setPaint(paint p)
    – void fill(Shape s)
     java.awt.Cmponent 1.0
    – void setBackground(Color c)
    void setForeground(Color c)

    (2)字体风格
     Font.PLAIN
     Font.BOLD
     Fond.ITALIC
     Fond.BOLD + Font.ITALIC
    (3)设置字体
     Font serif=new Font(“Serif”,Font.BOLD,14);
     g2.setFont(serif);

    (4)字体应用的常用API(教材434页-435页)
     java.awt.Font 1.0
    – Font(String name,int style,int Size)
    – String getFontName()
    – String getFamily()
    – String getName()
    – Retangle2D getStringBounds(String s,FontRenderContext context)

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

     (1)在Java应用程序中,一旦图像保存在本地或因特网的某个位置上,就可以将它们直接读入到java应用程序中。

    String filename = “…”;
    Image image = ImageIcon(filename).getImage();

    (2)完成将一个图像文件加载到程序中,再调用Graphics类提供的DrawImage()显示它。
    public void paintComponent(Graphics g)
    {

    g.drawImage(image, x, y, null);
    }

     java.awt.Graphics 1.0
    – boolean drawImage(Image img,int x,int y,ImageObserver observer)
    – boolean drawImage(Image img,int x,int y,int width,int height,ImageObserverobserver)
    – void copyArea(int x,int y,int width,int height,int dx,int dy)
    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顶层窗口创建技术。

     1 package SimpleFrame;
     2 
     3 import java.awt.*;
     4 import javax.swing.*;
     5 
     6 /**
     7  * @version 1.33 2015-05-12
     8  * @author Cay Horstmann
     9  */
    10 public class SimpleFrameTest
    11 {
    12    public static void main(String[] args)
    13    {
    14       EventQueue.invokeLater(() ->
    15          {
    16             SimpleFrame frame = new SimpleFrame();
    17             frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    18             frame.setVisible(true);
    19          });
    20    }
    21 }
    22 
    23 class SimpleFrame extends JFrame
    24 {
    25    private static final int DEFAULT_WIDTH = 300;
    26    private static final int DEFAULT_HEIGHT = 200;
    27 
    28    public SimpleFrame()
    29    {
    30       setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
    31    }
    32 }

    测试程序2:

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

    l 掌握确定框架常用属性的设置方法。

     1 package sizedFrame;
     2 
     3 import java.awt.*;
     4 import javax.swing.*;
     5 
     6 /**
     7  * @version 1.34 2015-06-16
     8  * @author Cay Horstmann
     9  */
    10 public class SizedFrameTest
    11 {
    12    public static void main(String[] args)
    13    {
    14       EventQueue.invokeLater(() ->
    15          {
    16             JFrame frame = new SizedFrame();
    17             frame.setTitle("SizedFrame");
    18             frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    19             frame.setVisible(true);
    20          });
    21    }
    22 }
    23 
    24 class SizedFrame extends JFrame
    25 {
    26    public SizedFrame()
    27    {
    28       // get screen dimensions
    29 
    30       Toolkit kit = Toolkit.getDefaultToolkit();
    31       Dimension screenSize = kit.getScreenSize();
    32       int screenHeight = screenSize.height;
    33       int screenWidth = screenSize.width;
    34 
    35       // set frame width, height and let platform pick screen location
    36 
    37       setSize(screenWidth / 2, screenHeight / 2);
    38       setLocationByPlatform(true);
    39 
    40       // set frame icon
    41 
    42       Image img = new ImageIcon("icon.gif").getImage();
    43       setIconImage(img);      
    44    }
    45 }

    测试程序3:

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

    l 掌握在框架中添加组件;

    l 掌握自定义组件的用法。

     1 package notHelloWorld;
     2 
     3 import javax.swing.*;
     4 import java.awt.*;
     5 
     6 /**
     7  * @version 1.33 2015-05-12
     8  * @author Cay Horstmann
     9  */
    10 public class NotHelloWorld
    11 {
    12    public static void main(String[] args)
    13    {
    14       EventQueue.invokeLater(() ->
    15          {
    16             JFrame frame = new NotHelloWorldFrame();
    17             frame.setTitle("NotHelloWorld");
    18             frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    19             frame.setVisible(true);
    20          });
    21    }
    22 }
    23 
    24 /**
    25  * A frame that contains a message panel
    26  */
    27 class NotHelloWorldFrame extends JFrame
    28 {
    29    public NotHelloWorldFrame()
    30    {
    31       add(new NotHelloWorldComponent());
    32       pack();
    33    }
    34 }
    35 
    36 /**
    37  * A component that displays a message.
    38  */
    39 class NotHelloWorldComponent extends JComponent
    40 {
    41    public static final int MESSAGE_X = 75;
    42    public static final int MESSAGE_Y = 100;
    43 
    44    private static final int DEFAULT_WIDTH = 300;
    45    private static final int DEFAULT_HEIGHT = 200;
    46 
    47    public void paintComponent(Graphics g)
    48    {
    49       g.drawString("Not a Hello, World program", MESSAGE_X, MESSAGE_Y);
    50    }
    51    
    52    public Dimension getPreferredSize() { return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); }
    53 }

    测试程序4:

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

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

     1 package draw;
     2 
     3 import java.awt.*;
     4 import java.awt.geom.*;
     5 import javax.swing.*;
     6 
     7 /**
     8  * @version 1.33 2007-05-12
     9  * @author Cay Horstmann
    10  */
    11 public class DrawTest
    12 {
    13    public static void main(String[] args)
    14    {
    15       EventQueue.invokeLater(() ->
    16          {
    17             JFrame frame = new DrawFrame();
    18             frame.setTitle("DrawTest");
    19             frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    20             frame.setVisible(true);
    21          });
    22    }
    23 }
    24 
    25 /**
    26  * A frame that contains a panel with drawings
    27  */
    28 class DrawFrame extends JFrame
    29 {
    30    public DrawFrame()
    31    {      
    32       add(new DrawComponent());
    33       pack();
    34    }
    35 }
    36 
    37 /**
    38  * A component that displays rectangles and ellipses.
    39  */
    40 class DrawComponent extends JComponent
    41 {
    42    private static final int DEFAULT_WIDTH = 400;
    43    private static final int DEFAULT_HEIGHT = 400;
    44 
    45    public void paintComponent(Graphics g)
    46    {
    47       Graphics2D g2 = (Graphics2D) g;
    48 
    49       // draw a rectangle
    50 
    51       double leftX = 100;
    52       double topY = 100;
    53       double width = 200;
    54       double height = 150;
    55 
    56       Rectangle2D rect = new Rectangle2D.Double(leftX, topY, width, height);
    57       g2.draw(rect);
    58 
    59       // draw the enclosed ellipse
    60 
    61       Ellipse2D ellipse = new Ellipse2D.Double();
    62       ellipse.setFrame(rect);
    63       g2.draw(ellipse);
    64 
    65       // draw a diagonal line
    66 
    67       g2.draw(new Line2D.Double(leftX, topY, leftX + width, topY + height));
    68 
    69       // draw a circle with the same center
    70 
    71       double centerX = rect.getCenterX();
    72       double centerY = rect.getCenterY();
    73       double radius = 150;
    74 
    75       Ellipse2D circle = new Ellipse2D.Double();
    76       circle.setFrameFromCenter(centerX, centerY, centerX + radius, centerY + radius);
    77       g2.draw(circle);
    78    }
    79    
    80    public Dimension getPreferredSize() { return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); }
    81 }

     测试程序5:

    l 在elipse IDE中调试运行教材432页-433程序10-5,结合程序运行结果理解程序;

    l 了解2D图形中字体的设置的方法;

     1 package font;
     2 
     3 import java.awt.*;
     4 import java.awt.font.*;
     5 import java.awt.geom.*;
     6 import javax.swing.*;
     7 
     8 /**
     9  * @version 1.34 2015-05-12
    10  * @author Cay Horstmann
    11  */
    12 public class FontTest
    13 {
    14    public static void main(String[] args)
    15    {
    16       EventQueue.invokeLater(() ->
    17          {
    18             JFrame frame = new FontFrame();
    19             frame.setTitle("FontTest");
    20             frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    21             frame.setVisible(true);
    22          });
    23    }
    24 }
    25 
    26 /**
    27  * A frame with a text message component
    28  */
    29 class FontFrame extends JFrame
    30 {
    31    public FontFrame()
    32    {      
    33       add(new FontComponent());
    34       pack();
    35    }
    36 }
    37 
    38 /**
    39  * A component that shows a centered message in a box.
    40  */
    41 class FontComponent extends JComponent
    42 {
    43    private static final int DEFAULT_WIDTH = 300;
    44    private static final int DEFAULT_HEIGHT = 200;
    45 
    46    public void paintComponent(Graphics g)
    47    {
    48       Graphics2D g2 = (Graphics2D) g;
    49 
    50       String message = "Happy  every  day!";
    51 
    52       Font f = new Font("Serif", Font.BOLD, 36);
    53       g2.setFont(f);
    54 
    55       // measure the size of the message
    56 
    57       FontRenderContext context = g2.getFontRenderContext();
    58       Rectangle2D bounds = f.getStringBounds(message, context);
    59 
    60       // set (x,y) = top left corner of text
    61 
    62       double x = (getWidth() - bounds.getWidth()) / 2;
    63       double y = (getHeight() - bounds.getHeight()) / 2;
    64 
    65       // add ascent to y to reach the baseline
    66 
    67       double ascent = -bounds.getY();
    68       double baseY = y + ascent;
    69 
    70       // draw the message
    71 
    72       g2.drawString(message, (int) x, (int) baseY);
    73 
    74       g2.setPaint(Color.LIGHT_GRAY);
    75 
    76       // draw the baseline
    77 
    78       g2.draw(new Line2D.Double(x, baseY, x + bounds.getWidth(), baseY));
    79 
    80       // draw the enclosing rectangle
    81 
    82       Rectangle2D rect = new Rectangle2D.Double(x, y, bounds.getWidth(), bounds.getHeight());
    83       g2.draw(rect);
    84    }
    85    
    86    public Dimension getPreferredSize() { return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); }
    87 }

     测试程序6:

    l 在elipse IDE中调试运行教材436页-437程序10-6,结合程序运行结果理解程序;

    l 了解2D图形图像的显示方法。

     1 package image;
     2 
     3 import java.awt.*;
     4 import javax.swing.*;
     5 
     6 /**
     7  * @version 1.34 2015-05-12
     8  * @author Cay Horstmann
     9  */
    10 public class ImageTest
    11 {
    12    public static void main(String[] args)
    13    {
    14       EventQueue.invokeLater(() ->
    15          {
    16             JFrame frame = new ImageFrame();
    17             frame.setTitle("ImageTest");
    18             frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    19             frame.setVisible(true);
    20          });
    21    }
    22 }
    23 
    24 /**
    25  * A frame with an image component 
    26  */
    27 class ImageFrame extends JFrame
    28 {
    29    public ImageFrame()
    30    {
    31       add(new ImageComponent());
    32       pack();
    33    }
    34 }
    35 
    36 /**
    37  * A component that displays a tiled image
    38  */
    39 class ImageComponent extends JComponent
    40 {
    41    private static final int DEFAULT_WIDTH = 300;
    42    private static final int DEFAULT_HEIGHT = 200;
    43 
    44    private Image image;
    45 
    46    public ImageComponent()
    47    {
    48       image = new ImageIcon("blue-ball.gif").getImage();
    49    }
    50 
    51    public void paintComponent(Graphics g)
    52    {
    53       if (image == null) return;
    54 
    55       int imageWidth = image.getWidth(null);
    56       int imageHeight = image.getHeight(null);
    57 
    58       // draw the image in the upper-left corner
    59 
    60       g.drawImage(image, 0, 0, null);
    61       // tile the image across the component
    62 
    63       for (int i = 0; i * imageWidth <= getWidth(); i++)
    64          for (int j = 0; j * imageHeight <= getHeight(); j++)
    65             if (i + j > 0) 
    66                g.copyArea(0, 0, imageWidth, imageHeight, i * imageWidth, j * imageHeight);
    67    }
    68    
    69    public Dimension getPreferredSize() 
    70    { 
    71        return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); 
    72    }
    73 }

    实验2:课后完成PTA平台题目集:2018秋季西北师范大学面向对象程序设计(Java)练习题集(ch6-ch9)

    实验总结:

     通过这次的课程设计的学习,我学到了Java中开发图形应用程序的常用控件、 熟悉了JAVA SWING中的容器、组件、布局以及事件监视器和事件接口的使用。通过该实验掌握了JAVA图形界面程序设计的方法。
    对如何创建框架,以及如何生成一个绘制图形的面板 ,以及如何在面板上绘制图形有了一定的了解,以及如何设置窗口中的字体,以及窗口的背景,还有字体大小字体颜色有了一定了解,通过对源码的查看,对如何设计窗口,以及窗口中的一些属性有了进一步的理解。
     
  • 相关阅读:
    Laravel入坑指南(5)——请求与响应
    Laravel入坑指南(4)——数据库(Mysql)
    CentOS7 开机网卡加载失败
    个人CKeditor的config.js配置
    取消ie浏览器edge浏览器输入框右边的叉和眼睛
    angularjs中ckeditor的destroy问题
    angular js ckeditor directive示例代码
    建立没有文件名的文件
    设置ckeditor文本框的宽度为百分比自适应
    js中遍历删除数组中的项(项目中遇到的问题解决)
  • 原文地址:https://www.cnblogs.com/wy201771010126/p/9965683.html
Copyright © 2011-2022 走看看