java 图形界面
AWT 和 SwingGUI基本类在java.awt包中,这个包也称为抽象窗口工具包(Abstract Window Toolkit,AWT)。
java.awt包中有一个抽象类Component,它是除菜单类外所有类的父类,他有如下所有组件都有的方法
getBackground(): 返回背景色
getGraphics(): 返回组件用的画笔
getHeight(): 返回组件高度
getLocation(): 获得组件位置
getSize(): 获得组件大小
getWidth(): 获得组件宽度
getX(): 获得组件x值
getY():
isVisible(): 组件是否可见
setBackGround(): 设置背景色
setBackGrounds(int x, int y, int width, int height): 设置位置及大小
setEnabled(boolean b): 设置组件是否可用
setFont(Font f): 设置字体
setForground(Color c): 设置前景色
setLocation(int x, int y): 设置组件位置
se ...
swing面板和其他组件
学习自
面板JPanel可以在大布局里设计另一种布局
JScrollPane 滚动面板它可以显示在文本较多的时候显示水平或垂直滚动条。如JTextArea或JTextField(水平滚动)或JList等可以使用滚动面板
JScrollPane内有一个ViewPort(视口),表示JScrollPane的显示区域,视口内包含一个需要滚动的组件。
构造方法:
JScrollPane(Component view, int vsbPolicy, int hsbPolicy): view是需要加入视口的组件,vsb和hsb是水平和垂直滚动策略。
策略取值ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED // 需要时显示(默认)ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER // 从不显示ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS // 总是显示水平就是把VERTICAL改成HORIZONAL
方法:
setViewpor ...
java 图片操作
读取图片通过Toolkit
可以通过Toolkit工具从本地,网络或内存获取图片
Image Toolkit.getDefaultToolkit().getImage(String filename)
Image Toolkit.getDefaultToolkit().getImage(URL url)
Image Toolkit.getDefaultToolkit().createImage(byte[] imageData)
通过ImageIO
方法:
BufferedImage ImageIO.read(File input)
ImageIO.read(URL input)
ImageIO.read(InputStream input)
一般用这种方法
ImageIO常用方法
int getWidth(): 获取图片宽度
int getHeight()
int getWidth(ImageObserver observer)
int getHeight(ImageObserver observer)
setRGB(int x, int y, int rgb): 设置图片 ...
swing JTree
基础树图形就像文件目录。由TreeNode表示节点,用TreePath表示这个节点的路径。
创建时,先创建根节点,然后创建子节点连接,类似于树的链式表示。
TreeNode 是一个接口,创建节点对象时,通常使用已实现该接口的的 DefaultMutableTreeNode 类。
DefaultMutableTreeNode表示一个节点,可以进行增查改删等操作。
构造方法:
DefaultMutableTreeNode(Object userObject, boolean allowsChildren):userObject是用户对象(节点名称),allowsChildren是是否允许拥有子节点
方法:
add(): 添加子节点
insert(MutableTreeNode newChild, int childIndex) : 在指定位置插入子节点
getPreviousSibling(): 获得这个节点的前一个兄弟节点
getNextSibling()
getFirstChild()
remove(int childIndex): 移除子节点
remove(MutableTr ...
swing 表格
学习自
基础表格JTable用来编辑二维表格。注意添加到容器时表头和内容要分开添加。表头获取是table.getTableHeader()。
构造方法:
JTable(int numRows, int numColumns)
JTable(Object[][] rowData, Object[] columnNames):columnnames是表头名称
JTable(TableModel dm): 用表格模型创建表格
方法:
setFont(Font f)//被选中字体颜色setSelectionForeground(Color selectionForeground)setForeground(Color fg)//字体颜色setSelectionBackground(Color selectionBackground)//网格颜色setGridColor(Color gridColor)//是否显示网格setShowGrid(boolean showGrid)//水平网格是否显示setShowHorizontalLines(boolean showHorizontalLin ...
java I/O
概述java.io.InputStream代表字节输入流,java.io.OutputStream代表输出流。他们都是抽象类,InputStream中有以下方法:
int read():读入一个字节,并且转化成unsigned int型整数
int read(byte[] b): 从输入流中读取若干字节,保存在b数组中。如果到了输入流的结尾,返回1
int read(byte[] b, int off, int len): 如上,这里只是多了在b数组中的开始位置和读取数目
void close(): 关闭输入流。如果不关闭的话其他需要这个文件的就无法读取这个文件信息。类似于打开了一个应用程序再打开就说有一个实例正在运行。
int available(): 放回从输入流中读取字节数目
skip(long n): 从输入流中跳过n个字节
boolean markSupported(),void mark(int readLimit), void reset(): 如果想要重复读入数据,就先用markSupported()判断这个流是否支持重复读入数据,如果支持,通过mark在当前位置开始 ...
广义表
广义表一般记作:LS=(a1,a2,…)
其中ai在线性表中只可以是单个元素,而在广义表中即可以是单个元素,也可以是广义表。如果是单个元素,叫做原子,如果是广义表,叫做子表。当广义表非空时,第一个元素叫做广义表的表头,其余所有元素组成的表叫做广义表的表尾。
例如: A(),空表
B(e) 只有一个原子元素e,长度为1
c(a,(b,c,d)) 长度是2
d( a ( d)) 递归表
广义表的储存结构
通常用链式存储结构
每个节点有tag域(标志域),hp,tp三个域,但是原子节点(就是表头节点)只有两个域,标志域和值域
定义:struct glnnode{ int tag;//表示是原子节点还是表结点 union { int atom;//原子节点值域 struct ptr { glnnode *hp,*tp; }; };};
除了空表表头指针为空外,其他表表头指针必定指向一个表节点
同一层次的表可以从第一个节点通过尾节点 ...
java 常用类
ObjectObject是所有java类共同的祖先。如果没有用extends,那么这个类将直接继承Object类。
Object类有一个默认构造方法,构造子类实例时,都会优先使用这个构造方法。
public Object(){}
方法:
equals(Object obj): 比较两个对象是否相等,只有当两个变量引用一个实例时才会为真。
notify()
notifyAll()
wait()
hashCode(): 返回对象哈希码。
toString(): 返回当前对象字符串表示。如果println方法参数时Object,那么先会调用toString()
finalize(): 垃圾回收时先调用这个方法
getClass(): 返回运行时类。java引用变量有两种类型,编译时类型和运行时类型。运行时类型就是引用的实例。
String 和 StringBufferString是不可变类,里面字符串永远不会改变(也就是平常用双引号括起来的那些),StringBuffer是可变类
String构造方法:
String()
String(String value):
...
Lambda
基本用法例如:
names.forEach((name)->System.out.println(name));names.forEach(System.out::println);//可以通过这种方式直接调用println
基本语法; (Type1 param1,Type2 param2,...)->{statment1, statment2... return statmentM;}
一般来讲,这个其实是接口或抽象类的简化。但是不是所有的类都可以使用Lambda的。
只有声明了函数式接口:public @interface FunctionalInterface才可以被Lambda赋值。这个就是可以简写的原因。通过函数式接口可以直接定位到这个类的某一个函数,然后就可以省略函数名等一系列要素.
例如:(String name)->{ System.out.println(name); return ; }这个是基础型,还有许多简化型:
参数类型可以省略。例 ...
组合
本程序的思路是开一个数组,其下标表示1到n个数,数组元素的值为1表示其代表的数被选中,为0则没选中。
首先初始化,将数组前n个元素置1,表示第一个组合为前n个数。
然后从左到右扫描数组元素值的“10”组合,找到第一个“10”组合后将其变为“01”组合,同时将其左边的所有“1”全部移动到数组的最左端。
当第一个“1”移动到数组的n-m的位置,即n个“1”全部移动到最右端时,就得到了最后一个组合。
例如求5中选3的组合:
1 1 1 0 0 //1,2,3
1 1 0 1 0 //1,2,4
1 0 1 1 0 //1,3,4
0 1 1 1 0 //2,3,4
1 1 0 0 1 //1,2,5
1 0 1 0 1 //1,3,5
0 1 1 0 1 //2,3,5
1 0 0 1 1 //1,4,5
0 1 0 1 1 //2,4,5
0 0 1 1 1 //3,4,5
这里有一个关键是同时把所有的1移到左端,通过观察发现只有0在最左边的情况下才有可能要把1移动。#include<iostream>#include<stdlib.h>using namespac ...