201271050130-滕江南-《面向对象程序设计(java)》第十二周学习总结

时间:2021-07-15 20:32:02

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

201271050130-滕江南-《面向对象程序设计(java)》第十二周学习总结

//示例程序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());
}
}

201271050130-滕江南-《面向对象程序设计(java)》第十二周学习总结

//示例程序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);
}
}

201271050130-滕江南-《面向对象程序设计(java)》第十二周学习总结

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

201271050130-滕江南-《面向对象程序设计(java)》第十二周学习总结

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

201271050130-滕江南-《面向对象程序设计(java)》第十二周学习总结

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

201271050130-滕江南-《面向对象程序设计(java)》第十二周学习总结

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

201271050130-滕江南-《面向对象程序设计(java)》第十二周学习总结

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

201271050130-滕江南-《面向对象程序设计(java)》第十二周学习总结

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

201271050130-滕江南-《面向对象程序设计(java)》第十二周学习总结

 实验总结

在本周的学习过程中,复习了上周内容即泛型程序设计的知识,学习了新的关于集合类的知识,总体来说一点点跟上大家的进度。之前对Eclipse软件的使用不熟悉,好多程序性的错误来源于初始创建不准确。在群文件中按照步骤学习操作,基本掌握了使用方法。本周的测试程序基本能够自主完成,但是对于程序的理解程度还不够,只能照本宣科敲代码,希望后续能多花时间在敲代码上,提升写代码的思路和速度!