马凯军201771010116《面向对象与程序设计Java》第十二周学习总结

一、理论与知识学习部分

Java的抽象窗口工具箱(Abstract Window Toolkit, AWT)包含在java.awt包中,它提供了许多用来设计GUI的组件类和容器类。

大部分AWT组件都有其Swing的等价组件,Swing组件的名字一般是在AWT组件名前面添加一个字母“J”。

通常把由Component类的子类或间接子类创建的对象称为一个组件。

组件类的常用API: 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) 把组件缩放到指定的大小

void setLocation(int x,int y)

容器是Java中能容纳和排列组件的组件。常用的容器是框架(Frame,JFrame)。

Container类提供了一个方法add(),用来在容器类 组件对象中添加其他组件。

容器本身也是一个组件,可以把一个容器添加到 另一个容器里,实现容器嵌套。

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

确定框架大小:通过调用Toolkit类的方法来得到屏幕尺寸信息。

Jframe的结构:它由根面板、层级面板、玻璃面板和内容面板(content pane)四层面板构成。

实验十二  图形程序设计

实验时间 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:

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,结合程序运行结果理解程序;与上面程序对比,思考异同;

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

l 掌握空框架创建方法;

l 了解主线程与事件分派线程概念;

l 掌握GUI顶层窗口创建技术。

测试程序2:

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

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()
   {
      // get screen dimensions

      Toolkit kit = Toolkit.getDefaultToolkit();
      Dimension screenSize = kit.getScreenSize();
      int screenHeight = screenSize.height;
      int screenWidth = screenSize.width;

      // set frame width, height and let platform pick screen location

      setSize(screenWidth / 2, screenHeight / 2);
      setLocationByPlatform(true);

      // set frame icon

      Image img = new ImageIcon("icon.gif").getImage();
      setIconImage(img);
   }
}

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

测试程序3:

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

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

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

测试程序4:

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

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()
   {
      // get screen dimensions

      Toolkit kit = Toolkit.getDefaultToolkit();
      Dimension screenSize = kit.getScreenSize();
      int screenHeight = screenSize.height;
      int screenWidth = screenSize.width;

      // set frame width, height and let platform pick screen location

      setSize(screenWidth / 2, screenHeight / 2);
      setLocationByPlatform(true);

      // set frame icon

      Image img = new ImageIcon("icon.gif").getImage();
      setIconImage(img);
   }
}

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

测试程序5:

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

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

      // measure the size of the message

      FontRenderContext context = g2.getFontRenderContext();
      Rectangle2D bounds = f.getStringBounds(message, context);

      // set (x,y) = top left corner of text

      double x = (getWidth() - bounds.getWidth()) / 2;
      double y = (getHeight() - bounds.getHeight()) / 2;

      // add ascent to y to reach the baseline

      double ascent = -bounds.getY();
      double baseY = y + ascent;

      // draw the message

      g2.drawString(message, (int) x, (int) baseY);

      g2.setPaint(Color.LIGHT_GRAY);

      // draw the baseline

      g2.draw(new Line2D.Double(x, baseY, x + bounds.getWidth(), baseY));

      // draw the enclosing rectangle

      Rectangle2D rect = new Rectangle2D.Double(x, y, bounds.getWidth(), bounds.getHeight());
      g2.draw(rect);
   }

   public Dimension getPreferredSize() { return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); }
}

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

测试程序6:

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

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

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("book.jpg.jpg").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。

原文地址:https://www.cnblogs.com/zero--/p/9965102.html

时间: 2024-10-24 22:39:33

马凯军201771010116《面向对象与程序设计Java》第十二周学习总结的相关文章

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

Java第十二周学习心得        在第十二周的理论课堂上,老师对1-4章的内容进行了测验,程序填空题和写程序题的分不是很高,程序题的重要部分都有遗漏,对于计算图书的总数那部分不会写,扣分较多,但是现在已经掌握了,接下来要在电脑上多多练习,周五老师对新内容第十章进行了讲解,这周到现在还没有遇到什么问题.

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

第十二周的java课学习已经结束,上周对1~4章的内容进行了复习检测,在最后一道编程题中遇到了困难,在程序中,求图书地总册数去的程序没写出来,老师讲完以后写出来了,这周我们学习了Java的抽象窗口工具箱(Abstract Window Toolkit, AWT)包含在java.awt包中,它提供了许多用来设计GUI的组件类和容器类.AWT库处理用户界面元素的方法:把图形元素的创建和行为委托给本地GUI工具箱进行处理. Swing组件的名字一般是在AWT组件名前面添加一个字母"J",打算

201521123116 《java程序设计》第十二周学习总结

1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 Q1.字符流与文本文件:使用 PrintWriter(写),BufferedReader(读) 1.1 生成的三个学生对象,使用PrintWriter的println方法写入student.txt,每行一个学生,学生的每个属性之间用|作为分隔.使用Scanner或者BufferedReader将student.txt的数据读出.(截图关键代码,出现学号)1.2 生成文件大小多少?分析该文件大

201671010114 2016-2017-2 《Java程序设计》第十二周学习总结

这周学习了图形程序设计,在编写程序中通过定义类对象来调用类中的一系列方法来实现框架的设置.Component类是图形用户界面的顶层父类,绝大多数Swing组件类都以"J"开头,将Swing和AWT组件混合在一起将会导致视觉和行为的不一致.JFrame是极少数几个不绘制在画布上的Swing组件之一.所有的Swing组件必须由事件分派线程进行配置,线程将鼠标点击和按键控制转移到用户接口组件.在这次实验中,会在自定义类的构造器中调用该类所继承类中的方法.在主类中在add方法中传进去自定义类的

马凯军201771010116《面向对象与程序设计Java》第十一周学习总结

一.理论知识部分 第九章  集合 1.数据结构介绍:线性结构:线性表,栈,队列,串,数组,文件.非线性结构:树,图. 散列表:又称为哈希表. 散列表算法的基本思想是:以结点的关键字为自变量,通过一定的函数关系(散列函数)计算出对应的函数值,以这个值作为该结点存储在散列表中的地址.当散列表中的元素存放太满,就必须进行再散列,将产生一个新的散列表,所有元素存放到新的散列表中,原先的散列表将被删除. 2.java的集合框架: JAVA的集合框架实现对各种数据结构的封装,以降低对数据管理与处理的难度.所

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

这一周我们主要学习了图形程序设计,lAWT库处理用户界面元素的方法:把图形元素的创建和行为委托给本地GUI工具箱进行处理.这有很多缺点.由于用户使用的平台各不相同,观感会有很大的差异.而swing恰好弥补了这个缺点,Swing用户界面库是非基于对等体的GUI工具箱.Swing具有更丰富并且更方便的用户界面元素集合.Swing对底层平台的依赖很少,因此与平台相关的bug很少.Swing会带来交叉平台上的统一视觉体验.Swing类库被放在javax.swing包里.在Java中把由component

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

本周周四老师对前四章的知识进行了一次测验,测验内容有些是刚开始学习的时候就做过的,还有一些是老师后来加的.通过这次测验,我觉得在编程题目上还是有所欠缺,要学会举一反三,类比书中示例程序,写出自己想要的程序.比较好的一点就是做过的题还记得,也知道错在哪里. 周五老师先对测验程序进行了上机操作编写代码,通过跟着老师的节奏,我知道了细节的重要性,使我更加严谨.后来老师进行了第十章图形程序设计的讲解,这一章我挺感兴趣的.通过老师的讲解,我掌握了Java GUI的框架创建及属性设置中常用类的API,也掌握

201671010130 2016-2017-2 《Java程序设计》第十二周学习小结

抽象窗口工具箱(Abstract Window Toolkit, AWT)包含在java.awt包中提供了许多用来设计GUI的组件类和容器类 组件在容器(比如JFrame)中的位置和大小是由布局管理器来决定的.所有的容器都会 使用一个布局管理器,通过它来自动进行组件的布局管理. 开发GUI程序步骤(截取网上经验) 1.继承JFrame(类继承) 2.定义需要的组件(成员变量) 3.创建组件(构造函数中) 4.添加组件(构造方法中) 5.设置布局管理器(构造方法中) 6.显示窗体(构造函数中) S

201621123026《JAVA程序设计》第十二周学习总结

作业12-流与文件 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 使用流与文件改造你的图书馆管理系统或购物车. 2.1 简述如何使用流与文件改造你的系统.文件中数据的格式如何? 将名字与其他信息用空格隔开,将所有信息放在一个字符串里用FileWriter写入在文件里. 2.2 简述系统中文件读写部分使用了流与文件相关的什么接口与类?为什么要用这些接口与类? 用到了File FileWriter Buffe

201621123048《java程序设计》第十二周学习总结

1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 使用流与文件改造你的图书馆管理系统或购物车. 2.1 简述如何使用流与文件改造你的系统.文件中数据的格式如何? 通过读取本地用户信息表和书籍信息表,然后存放到动态数组.程序结束后,将数据写入文件并保存数据格式是:书名,书的数量 2.2 简述系统中文件读写部分使用了流与文件相关的什么接口与类?为什么要用这些接口与类? 2.3 截图读写文件相关代码.关键行需要加注