达拉草201771010105《面向对象程序设计(java)》第十二周学习总结

第一部分:理论知识

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

AWT库处理用户界面元素的方法:把图形元素的创 建和行为委托给本地GUI工具箱进行处理。

swing:

Swing用户界面库是非基于对等体的GUI工具箱。

Swing具有更丰富并且更方便的用户界面元素集合。

Swing类库被放在javax.swing包里。

大部分AWT组件都有其Swing的等价组件。

Swing组件的名字一般是在AWT组件名前面添加一个字母“J”,如:JButton,JFrame,JPanel等。

组件:构成图形用户界面的元素,拿来即用 用图形表示(能在屏幕上显示,能和用户进行交互)

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

容器:容器是Java中能容纳和排列组件的组件。

常用的容器是框架(Frame,JFrame)

添加组件:

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

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

框架的创建:

创建空框架

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

2.AWT库中有一个基于对等体的Frame类。

3.该类的Swing版本为JFrame,JFrame是Frame子类。

框架定位与框架属性

定位: 常用Component类的setLocation和setBounds方法

常用属性 :Title:框架标题   IconImage:框架图标

确定框架大小

通过调用Toolkit类的方法来得到屏幕尺寸信息。

在组件中显示信息:

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

2D图形:

Java SE了包含一个Java 2D库,该库提供了一个 非常强大的图形操作集。

Java 2D图形类使用浮点数坐标系,这样可为坐标 指定单位。

2D库为每个图形类提供两个版本的静态内部类: Retangle2D.Float 和Retangle2D.Double

实验十二  图形程序设计

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

}

}

l  在elipse IDE中调试运行教材407页程序10-1,结合程序运行结果理解程序;与上面程序对比,思考异同;

l  掌握空框架创建方法;

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

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

 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 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()
{
// get screen dimensions Toolkit kit = Toolkit.getDefaultToolkit();//生成Toolkit对象
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);//将框架大小设定为上面取值的%50
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());//调用add方法
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); // 测量消息的大小 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("unw.jpg").getImage();//读取图像
} public void paintComponent(Graphics g)//用paintComponent方法实现平铺显示
{
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);//使用copyArea方法将图形拷贝到整个窗口
} public Dimension getPreferredSize() { return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); }
}

运行结果如下:

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

实验总结:

通过本周的学习,我掌握了Java GUI中框架创建及属性设置中常用类的API;我知道了图形用户界面的一些基础的设计操作,比如窗口显示不同图形,文字等等,所以我觉得这些挺有意思的。

达拉草201771010105《面向对象程序设计(java)》第十二周学习总结的更多相关文章

  1. 20155322 2016-2017-2 《Java面向对象程序设计》第十二周课堂练习之Arrays和String单元测试

    20155322 2016-2017-2 <Java面向对象程序设计>第十二周课堂练习之Arrays和String单元测试 练习目地 在IDEA中以TDD的方式对String类和Array ...

  2. 201571030332 扎西平措 《面向对象程序设计Java》第八周学习总结

    <面向对象程序设计Java>第八周学习总结   项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https: ...

  3. 201521123061 《Java程序设计》第十二周学习总结

    201521123061 <Java程序设计>第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对 ...

  4. 201521123072《java程序设计》第十二周学习总结

    201521123072<java程序设计>第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象 ...

  5. 201521123038 《Java程序设计》 第十二周学习总结

    201521123038 <Java程序设计> 第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student ...

  6. 201521123122 《java程序设计》第十二周学习总结

    ## 201521123122 <java程序设计>第十二周实验总结 ## 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将St ...

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

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

  8. 201771010134杨其菊《面向对象程序设计java》第八周学习总结

    第八周学习总结 第一部分:理论知识 一.接口.lambda和内部类:  Comparator与comparable接口: 1.comparable接口的方法是compareTo,只有一个参数:comp ...

  9. 201771010134杨其菊《面向对象程序设计java》第七周学习总结

    第七周学习总结 第一部分:理论知识 1.继承是面向对象程序设计(Object Oriented Programming-OOP)中软件重用的关键技术.继承机制使用已经定义的类作为基础建立新的类定义,新 ...

  10. 201521123005 《Java程序设计》 第十二周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...

随机推荐

  1. Linux centos 下安装nginx

                     一.安装编译工具及库文件      yum -y install make zlib zlib-devel gcc-c++ libtool openssl opens ...

  2. python脚本实现自动安装nginx

    本文python脚本实现自动化安装是源码安装.实现任意版本安装,默认版本是1.13.11,也可以更改默认版本,手动配置安装目录. 环境:Ubuntu16.04,python3以上版本,Ubuntu自带 ...

  3. Maven中settings.xml文件各标签含义

    原文地址:http://www.cnblogs.com/jingmoxukong/p/6050172.html?utm_source=gold_browser_extension settings.x ...

  4. Linux基础篇三:文件系统

    /bin      实际上是  /usr/bin /sbin    实际上是  /usr/sbin /usr/bin 里面的命令其实是依赖  /lib64  或者    /lib32 ldd  /us ...

  5. smooth curve|population|sample

    Distribution Shapes 由直方图到 smooth curve   1.this distribution of heights is bell shaped(or mound shap ...

  6. supervisor安装与配置实践版

    应用场景 系统:centos7 需求:监控一个swooleWebSocket.php文件,程序使用的是8080端口,挂了自动被supervisor拉起来 一.首先要安装supervisor软件 yum ...

  7. 2)echo count(strlen("test")) 的输出为____

    结果是  1: 因为count测的是单元的数目,你的一个数组就是一个单元,所以 他的结果就是1 题目出处: https://www.nowcoder.com/test/question/done?ti ...

  8. idea出现 Unable to open debugger port (127.0.0.1:xxxx): java.net.SocketException "socket closed" 解决方案

    第一种:重启电脑,太费劲: 第二种: 1)根据端口号找到进程pid netstat -aon|findstr "1099" 2)杀掉进程pid即可 netstat -aon|fin ...

  9. asp.net---jquery--ajax 实现滚动条滚动到底部分页显示

    前台:aspx页面 var bgtime = $(" #date1 ").val(); var overtime = $(" #date2 ").val(); ...

  10. Hypothesis Tests for One Population Mean When σ Is Unknown|other

    9.5 Hypothesis Tests for One Population Mean When σ Is Unknown 使用t分布: What If the Assumptions Are No ...