201871010101-陈来弟《面向对象程序设计(Java)》第十二周学习总结
201871010101-陈来弟《面向对象程序设计(Java)》第十二周学习总结
实验十 集合与GUI初步
实验时间 2019-11-14
第一部分 理论部分
1.(1) 用户界面(User Interface)用户与计算机系统(各种程序)交互的接口
(2)图形用户界面(Graphical User Interface)以图形方式呈现的用户界面
2.AWT:Java 的抽象窗口工具箱( Abstract WindowToolkit, AWT)包含在java.awt包中,它提供了许多用来设计GUI的组件类和容器类。
. AWT库处理用户界面元素的方法:把图形元素的创建和行为委托给本地GUI工具箱进行处理。
. 应用AWT编写依赖于本地用户界面元素GUI会暴露出一些缺陷。例如,菜单、滚动条和文本域这些
用户界面元素,在不同的平台上,操作行为上存在一些微妙的差异。
3.Swing:
Swing用户界面库是非基于对等体的GUI工具箱。
Swing具有更丰富并且更方便的用户界面元素集合。
Swing对底层平台的依赖很少,因此与平台相关的bug很少。
Swing会带来交叉平台上的统一视觉体验。
Swing类库被放在javax.swing包里。
4.AWT与Swing的关系
大部分AWT组件都有其Swing的等价组件。
Swing组件的名字一般是在AWT组件名前面添加一个字母“J”,如:JButton,JFrame,JPanel等。
二..创建框架
1.组件:构成图形用户界面的元素,拿来即用用图形表示(能在屏幕上显示,能和用户进行交互)
2.通常把由Component类的子类或间接子类创建的对象称为一个组件。
3.容器:容器是Java中能容纳和排列组件的组件。常用的容器是框架(Frame,JFrame)
例:Frame fra = new Frame(“这是一个窗口”);
4.添加组件:
Container类提供了一个方法add(),用来在容器类组件对象中添加其他组件。
容器本身也是一个组件,可以把一个容器添加到另一个容器里,实现容器嵌套。
5.框架(Frame)的创建:
(1)创建空框架:在Java中,常采用框架(Frame)创建初始界面,即GUI的顶层窗口。
AWT库中有一个基于对等体的Frame类。该类的Swing版本为JFrame,JFrame是Frame子类。
(2)框架定位与框架属性:
定位:
—常用Component类的setLocation和setBounds方法
常用属性
—Title:框架标题
—IconImage:框架图标
(3)确定框架的大小:通过调用Toolkit类的方法来得到屏幕尺寸信息
6.在组件中显示信息
在AWT中可调用add()方法把组件直接添加到AWTFrame中,在Swing中组件则添加到内容窗格里。
其中内容窗格是用来添加组件的,添加代码如下:
Container contentPane = getContentPane();
Component c=…;contentPane.add(c);. 用户也可以自行创建一个组件类,并在组件上进行绘制,此时需要重载paintComponent()。
用户的自建组件也可添加到内容窗格里。
. paintComponent(Graphics g)定义在JComponent类中,该方法在窗口需要重新绘图时(如扩大窗口或极小化窗口),被系统自动调用
.. paintComponent()方法被调用时,系统就自动产生一个Graphics类型的参数,传递给paintComponent方法中的参数g。
组件的激活与可见性:
public void setEnabled(boolean b):设置组件是否可被激活。
当参数b取值true时,组件可以被激活。
当参数b取值false 时,组件不可激活。
默认情况下,组件是可以被激活的。
public void setVisible(boolean b):设置组件在该容器中的可见性。
当b取值true时,组件在容器中可见。
当b取值false时,组件在容器中不可见。
除了Window型组件外,其它类型组件默认是可见的。
第二部分:理论部分
1、实验目的与要求
(1) 掌握Vetor、Stack、Hashtable三个类的用途及常用API;
(2) 掌握ArrayList、LinkList两个类的用途及常用API。
(3) 掌握Java GUI中框架创建及属性设置中常用类的API;
(4) 应用结对编程(Pair programming),体验程序开发中的两人合作。
2、实验内容和步骤
实验1: 导入第9章示例程序,测试程序并进行代码注释。
测试程序1:
l 使用JDK命令运行编辑、运行以下三个示例程序,结合运行结果理解程序;
l 掌握Vetor、Stack、Hashtable三个类的用途及常用API。
//示例程序1 import java.util.Vector; class Cat { private int catNumber; Cat(int i) { catNumber = i; } void print() { System.out.println("Cat #" + catNumber); } } public class Cats{ public static void main(String[] args){ Vector<Cat> cats= new Vector<Cat>(); for(int i=0; i<7; i++) cats.addElement(new Cat(i)); for(int i=0; i<cats.size(); i++) (cats.elementAt(i)).print(); } } |
||
|
- //示例程序1
- import java.util.Vector;
- class Cat {
- private int catNumber;
- Cat(int i) {
- catNumber = i;
- }
- void print() {
- System.out.println("Cat #" + catNumber);
- }
- }
- public class Cats{
- public static void main(String[] args){
- Vector<Cat> cats= new Vector<Cat>();
- for(int i=; i<; i++)
- cats.addElement(new Cat(i));
- for(int i=; i<cats.size(); i++)
- (cats.elementAt(i)).print();
- }
- }
示例一的运行结果:
在命令行上面运行的结果如图:
- //示例程序2
- import java.util.*;
- public class Stacks
- {
- static String[] months={"金","银","铜","铁"};
- public static void main(String[] args){
- Stack<String> stk = new Stack<String> ();
- 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:
l 使用JDK命令编辑运行ArrayListDemo和LinkedListDemo两个程序,结合程序运行结果理解程序;
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(11)); al.add(new Integer(12)); al.add(new Integer(13)); al.add(new String("hello")); // First print them out using a for loop. System.out.println("Retrieving by index:"); for (int i = 0; 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(0); while (li.hasNext()) System.out.println(li.next()); if (l.indexOf("Hello") < 0) System.err.println("Lookup does not work"); else System.err.println("Lookup works"); } } |
- 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");
- }
- }
其运行结果:
在命令行上面运行的结果如图:
l 在Elipse环境下编辑运行调试教材360页程序9-1,结合程序运行结果理解程序;
l 掌握ArrayList、LinkList两个类的用途及常用API。
- - 代码:
- package linkedList;
- import java.util.*;
- /**
- * This program demonstrates operations on linked lists.
- * @version 1.12 2018-04-10
- * @author Cay Horstmann
- */
- public class LinkedListTest
- {
- public static void main(String[] args)
- {
- LinkedList<String> a = new LinkedList<String>();
- a.add("Amy");
- a.add("Carl");
- a.add("Erica");
- LinkedList<String> b = new LinkedList<String>();
- b.add("Bob");
- b.add("Doug");
- b.add("Frances");
- b.add("Gloria");
- // merge the words from b into 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);
- // remove every second word from b
- bIter = b.iterator();
- while (bIter.hasNext())
- {
- bIter.next(); // skip one element
- if (bIter.hasNext())
- {
- bIter.next(); // skip next element
- bIter.remove(); // remove that element
- }
- }
- System.out.println(b);
- // bulk operation: remove all words in b from a
- a.removeAll(b);
- System.out.println(a);
- }
- }
运行结果:
LinkedList类
LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在 LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。
注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:
ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。
size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。
每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法 并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。
和LinkedList一样,ArrayList也是非同步的(unsynchronized)。
实验2:导入第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(, ,, );
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- frame.setVisible(true);
- }
- }
运行结果:
l 在elipse IDE中调试运行教材407页程序10-1,结合程序运行结果理解程序;与上面程序对比,思考异同;
l 掌握空框架创建方法;
l 了解主线程与事件分派线程概念;
l 掌握GUI顶层窗口创建技术。
- - 代码:
- package simpleFrame;
- import java.awt.*;
- import javax.swing.*;
- /**
- * @version 1.34 2018-04-10
- * @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 = ;
- private static final int DEFAULT_HEIGHT = ;
- 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.35 2018-04-10
- * @author Cay Horstmann
- */
- public class SizedFrameTest
- {
- public static void main(String[] args)
- {
- EventQueue.invokeLater(() ->
- {
- SizedFrame 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 / , screenHeight / );
- setLocationByPlatform(true);
- // set frame icon
- Image img = new ImageIcon("icon.gif").getImage();
- setIconImage(img);
- }
- }
运行结果:
测试程序3:
l 在elipse IDE中调试运行教材418页程序10-3,结合运行结果理解程序;
l 掌握在框架中添加组件;
掌握自定义组件的用法。
- - 代码:
- package notHelloWorld;
- import javax.swing.*;
- import java.awt.*;
- /**
- * @version 1.34 2018-04-10
- * @author Cay Horstmann
- */
- public class NotHelloWorld
- {
- public static void main(String[] args)
- {
- EventQueue.invokeLater(() ->
- {
- NotHelloWorldFrame 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);
- }
- }
运行结果:
第三部分:实验总结
对如何创建框架,以及如何生成一个绘制图形的面板 ,以及如何在面板上绘制图形有了一定的了解,以及如何设置窗口中的字体,以及窗口的背景,还有字体大小字体颜色有了一定了解,通过对源码的查看,对如何设计窗口,以及窗口中的一些属性有了进一步的理解。
201871010101-陈来弟《面向对象程序设计(Java)》第十二周学习总结的更多相关文章
- 20155322 2016-2017-2 《Java面向对象程序设计》第十二周课堂练习之Arrays和String单元测试
20155322 2016-2017-2 <Java面向对象程序设计>第十二周课堂练习之Arrays和String单元测试 练习目地 在IDEA中以TDD的方式对String类和Array ...
- 201571030332 扎西平措 《面向对象程序设计Java》第八周学习总结
<面向对象程序设计Java>第八周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https: ...
- 201521123061 《Java程序设计》第十二周学习总结
201521123061 <Java程序设计>第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对 ...
- 201521123072《java程序设计》第十二周学习总结
201521123072<java程序设计>第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象 ...
- 201521123038 《Java程序设计》 第十二周学习总结
201521123038 <Java程序设计> 第十二周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student ...
- 201521123122 《java程序设计》第十二周学习总结
## 201521123122 <java程序设计>第十二周实验总结 ## 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将St ...
- 201771010118马昕璐《面向对象程序设计java》第八周学习总结
第一部分:理论知识学习部分 1.接口 在Java程序设计语言中,接口不是类,而是对类的一组需求描述,由常量和一组抽象方法组成.Java为了克服单继承的缺点,Java使用了接口,一个类可以实现一个或多个 ...
- 201771010134杨其菊《面向对象程序设计java》第八周学习总结
第八周学习总结 第一部分:理论知识 一.接口.lambda和内部类: Comparator与comparable接口: 1.comparable接口的方法是compareTo,只有一个参数:comp ...
- 201771010134杨其菊《面向对象程序设计java》第七周学习总结
第七周学习总结 第一部分:理论知识 1.继承是面向对象程序设计(Object Oriented Programming-OOP)中软件重用的关键技术.继承机制使用已经定义的类作为基础建立新的类定义,新 ...
- 201521123005 《Java程序设计》 第十二周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...
随机推荐
- shiro异步请求返回JSON响应
shiro异步请求返回JSON响应 需求1:当shiro请求资源,但是没有进行认证时,默认是进行重定向,现在需要返回JSON响应.注意异步请求,服务器重定向后,ajax拿到的是浏览器重定向后的到的页面 ...
- table的常用属性
Table属性: Cellspacing:单元格与单元格之间或者单元格与表格之间的 距离. Cellpadding:单元格边框与内容之间的距离 Colspan:跨列.合并列. Rowspan:跨行,行 ...
- aliyun-oss 通过redis来实现跨域上传图片到阿里 OSS并回显进度条
public class PutObjectProgressListener implements ProgressListener { private long bytesWritte ...
- sublime3配置
1.sunblim3配置 一旦配置好了,如果换了一台电脑那直接将C:\Users\djx\AppData\Roaming\Sublime Text 3\Packages\User文件夹拷贝到新下载的s ...
- 在线程内关闭thread handle,导致server crash
很多年以前了,那时tester发现一个server crash,通过测试pager功能很多次,可以把server搞崩溃. 一般来说,能再现的bug都不难改,不过这次因为要跑很多次test,才能再现cr ...
- 用scratch写了一个win98 界面模拟
scratch模拟win98 玩耍,放在网上了https://kada.163.com/project/4216461-3515165.htm
- vue_05项目配置
目录 vue项目配置: 前端样式结构: settings配置: vue项目路由配置: vue全局js配置: vue全局css配置: 父传子: 父组件 子组件 二.子传父 子组件 父组件 vue项目配置 ...
- lanyu 激活idea
编辑 C:\Windows\System32\drivers\etc\hosts 文件,最后面加入下面两行 0.0.0.0 account.jetbrains.com 0.0.0.0 www.jetb ...
- 公式推导【IoUNet//ECCV2018】
Jiang B, Luo R, Mao J, Xiao T, Jiang Y. Acquisition of localization confidence for accurate object d ...
- 详解 IaaS、PaaS和SaaS 以及他们各自的代表公司
——IaaS,PaaS和SaaS 是云计算领域的专业术语,也是云计算的三种服务模式. (1)SaaS:Software as a Service,软件即服务(也称为云应用程序服务) . 云市场中企 ...