徐思201771010132《面向对象程序设计(java)》第十二周学习总结(代码片段)

sisi-713 sisi-713     2023-01-20     370

关键词:

一、理论知识部分

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)四层面板构成。

Swing程序员最关心的是内容面板,也称为内容窗格。

在AWT中可调用add()方法把组件直接添加到AWT Frame中,在Swing中组件则添加到内容窗格里。

其中内容窗格是用来添加组件的,添加代码如下:Container contentPane = getContentPane(); Component c=…; contentPane.add(c);

用户也可以自行创建一个组件类,并在组件上进行绘制,此时需要重载paintComponent()。用户的自建组件也可添加到内容窗格里。

paintComponent(Graphics g)定义在JComponent类中,该方法在窗口需要重新绘图时(如扩大窗口或极小化窗口),被系统自动调用.

paintComponent()方法被调用时,系统就自动产生一个Graphics类型的参数,传递给paintComponent方法中的参数g。

二、实验部分

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

   

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);//设置用户在此窗体上发起 "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(() -> // lambda表达式
        
            JFrame frame = new SizedFrame();
            frame.setTitle("SizedFrame");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置用户在此窗体上发起 "close" 时默认执行的操作
            frame.setVisible(true);// 设置窗口可见
        );
    


class SizedFrame extends JFrame 
    public SizedFrame() 
        // get screen dimensions

        Toolkit kit = Toolkit.getDefaultToolkit();// 生成Toolkit对象
        Dimension screenSize = kit.getScreenSize();// 返回Dimension对象的屏幕大小
        int screenHeight = screenSize.height;// 获得Dimension对象屏幕的高度
        int screenWidth = screenSize.width;// 获得Dimension对象屏幕的宽度

        // 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);// 设置要作为此窗口图标显示的图像
    

技术分享图片

测试程序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;

        // draw a rectangle

        double leftX = 100;
        double topY = 100;
        double width = 200;
        double height = 150;

        Rectangle2D rect = new Rectangle2D.Double(leftX, topY, width, height);
        g2.draw(rect);

        // draw the enclosed ellipse

        Ellipse2D ellipse = new Ellipse2D.Double();
        ellipse.setFrame(rect);
        g2.draw(ellipse);

        // draw a diagonal line

        g2.draw(new Line2D.Double(leftX, topY, leftX + width, topY + height));

        // draw a circle with the same center

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

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

技术分享图片

测试程序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 = 350;
    private static final int DEFAULT_HEIGHT = 250;

    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)

三:实验总结:

通过这次试验我了解了空框架创建方法、确定框架常用属性的设置方法、自定义组件的用法,还接触了解了2D图形的绘制方法,字体的设置的方法及图像的显示方法。通过做练习题集,对之前知识进行回顾,温故知新。

徐思201771010132《面向对象程序设计(java)》第二周学习总结

一、理论知识部分1、标识符:标识符由字母、下划线、美元符号和数字组成,且第一个符号不能为数字。标识符可用作类名、变量名、方法名、数组名、文件名等。2、关键字就是Java语言中已经被赋予特定意义的一些单词。常见... 查看详情

徐思201771010132《面向对象程序设计(java)》第七周学习总结(代码片段)

一、理论知识部分访问修饰符:private:只有该类可以访问   protected:该类及其子类的成员可以访问,同一个包中的类也可访问    public:该类或非该类均可访问  默认:相同包中的类可以访问 ... 查看详情

徐思201771010132《面向对象程序设计(java)》第九周学习总结(代码片段)

一、理论知识部分异常:在程序的执行过程中所发生的异常事件,它中断指令的正常执行。Java的异常处理机制可以控制程序从错误产生的位置转移到能够进行错误处理的位置。程序中出现的常见的错误和问题有:用户输入错误;设... 查看详情

徐思201771010132《面向对象程序设计(java)》第六周学习总结(代码片段)

一、理论知识部分继承:用已有类来构建新类的一种机制。当定义了一个新类继承了一个类时,这个新类就继承了这个类的方法和域,同时在新类中添加新的方法和域以适应新的情况。继承的特点:具有层次结构;子类继承了父... 查看详情

徐思201771010132《面向对象程序设计(java)》课程学习总结(代码片段)

1、实验目的与要求(1)综合掌握java基本程序结构;(2)综合掌握java面向对象程序设计特点;(3)综合掌握javaGUI程序设计结构;(4)综合掌握java多线程编程模型;(5)综合编程练习。2、实验内容和步骤任务1:填写课程课后调查问卷,网... 查看详情

杨玲徐思《面向对象程序设计(java)》第十一周学习总结(代码片段)

《面向对象程序设计(java)》第十一周学习总结第一部分:理论知识学习部分1、一般将数据结构分为两大类:线性数据结构和非线性数据结构。线性数据结构:线性表、栈、队列、串、数组和文件。非线性数据结构:树和图。2... 查看详情

08-面向对象----j

一面向对象的程序设计的由来请参考:http://www.cnblogs.com/linhaifeng/articles/6428835.html二什么是面向对象的程序设计及为什么要有它面向过程的程序设计的核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条... 查看详情

2020面向对象设计与构造第三单元博客总结(代码片段)

面向对象设计与构造第三单元总结一、JML规格化设计JML,全称TheJavaModelingLanguage,是用于对Java程序进行规格化描述的注释性质语言。笔者在本文总结了常见的JML语法描述。1.注释结构在注释行或注释块中,以@开头的行被认作JML注... 查看详情

面向对象

老王和隔壁的美女猜数字,一共有四次机会,猜到了就有特殊奖励publicclasstest{publicstaticvoidmain(String[]args){inti=(int)(Math.random()*10);Scannerinput=newScanner(System.in);for(intj=0;j<4;j++){System.out.println("老王第"+(j+1)+"次 查看详情

201771010126王燕《面向对象程序设计(java)》第二周学习总结

201771010126王燕《面向对象程序设计(java)》第二周学习总结一.理论知识学习部分3.1j简单的java应用程序标识符由字母、下划线、美元符号和数字组成,且第一个符号不能为数字。标识符可用作:类名、变量名、方法名、数组名... 查看详情

201823072019-2020-1《数据结构与面向对象程序设计》实验1报告

课程:《程序设计与数据结构》班级:1823姓名:王美皓学号:20182322实验教师:王美皓实验日期:2019年9月9日必修/选修:必修1.实验内容基于命令行和IDE(IntelljIDEA简易教程](http://www.cnblogs.com/rocedu/p/4421202.html)进行简单的Java程... 查看详情

杨其菊201771010134《面向对象程序设计(java)》第三周学习总结(代码片段)

  《面向对象程序设计(Java)》第三周学习总结第一部分:理论知识 这周课程没有新进度,由于感觉对基础语法的不熟悉,复习了一遍前三章的细碎知识,学到一些之前不知道的原理: 1.计算机高级语言按程序的... 查看详情

c++面向对象的主要体现是啥?

...得对我有用的话,我会再追加分。)C++面向对象是表现在程序设计的过程上,它是突破了C的结构化设计而出现的完全以实际问题为入手点的。C++的面向对象3个特性:1.封装。2.继承。3.多态。尤其重要的是,它采用类的设计,杜... 查看详情

201771010110孔维滢《面向对象程序设计(java)》第十二周学习总结

理论知识部分1.Java的抽象窗口工具箱(AbstractWindowToolkit,AWT)包含在java.awt包中,它提供了许多用来设计GUI的组件类和容器类。2.Swing用户界面库是非基于对等体的GUI工具箱。Swing类库被放在javax.swing包里。3.大部分AWT组件都有其Swing... 查看详情

马凯军201771010116《面向对象与程序设计java》第十二周学习总结(代码片段)

一、理论与知识学习部分Java的抽象窗口工具箱(AbstractWindowToolkit,AWT)包含在java.awt包中,它提供了许多用来设计GUI的组件类和容器类。大部分AWT组件都有其Swing的等价组件,Swing组件的名字一般是在AWT组件名前面添加一个字母“J... 查看详情

201771010134杨其菊《面向对象程序设计java》第十二周学习总结(代码片段)

...bsp; 内容概要: AWT与Swing简介;框架的创建;图形程序设计; 显示图像;1.AWT组件:2.Swing组件层次关系3.AWT与Swing的关系:大部分AWT组件都有其Swing的等价组件; Swing组件的名字一般是在AWT组件名前面添加一个字母“J 查看详情

面向对象程序设计介绍以及面向对象的基本特征

  面向对象的程序设计(ObjectOrientedProgramming,OOP)方法是目前比较流行的程序设计方法,和面向过程的程序设计比,它更符合人类的自然思维方式。在面向过程程序设计中,程序=数据+算法,数据和对数据的操作是分离的,如... 查看详情

《面向对象程序设计概述》牛咏梅

面向对象程序设计概述牛咏梅(南阳理工学院河南南阳473000)摘要:分析传统程序设计方法与面向对象程序设计方法之间的差别,重点分析了面向对象程序设计方法的特点,介绍了面向对象程序设计方法的步骤及其优点。关键词:面向对... 查看详情