AWT菜单
前面介绍了创建GUI界面的方式:将AWT组件按某种布局摆放在容器内即可。创建AWT菜单的方式与此完全类似:将菜单条、菜单、菜单项组合在一起即可。
AWT中的菜单由如下几个类组合而成。
MenuBar:菜单条,菜单的容器。
Menu:菜单组件,菜单项的容器。它也是Menultem的子类,所以可作为菜单项使用。
PopupMenu:上下文菜单组件(右键菜单组件)。
Menultem:菜单项组件,真正被点击的选项。
CheckboxMenuItem: 复选框菜单项组件。
MenuShortcut:菜单快捷键组件。
下面是它们的继承,组合关系:
这里面的Menu实现了菜单容器接口:public class Menu extends MenuItem implements MenuContainer, Accessible,所以可以用来装Menultem,如图上Menultem组合成Menu。而MenuBar也实现了菜单容器接口,可以装Menu,而Menu组合成MenuBar。
上面的途中,红色框是MenuBar,File,即绿色框是一个Menu, ...
事件处理
本文讲述GUI中的事件处理。
模型及流程 为了使图形界面能够接收用户的操作,必须给各个组件加上事件处理机制。在事件处理的过程中,主要涉及三类对象。
Event Source (事件源):事件发生的场所,通常就是各个组件,例如按钮、窗口、菜单等。
Event (事件):事件封装了GUI组件上发生的特定事情(通常就是一次用户操作)。如果程序需 要获得GUI组件上所发生事件的相关信息,都通过Event对象来取得。
Event Listener(事件监听器):负责监听事件源所发生的事件,并对各种事件做出响应处理。
当用户单击一个按钮,或者单击某个菜单项,或者单击窗口右上角的状态按钮时,这些动作就会触发一个相应的事件,该事件由AWT封装成相应的Event对象,该事件会触发事件源上注册的事件监听器(特殊的Java对象),事件监听器调用对应的事件处理器(事件监听器里的实例方法)来做出相应的响应。 AWT的事件处理机制是一种委派式(Delegation)事件处理方式——普通组件(事件源)将事件的处理工作委托给特定的对象(事件监听器);当该事件源发生指定的事件时 ...
OpenCV初探
暑假开始了,这次申请了留校,所以将有大把时间。初步打算如下:补完java和c++知识,Opencv入门,复习提高算法,加深Python知识,可谓是任务繁重。加油。闲言少叙,今天是OpenCV初步入门。
准备工作
下载
使用OpenCV3和VS2017
设置环境变量
注意,新版本的build文件夹中不存在网上部分教程里的x86和x64文件夹,只有一个x64,选择里面VC的版本视vs的情况而定,2017应选择vc15。
工程包含(include)目录的配置:
可以在解决方案资源管理器项目标题处右击或者vs视图->其它窗口->属性管理器打开属性相关设置,没有区别。注意不要学网上有的教程那样对于release,debug和win32,x64单独设置(前文说了,新版本只有一个x64的文件夹)。正确的做法是在解决方案资源管理器空白处右击设置整个项目的属性或者在下图中的项目名位置处右击,设置属性。设置包括包含目录,库目录,链接器三部分。注意,链接器在新版本中只需添加两个了(被浓缩了),位于库目录之内,有d的是debug的,没有的是release的,两个都要加,de ...
AWT使用
GUI编程的基础AWT。
Panel不能独立存在,必须存在于其他容器中,默认使用FlowLayout布局管理器 ScrollPane是一个带滚动条的容器,当组件占用空间过大时自动产生滚动条,也可以指定默认具有滚动条,同样不能单独存在,默认使用BorderLayout布局管理器,且通常不允许改变(因为通常用于装其他组件)
12345678910111213141516171819import javax.swing.*;import java.awt.*;/** * @author YL * @date 2018/6/21 11:12 */public class DivisionFrame { public static void main(String[] args) { Frame f = new Frame("测试窗口"); ScrollPane sp = new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS); sp.add(new TextFie ...
Java笔记11
这篇将会讲Java的IO。
Java的IO通过java.io包下的类和接口来支持,在java.io包下主要包括输入、输出两种IO流,每种输入、输出流又可分为字节流和字符流两大类。其中字节流以字节为单位来处理输入、输出操作,而字符流则以字符来处理输入、输出操作。除此之外,Java的IO流使用了一种装饰器设计模式,它将IO流分成底层节点流和上层处理流,其中节点流用于和底层的物理存储节点直接关联—不同的物理节点获取节点流的方式可能存在一定的差异,但程序可以把不同的物理节点流包装成统一的处理流,从而允许程序使用统一的输入、输出代码来读取不同的物理存储节点的资源。 Java7在java.nio及其子包下提供了一系列全新的API,这些API是对原有新IO的升级,因此也被称为NIO2,通过这些NIO2,程序可以更高效地进行输入、输出操作。 除此之外,本文还会介绍Java对象的序列化机制,使用序列化机制可以把内存中的Java对象转换成二进制字节流,这样就可以把Java对象存储到磁盘里,或者在网络上传输Java对象。这也是Java提供分布式编程的重要基础。
...
Java笔记10
Java集合大致分为四大类,Set,List,Queue,Map。Set代表不记录插入顺序,不可重复的集合;List代表记录顺序,可重复的集合;Map代表具有映射关系的集合;Queue代表了队列的集合。集合可以存储数量不等的对象,实现常用的数据结构。集合就像是一种容器,在Java5之前,将对象的引用放入后,集合会丢失所有对象的数据类型,都当作Object类处理。Java5之后增加泛型,Java集合可以记住容器中对象的数据类型。
集合概述 在初期阶段,要保存数据,通常使用数组。但是这种结构的灵活性很差比如,保存数量不确定的数据和具有映射关系的数据。Java的集合类也称为容器类,位于java.util下,java.util.concurrent下还提供了一些多线程支持的集合类。集合中只能保存对象(引用变量)。集合类主要由两个接口派生:Collection和Map。 Set和List接口分别代表了不记录插入顺序和记录插入顺序的集合,Queue时Java提供的队列实现,与List相似。 Map接口的实现类非常多,主要的特点都是保存数据要用key-v ...
Java笔记9
本篇讲讲异常。
异常处理 程序在运行时 ,我们往往会默认用户会按照我们的设想去做,但事实是,用户往往不知道我们要做什么。例如,我要求成绩需要是字符型,但是用户可能就会输入数字型。所以,我需要在一开始对各种意外作出考虑。例如,输入了数字怎么办,输入了英文怎么办。但是,各种异常是很难穷举完的。那么就反过来作出假设,只分为两种,一种有错,一种没错。即:
12345if(用户输入不正常){ //抛出错误}else{ //业务实现代码}
异常处理机制使用try…catch捕获异常 问题是如何判定是否是对的或错的呢?最简单的就是直接把代码跑一遍。当程序出现错误时,系统会自动生成一个Exception对象,称为抛出(throw)。直接上代码:
123456789101112131415import java.util.Scanner;public class test { public static void main(String[] args) { Scanner s ...
Java笔记8
有些特殊的类的对象是由固定个数的,例如四季,只有四个。这就是枚举类。这篇就来讲讲枚举类以及垃圾管理。
枚举类手动实现枚举类 在以前如果想用枚举类,偷懒的办法是用静态常量来表示,四季用四个数字表示,但是存在许多问题,例如类型不安全,意义不明确等。或者用类来实现,那有太麻烦,需要用private将构造器隐藏起来,把四个季节全都用public static final保存,还要提供一些静态方法使用四个季节。这样就比较麻烦。而在JDK1.5之后就有了枚举类。
枚举类入门 enum关键字与class,interface地位相同,用于定义枚举类。(static不能修饰外部类,只有静态内部类,final可以修饰外部类,表示不能继承)enum是一种特殊的类,一样可以有自己的成员变量,方法,也可实现一个或多个接口,也可以定义自己的构造器。一个Java源文件只能由一个public的enum类。但是枚举类和普通了之间还是存在非常多的区别:
enum类继承的是java.lang.Enum类,不是Object类,因此不能显示的继承其他父类。
enum实现了java.lang ...
Python笔记1
因为要做图像处理,又得把python捡起来的,再加上许多库都是基于python2的,以前学的都是3的,所以还要再回顾下基础知识。
一些零碎知识点除法 在python2中,1/2的结果是0,整数除整数结果就是整数,除非在前面from __future__ import division;对于有小数点的浮点数,这种除法的结果就是小数的,1/2.0=0.5。总结:什么类型的数除出来就是什么类型的。 //用于整除,1.0//2.0=0.0
print print在python2中是不要加括号的,print hello
几个函数 round用于四舍五入,floor用于向下取整,ceil用于向上取整。int(32.9)会转换为32,也是向下取整。
模块 import导入模块,然后按照“模块.函数”的方式调用函数。from 模块 import 函数的方式,则可以直接使用函数。还可以用变量来引用函数。导入math模块使用普通的sqrt函数,导入cmath(complex math)模块则可以使用用于复数的sqrt函数。
Java笔记7
这章主要写接口,内部类和Lambda表达式。
抽象类 假定有个Shape类,需要一个calPerimeter()方法计算各种图形的周长,但是在这个类中显然不可能将所有图形的计算周长的方法全都实现,具体的应该交给各个子类自己实现。在父类中就需要一个抽象方法,具体的方法留待子类实现。 在抽象类中可以没有抽象方法,但是抽象方法必须在抽象类中。具体遵循下面的规则:
抽象方法和抽象类必须使用abstract修饰
抽象类不能被实例化,即使里面并没有抽象方法
抽象类中可以包括普通类的各种成分(包括构造器,即使它不能被实例化,它的构造器主要是用于被子类继承)
含有抽象方法的类必须被定义成抽象类,具体包括:直接定义了一个抽象方法的类;继承了一个抽象父类但是在这个子类中并没有完全实现父类的抽象方法(即还剩抽象方法);或实现了一个接口但没有完全实现接口包含的抽象方法。
具体代码我这里偷个懒。 关于abstract和其他关键字的配合使用要注意,final永远不能和其一起,因为final表示不能被重写。abstract也不能用于修饰成员变量, ...