201271050130-滕江南-《面向对象程序设计(java)》第十二周学习总结
项 目 |
内 容 |
这个作业属于哪个课程 |
https://www.cnblogs.com/nwnu-daizh |
这个作业的要求在哪里 |
https://www.cnblogs.com/nwnu-daizh/p/11867214.html |
作业学习目标 |
(1) 掌握Vetor、Stack、Hashtable三个类的用途及常用API; (2) 掌握ArrayList、LinkList两个类的用途及常用API; (3) 了解java集合框架体系组成; (4) 掌握Java GUI中框架创建及属性设置中常用类的API; (5) 了解Java GUI中2D图形绘制常用类的API; |
第一部分:总结第九章、第十章理论知识
第九章 集合
1、Java的集合框架
Java的集合框架实现对各种数据结构的封装;
所谓框架就是一个类库,框架中包括一些通用接口和超类,编程者实现这些接口或者 创建这些超类的子类就可方便的设计程序所需要的类;
集合(或者称为容器)是一类包含多个元素并提供对所包含元素的操作方法的类,其包含的元素可以由同一类型的对象组成,也可以由不同类型的对象组成;
集合框架:Java集合类库的统一架构。
2、集合类的作用
(1)Java的集合类提供了对基本数据类型的支持;
(2)例如:Vector、Hashtable、Stack等;
3、集合类的使用
Java的集合类包含在java.util包中;
import java.util.*;
4、集合类的特点
只容纳对象:
注意:数组可以容纳基本数据类型的数据和对象;
如果集合类中想使用基本数据类型,邮箱利用集合类的灵活性,可以把基本数据类型数据封装成该数据类型的包装器对象,然后放入集合中处理;
5、新旧集合类
在Java1.0和JDK1.1中提供了Vector(矢量),Hashtable(哈希表),Stack(堆栈),Properties(属性集)等集合类,尽管这些类非常有用,但是彼此独立,缺少一个统一集中的机制。
6、Vector类
Vector类类似长度可变的数组;
Vector中只能存放对象;
Vector的元素通过下标进行访问;
Vector类关键属性:
——capacity表示集合最多能容纳的元素个数;
——capacityIncrement表示每次增加多少容量;
——size表示当前元素的集合;
7、Vector类的关键方法
——void addElement(Object obj)
——void add(int index, Object element)
——Object elementAt(int index)
——void insertElementAt(Object obj, int index)
8、Stack类:
Stack类是Vectoe类的子类;
Stack类描述堆栈数据结构,即FILO;
Stack类的关键方法:
——public void push(Object item) //把项压入栈顶
——public Object pop() //移除栈顶元素对象并作为此函数的值返回该对象
——public Object peek() //查看栈顶元素而不移除它
——public Boolean empty() //测试堆栈是否为空
9、Hashtable类
Hashtable类通过键值来查找元素;
Hashtable类用散列码(hashcode)来确定值。所有对象都有一个散列码,可以通过Object类的hashCode()方法来获得;
10、集合的基本框架:
第10章 图形程序设计
10.1 AWT与Swing简介
1.用户界面(User Interface) 的概念:用户与计算机系统(各种程序)交互的接口
2.图形用户界面(Graphical User Interface)的概念: 以图形方式呈现的用户界面
3.AWT:
a. Java的抽象窗口工具箱(AbstractWindow Toolkit,AWT)包含在java.awt包中,它提供了许 多用来设计GUI的组件类和容器类。
b. AWT库处理用户界面元素的方法:把图形元素的创 建和行为委托给本地GUI工具箱进行处理。
c. 应用AWT编写依赖于本地用户界面元素GUI会暴露 出一些缺陷。例如,菜单、滚动条和文本域这些 用户界面元素,在不同的平台上,操作行为上存 在一些微妙的差异。
4. Swing
a. Swing用户界面库是非基于对等体的GUI工具箱。
b.Swing具有更丰富并且更方便的用户界面元素集合。
c.Swing对底层平台的依赖很少,因此与平台相关的bug很少。
d.Swing会带来交叉平台上的统一视觉体验。
e.Swing类库被放在javax.swing包里。
f. AWT与Swing的关系
(1) 大部分AWT组件都有其Swing的等价组件。
(2) Swing组件的名字一般是在AWT组件名前面添加一个字母“J”,如:JButton,JFrame,JPanel等。
10.2 框架的创建
10.2.1 组件
构成图形用户界面的元素,拿来即用 .
用图形表示(能在屏幕上显示,能和用户进行交互) –Button、Checkbox、Scrollbar、Choice、Frame
10.2.2 容器
容器是Java中能容纳和排列组件的组件。
常用的容器是框架(Frame,JFrame) 例: Frame fra= new Frame(“这是一个窗口”);
java.awt.Frame类的常用API(教材414页) void setResizable(booleanb) 缩放框架 void setTitle(String s) 设置框架标题 void setIconImage(Image image) 将Image用 作框架图标
10.2.3 添加组件
Container类提供了一个方法add(),用来在容器类 组件对象中添加其他组件。
容器本身也是一个组件,可以把一个容器添加到 另一个容器里,实现容器嵌套。
10.2.4 框架(Frame)的创建
(1)创建空框架 :在Java中,常采用框架(Frame)创建初始界面, 即GUI的顶层窗口
AWT库中有一个基于对等体的Frame类。 该类的Swing版本为JFrame,JFrame是Frame子类。
(2)框架定位与框架属性
定位: 常用Component类的setLocation和setBounds方法 常用属性
Title:框架标题
IconImage:框架图标
(3)确定框架大小 : 通过调用Toolkit类的方法来得到屏幕尺寸信息。
Toolkit kit = Toolkit.getDefaultToolkit(); //生成 Toolkit对象
Dimension screenSize= kit.getScreenSize(); //返回 Dimension对象的屏幕大小
intscreenWidth= screenSize.width; //获得Dimension对 象屏幕的宽度
intscreenHeight=screenSize.height; //获得Dimension 对象屏幕的高度
10.3 图形程序设计
图形编程这部分内容会在实验中有所体现。
包含以下特点:
1 处理2D图形
2 颜色的使用
2 字体的使用
10.4显示图像
(1)在Java应用程序中,一旦图像保存在本地或因 特网的某个位置上,就可以将它们直接读入到java 应用程序中。
String filename = “…”; Image image= ImageIcon(filename).getImage();
(2)完成将一个图像文件加载到程序中,再调用 Graphics类提供的DrawImage()显示它。
public void paintComponent(Graphics g)
{ … g.drawImage(image, x, y, null); }
第二部分:实验部分
测试程序1:
//示例程序1
import java.util.Vector;
class Cat {
private int catNumber;
Cat(int i) {
catNumber = i;
}
void print() {
System.out.println("Cat #" + catNumber);
}
}
class Dog {
private int dogNumber;
Dog(int i) {
dogNumber = i;
}
void print() {
System.out.println("Dog #" + dogNumber);
}
}
public class CatsAndDogs {
public static void main(String[] args) {
Vector cats = new Vector();
for (int i = 0; i < 7; i++)
cats.addElement(new Cat(i));
cats.addElement(new Dog(7));
for (int i = 0; i < cats.size(); i++)
((Cat) cats.elementAt(i)).print();
}
}
//示例程序2
import java.util.*; public class Stacks {
static String[] months = { "", "", "", "" }; public static void main(String[] args) {
Stack stk = new Stack();
for (int i = ; i < months.length; i++)
stk.push(months[i]);
System.out.println(stk);
System.out.println("element 2=" + stk.elementAt());
while (!stk.empty())
System.out.println(stk.pop());
}
}
//示例程序3
import java.util.*; class Counter {
int i = ; public String toString() {
return Integer.toString(i);
}
} public class Statistics {
public static void main(String[] args) {
Hashtable ht = new Hashtable();
for (int i = ; i < ; i++) {
Integer r = new Integer((int) (Math.random() * ));
if (ht.containsKey(r))
((Counter) ht.get(r)).i++;
else
ht.put(r, new Counter());
}
System.out.println(ht);
}
}
测试程序2:
import java.util.*; public class ArrayListDemo {
public static void main(String[] argv) {
ArrayList al = new ArrayList();
// Add lots of elements to the ArrayList...
al.add(new Integer());
al.add(new Integer());
al.add(new Integer());
al.add(new String("hello"));
// First print them out using a for loop.
System.out.println("Retrieving by index:");
for (int i = ; i < al.size(); i++) {
System.out.println("Element " + i + " = " + al.get(i));
}
}
}
import java.util.*;
public class LinkedListDemo {
public static void main(String[] argv) {
LinkedList l = new LinkedList();
l.add(new Object());
l.add("Hello");
l.add("zhangsan");
ListIterator li = l.listIterator();
while (li.hasNext())
System.out.println(li.next());
if (l.indexOf("Hello") < )
System.err.println("Lookup does not work");
else
System.err.println("Lookup works");
}
}
测试程序3:
package linkedList; import java.util.*; /**
* This program demonstrates operations on linked lists.
* @version 1.11 2012-01-26
* @author Cay Horstmann
*/
public class LinkedListTest
{
public static void main(String[] args)
{
List<String> a = new LinkedList<>();
a.add("Amy");
a.add("Carl");
a.add("Erica"); List<String> b = new LinkedList<>();
b.add("Bob");
b.add("Doug");
b.add("Frances");
b.add("Gloria"); // 将单词从B合并为A ListIterator<String> aIter = a.listIterator();
Iterator<String> bIter = b.iterator(); while (bIter.hasNext())
{
if (aIter.hasNext()) aIter.next();
aIter.add(bIter.next());
} System.out.println(a); // 从B中删除每个第二个单词 bIter = b.iterator();
while (bIter.hasNext())
{
bIter.next(); // 跳过一个元素
if (bIter.hasNext())
{
bIter.next(); // 跳过下一个元素
bIter.remove(); // 删除该元素
}
} System.out.println(b); // 批量操作:从A中删除B中的所有单词 a.removeAll(b); System.out.println(a);
}
}
测试程序4:
import javax.swing.*;
public class SimpleFrameTest
{
public static void main(String[] args)
{
JFrame frame = new JFrame();
frame.setBounds(, ,, );
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
测试程序5:
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 / , screenHeight / );
setLocationByPlatform(true); // 设置帧图标 Image img = new ImageIcon("icon.gif").getImage();
setIconImage(img);
}
}
测试程序6:
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 = ;
public static final int MESSAGE_Y = ; private static final int DEFAULT_WIDTH = ;
private static final int DEFAULT_HEIGHT = ; 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); }
}
实验总结:
在本周的学习过程中,复习了上周内容即泛型程序设计的知识,学习了新的关于集合类的知识,总体来说一点点跟上大家的进度。之前对Eclipse软件的使用不熟悉,好多程序性的错误来源于初始创建不准确。在群文件中按照步骤学习操作,基本掌握了使用方法。本周的测试程序基本能够自主完成,但是对于程序的理解程度还不够,只能照本宣科敲代码,希望后续能多花时间在敲代码上,提升写代码的思路和速度!