Java编程体会
1、内部类向上转型为父类的应用:内部类向上转型为父类或者接口,在程序中就可完全隐藏内部类的实现过程。
2、局部内部类的应用:局部内部类定义在外部类的方法中,称之为局部内部类.局部内部类在外部类中不能直接引用,即局部内部类在外部类中失效,但局部内部类可以使用外部类的方法和成员。局部内部类实例化时所需的参数可以放在所在函数的形参位置。
3、匿名内部类的使用:语法结构:
return new A{ //内部类体
};
4、内部类成员方法或成员变量有内部类的实例化对象来调用.静态内部类中可以声明static成员,但在非静态内部类中不可以声明静态成员。静态内部类有个最大的特点就是不可以使用恩爱不累的非静态成员。 (1)、如果创建静态内部类的对象,不需要外部类的对象。
即创建方法是:
外部类名.内部类名 内部类对象名=new 外部类名.内部类名(参数); 非静态内部类不能这样实力化,非静态内部类的在main()方法中的实例化必须借助外部类对象才能完成,即:
外部类名.内部类名 内部类对象名=外部类对象名.new 内部类名(参数);
(2)不能从静态内部类的对象中访问非静态外部类的对象。
(3)静态内部类不能像非静态内部类那样在main()方法中被定义:即 外部类名.内部类名 内部类对象名=外部类对象名.new 内部类名(参数);只有非静态内部类才能这样在main()方法中定义。
5、内部类的继承:内部类的继承:内部类也可以像普通类那样被继承,但是继承内部类比继承普通类复杂,需要设置专门的语法来完成。
在某个类继承内部类时,必须硬性给予这个类一个带参数的构造方法,并且该构造方法的参数为需要继承内部类的外部类的应用,同时在构造方法体中使用a.super()语句,这样才为继承提供了必要的对象引用。
形式为:
Class 外部类 {
Class 内部类 {
}
}
Class 要继承内部类的类 extends 外部类.内部类 {
要继承内部类的类(外部类 外部类的一个引用)
{
外部类的一个引用.super(); }
}
这样才为继承提供了必要的对象应用。
如果要继承内部类的类中也有成员变量,并且要为该成员变量进行实例化时赋值,即要在构造方法中对该成员变量进行赋值,必须将外部类的一个引用和要复制的参数一块写在该构造方法中,在构造方法中还要使用a.super();Class 外部类
{
Class 内部类
{
}
}
Class 要继承内部类的类 extends 外部类.内部类
{
要继承内部类的类(外部类 外部类的一个引用)
{
外部类的一个引用.super();
}
要继承内部类的类(外部类 外部类的一个引用,给成员变量赋值的参数列表)
{
外部类的一个引用.super();
给成员变量赋值语句;
}
}
内部类被继承后,其子类和其他继承普通类之后的子类就没有什么区别了。
6、子类继承父类后,其父类的成员变量和成员方法均被继承过来,即均为子类所有。 7、自定义异常:
(1)、定义方式:
Class 异常名 extends Exception
{
Public 异常名(String ErrorMessage)
{ Super(ErrorMessage);
}
}
(2)、在成语中使用自定义的异常类,大体可以分为以下几步: 1)按定义异常的方式自定义一个异常
2)在方法中通过throw关键字抛出异常对象:
即: throw new 自定义的异常名(异常类型参数)
同时应注意在该方法名的后面加上:throws 自定义的异常名
3)如果在当前抛出异常的方法中处理异常,可以用try-catch语句块捕获并处理,否则在方法的声明处通过 throw new 自定义的异常名(异常类型参数)来将异常抛给调用发方法的类中。 4)在调用该方法的类中用try-catch捕获异常并处理。
集合类
一、Collection接口
1、Collection接口是层次结构中的根接口。
2、List接口、Set接口都是继承了Collection接口。
3、集合类的实例化只能在main()方法中进行。
4、Collection接口中的一些方法的使用:
(1)、remove(Object):使用时的语法:
Collection定义的集合名.remove(集合中的某个元素)
(2)、iterator()的使用方法:
Iterator Iterator类型的变量名=Collection定义的集合名.iterator();
然后可以遍历该结合,遍历方式是:
While(Iterator类型的变量名.hasnext()) {
集合中元素的类型 str=(集合中元素的类型)Iterator类型的变量名. Next(); 然后输出即可。
}
二、List集合(包括List接口和List接口的实例化类) 1、List集合中的元素允许重复,各元素的顺序就是插入对象的顺序。 2、List接口实现类有两种:
(1)、ArrayList实现类:
A、定义ArrayList实现类的对象的方式是:
List<E> 对象名=new ArrayList<>();(其中E是java中的类类型数据,如String、Integer、、Character、Double等)
B、该类使用类似数组的形式实现的,可直接有索引来随机读取集合中的任何一个索引处的元素,
读取方式是:ArrayList实现类类名.get(索引)(索引是从0开始编号的)。
C、其执行插入、删除比较慢,
移除操作是:ArrayList实现类类名.remove(索引)
或ArrayList实现类类名.remove(对象(即集合中的元素))
(2)、LinkedList实现类:
B、定义ArrayList实现类的对象的方式是:
List<E> 对象名=new LinkedList<>();(其中E是java中的类类型数据,如String、Integer、、Character、Double等)
读取方式是:LinkedList实现类类名.get(索引)(索引是从0开始编号的)。 移除操作是:LinkedList实现类类名.remove(索引)
或LinkedList实现类类名.remove(对象(即集合中的元素))
三、Set集合
1、Set集合中的对象不按特定的方式排序,只是简单地把对象加入集合中单Set集合中不能包含重读对象。
2、Set集合有Set接口和Set接口的实现类组成。
3、Set常用的实现类有HashSet类与TreeSet类
(1)、HashSet类:
A、实例化HashSet类的语法:
Set<E> 对象名=new HashSet<>();(其中E是java中的类类型数据,如String、Integer、、Character、Double等)
B、HashSet类中的方法不多,可以实现Collection接口中的所有方法,另外它由哈希表支持,不保证Set的迭代顺序,特别是它不保证该顺序恒久不变。此类允许使用null元素。
(2)、TreeSet类:
A、实例化HashSet类的语法:
Set<E> 对象名=new TreeSet<>();(其中E是java中的类类型数据,如String、Integer、、Character、Double等)
B、TreeSet类实现的Set集合在遍历集合时按照自然顺序递增排序,也可以按照指定比较器递增排序,既可以通过比较器对用TreeSet类实现的Set集合中的对象进行排序。
TreeSet类中还新增了一些新的方法:调用方式是
1)((TreeSet<E>)对象名).first();
2)((TreeSet<E>)对象名).Last();
3)((TreeSet<E>)对象名).Comparator();
4)((TreeSet<E>)对象名).headSet();
5)((TreeSet<E>)对象名).subSet();
6)((TreeSet<E>)对象名).tailSet();
四、Map集合
1、Map集合没有继承Collection接口,其提供的是key到value的映射。
2、Map集合包括Map接口和Map接口实现类
(1)、Map接口:
1)、Map接口提供了将key映射到值的对象。
2)、一个映射不能包括重复的key,每个key最多只能映射到一个值。
(2)Map接口实现类:
有两个:HashMap和TreeMap
1)HashMap类:是基于哈希表的Map接口的实现,次实现提供了所有可选的映射操作,并允许使用null值和null建,但必须保证建的唯一性。HashMap通过哈希表对其内部的映射关系进行快速查找,此类不保证映射顺序,特别是他不保证该顺序恒久不变。
该类的实例化是:
Map<K,V> 对象名=new HashMap<>();(其中K是Key的类型,V是Value的类型,其都是类类型的)
2)TreeMap类:集合中的映射具有一定的顺序。不允许通过键对象是null。 该类的实例化是:
Map<K,V> 对象名=new TreeMap<>();(其中K是Key的类型,V是Value的类型,其都是类类型的)
注:通过HashMap类创建Map集合,当需要顺序输出时,在创建一个完成相同映射关系的TreeMap实现类。即:HashMap实现类是无序的,TreeMap实现类是有序的。
Map接口中的常用方法:
1)put(K key,V value)// 向集合中添加映射
2)containsKey(Object key)// 集合中是否包含指定的Key,返回boolean类型的值。
3)containsValue(Object Value)// 集合中是否包含指定的Value,返回boolean类型的值
4)Get(Object Key)//如果存在指定的Key对象,则返回该对象对应的值,否则返回null
5)keySet()//返回该集合中的所有Key对象形成是Set集合
6)Values()//返回该集合中的所有Value对象形成是Set集合
注:由于HashMap类是按哈希表进行输出的,因此当Key是数字是也能按顺序输
出,但是当Key是字符串是就不能按顺序输出了。
注:1、Set集合中的元素不允许有重复,但List集合中的元素允许有重复。
2、Set和Map的两个实现类是HashSet和TreeSet、HashMap和TreeMap,其中HashSet和HashMap是无序排列的,TreeSet和TreeMap是有序排列的。
3、LinkedList和ArrayList是List接口的两个实现类,他们一个是类似链表,一个类似数组,都是无序排列。
4、List集合中可以有重复,但Set集合和Map集合中不允许有重复。
输入输出
一、输入/输出流:
1、InputStream(字节输入流):是字节输入流的抽象类,是所有字节输入流的父类。
2、Reader(字符输入流):是字符输入流的抽象类,是所有字符输入流的父类。
3、OutputStream(字节输出流):是字节输出流的抽象类,是所有字节输出流的父类。
4、Writer(字符输出流):是字符输出流的抽象类,是所有字符输出流的父类。
5、InputStream中的方法
1)Read()//从输入流中读取下一个子节,返回0-255范围内的int紫戒指。
2)Read(byte[] b)//从输入流中读入一定长度的字节,并以整数的形式返回字节数。
3)Mark(int readlimit)//在输入流的当前位置放置一个标记,readimit参数告知此输入流在标记位置失效之前允许读取的字节数。
4)Resset()//将输入指针范虎到当前所做的标记处。
5)Skip(long n)//跳过输入流上的n个字节并返回实际跳过的的字节数。
6)markSupportde()//如果当前路支持mark()/reset()操作就返回true
7)Close()//关闭此输入流并释放与该流关联的所有系统资源。
6、OutputStream中的方法
1)、write(int b)//将制定的子节写入次数出流
2)Write(byte[] b)//将b个字节从制定的byte数据写入此输出流
3)Write(byte[] b,int off,int len)//将byte数组中从off开始的len个字节写入此输出流。
4)Flush()//彻底完成输出并清空缓存区
5)Close()//关闭输出流。
二、File类
1、文件的创建与删除
有三种创建方法:
1)、File 文件名=new File(总路径字符串);
2)、File 文件名=new File(父路径字符串,子路径字符串);
3)、File 文件名=new File(父路径对象,子路径字符串); 注:如果当前目录中不存在名称为word的文件,File类对象可通过调用createNewFile()方法创建一个名称为word.txt的文件,如果存在word.txt文件,可以通过文件对象的delete()方法将其删除。
因此建立文件的语法:
File 文件名=new File(总路径字符串);
File 文件名=new File(父路径字符串,子路径字符串);
File 文件名=new File(父路径对象,子路径字符串);
使用这三条语句中的任何一个,之后再加上一下的语句
If(文件名.exits)
{
文件名.delete();
}
Else
{
Try
{
文件名.createNewFile();
}
Catch(Exception e)
{
e.printStackTrace();
}
}
三、文件输入/输出流
1、FileInputStream类和FileOutputStream类
1)、FileInputStream类:(继承了InputStream类)
实例化FileInputStream类的方法有两种:
A、FileInputStream in=new FileInputStream(String name);(用给定的文件名创建一个FileInputStream对象)
B、FileInputStream in=new FileInputStream(File f);(用File对象创建FileInputStream对象)
这两个方法相比较,第一个构造方法简单,但第二个构造方法允许将文件链接输入流之前对文件做进一步分析。
FileOutpubStream与FileInputStream有相同的构造方法。
给文中写信息和将信息输出的方法是:
try
{ FileOutputStream out=new FileOutputStream(fp); byte[] b="我有一只小毛驴,我从来也不骑".getBytes(); out.write(b); out.close(); //每次用完文件后要记住关闭文件 } catch(Exception e)
{ e.printStackTrace(); } try { FileInputStream in=new FileInputStream(fp); byte[] b=new byte[1024]; int len=in.read(b);(由于in.read(b)返回的事多读的字节数,因此如果要将多度的信息输出,需要用;new String(b,0,len)) System.out.println("文件中的信息是:"+new String(b,0,len));
in.close(); //每次用完文件后要记住关闭文件 } catch(Exception e) { e.printStackTrace(); }
注:给文件写入数据时,按字节写,方法是:用文件名或文件创建OutputStream类对象A,将写入的输入存到byte数组中,注意要经过getBytes()方法的转换。然后用A.write(byte[] b)方法将数据写入,写完之后要将文件关闭。 将文件中的信息输出时,方法是:用文件名或文件创建InputStream类对象A,然后调用A.read(byte[] b),将其返回值付给len,new String(b,0,len)便是读到的信息,最后关闭文件。
用FileWriter类和FileReader类进行按字符读取输入输出:
方法是:
给文件写入信息时:用文件名创建FileWriter类的对象A,将要写入到文件的信息存到String字符串中,用A.write(str)将str写入到文件中,或用char数组存放要写入的文件,在将其写入,最后关闭输入流。
将文件中的信息输出时:用文件名创建FileReader类的对象A,创建char数组
ch,调用A.read(char[] ch),并将返回值付给len,则new
String(ch,0,len)便是读到的信息,最后将输出流关闭。
四、带缓存的输入/输出流
1、BurfferedInputStream类与BufferedOutStream类
1)、BurfferedInputStream的构造方法:
A、BurfferedInputStream buf=new
BurfferedInputStream(InputStream in);//建立带32字节的缓存区的缓存
B、BurfferedInputStream buf=new
BurfferedInputStream(InputStream in,int size);//建立带size个字节的缓存
2)、BurfferedOutputStream的构造方法:
A、BurfferedOutputStream buf=new
BurfferedOutputStream(OutputStream in);//建立带32字节的缓存
B、BurfferedOutputStream buf=new
BurfferedOutputStream(OutputStream in,int size);//建立带size个字节的缓存
2、BufferedReader类与BufferedWriter类
1)、构造方法同上。
2)BufferedReared类常用的方法:
A、read()//读取单个字符
B、Readline()//读取一个文本行,并将其返回为字符串,如无数据可读,则返回null(按行读取文件)
3)、BufferedWriter类的常用方法
A、Write(String str,int off,int len)//写入字符串的一部分。
B、Flush()//书安心该流的缓存
C、Newline()//写入一个行分隔符
注意:
1、带缓存的字符输入输出流和不带缓存的字符输入输出流相对应,相配对,带缓存的字节输入输出流和不带缓存的字节输入输出流相配对。
2、写完之后要将带缓存的输入输出流和文件输入输出流都关闭。
五、数据输入输出流
1、数据输入输出流DateInputStream类和DateOutStream类允许应用程序以与机器无关的方式从底层输入流中读取基本的java数据类型,也就是说,当读取一个数据时,不必在关心这个数值应当是那种字节
2、DateInputStream类和DateOutStream类的构造方法:
1)、DateInputStream 对象名=new DateInputStream(InputStream in);
2)DateOutputStream 对象名=new DateOutputStream(OutputStream out);
3、DateOutputStream类提供了如下3种写入字符串的方法:
1)、writeBytes(String s)//将每个字符的低字节的内如写入目标设备
2)、writeChars(String s)//将每个字符的两个字节的内容都写到目标设备中
3)、writeUTF(String s)//将字符串按照UTF编码后的字节长度写入目标设备,然后才是每一个字节的UTF编码。
注:java中的字符时Unicode编码,是双字节的。
4、DateInputStream类只提供了一个readUTF()方法返回字符串。
注意:用readUTF()读就应先用writeUTF()给文件中写东西,再用其他方式写入东西,否则会出现文件结束异常
六、ZIP压缩输入输出流
1)、ZipOutputStream类和ZipInputStream类可以实现文件的压缩与解压缩。
2)如要从ZIP压缩管理文件内读取某个文件,要先找到对应该文件的 “目录进入点”(从它可知该文件在zip文件内的位置),才能读取这个文件的内容。
3)如果要将文件内容挟制ZIP文件内,必须先写入对应于该文件的”目录进入点”,并且把要写入文件的内容的位置移到此进入点所指的位置,然后在写入文件内容。
4)ZipEntry类产生的对象,是用来代表一个ZIP压缩文件内的进入点(entry),ZipInputStream类用来读取ZIP压缩格式的文件,所支持的包括以压缩及未压缩的进入点(entry)。ZipOutputStream类是用来写出ZIP压缩格式的文件,而且所支持的包括已压缩及未压缩的进入点(entry)。
1、压缩文件:
1)、ZipOutputStream类对象可将文件压缩为zip文件。
2)构造方法:
ZipOutputStream 对象名=new ZipOutputStream(OutputStream out);
常用方法:
1)、putNextEntry(ZipEntry e)//开始写一个新的ZipEntry,并将刘内的位置一直此entry所指数据的开头。
2)、Write(byte[] b,int off,int len)//将字节数组写入当前ZIP条目数据
3)、Finish()//完成写入ZIP输出流的内容,无须关闭它所配合的OutputStream
4)、setComment(String comment)//可设置此ZIP文件的注释文字
2、解压缩ZIP文件
1)、ZipInputStream类可读取ZIP压缩格式的文件,包括未压缩和已压缩的条目(entry)。
2)、ZipInputStream类的构造方法:
ZipInputStream 对象名=new ZipInputStream(InputStream in);
3)、常用的方法:
A、read(byte[] b,int off,int len)//读取目标b数组内off偏移量的位置,长度是len字节
B、Available()//判断是否已读完目前entry所指定的数据。已读完返回0,否则返回1.
C、closeEntry()//关闭当前ZIP条目并定位流已读取下一个条目
D、Skip(long n)//跳过当前ZIP条目中指定的字节数
E、getNextEntry()//读取下一个ZipEntry,并将流内的位置一直改entry所指数据的开头
F、creatZipEntry(String name)//已指定的name参数新创建一个ZipEntry对象。
Swing程序设计
一、Swing概述
1、Swing包的层次结构和继承关系
第一层:Object类
第二层:Component类
第三层:Container类
第四层:JComponent类
二、常用窗体:
1、用两种常用的窗体:JFrame窗体和JDialog窗体。
2、JFrame窗体:
1)、由于该窗体继承了JFrame类,所以它拥有最大化、最小化和关闭等按钮组。
2)、JFrame在java程序中的语法格式:
JFrame 窗体名=new JFrame();
或 JFrame 窗体名=new JFrame(title);(title是窗体的名字) Container container=窗体名.getContentPane();
JFrame窗实例化后要将其转换为容器,通过Container container=窗体名.getContentPane()来实现。之后才能在窗体中加入其它组件。 加入组件的方法:窗体名.add();
移除组件的方法:窗体名.remove();
设置窗体的大小:窗体名.setSize(int x,int y);
设置窗体是否可见;窗体名.setVisible(boolean b);(true为可见,false为不可见)
设置窗体的关闭方式:窗体名.setDefaultCloseOperation(mothed); 其中mothed表示关闭方式,有四种关闭方式:
A、DO_NOTHING_ON_CLOSE(什么都不做就关闭窗口)
B、DISPOSE_ON_CLOSE(注册监听程序对象后就会自动隐藏并释放窗体)
C、HIDE_ON_CLOSE(隐藏窗口的默认关闭方式)
D、EXIT_ON_CLOSE(退出应用程序默认窗口关闭)
这四种方式都用WindowConstants来调用。
3、JDialog窗体:
1)、JDialog窗体的功能是从一个窗体中弹出另一个窗体。
2)JDialog与JFrame窗体一样,在实例化完成后要调用Container中的方法getContentPane()方法将其转换为容器。
3)JDialog类的构造方法:
A、public JDialog()//创建一个没有标题和父窗口的对话框
B、Public JDialog(JFrame jf)//创建一个指定父窗体的对话框,但该对话框没有标题
C、Public JDialot(JFrame jf,String title)//创建一个指定父窗体和只听标题的的对话框
D、Public JDialog(JFrame jf,boolean b)//创建一个指定父窗体和指定类型的对话框,但该对话框没有指定标题
E、Public JDialog(JFrame jf,String text,boolean b)//创建一个指定父窗体,指定标题和指定类型的对话框。
此小节应注意的问题:
1、先要将JFrame或JDialog窗体转化为容器,让后往容器中添加组件,之后要设置组件的排列方式,设置容器的背景颜色,设置窗体的大小,设置窗体是否可见,设置窗体的关闭方式,设置组件的监听事件。
2、当某一个类继承了JFrame类或JDialog类时,那么该类本身就是一个窗体,可以直接调用JFrame类或JDialog类中的方法对窗体进行设置。
3、JDialog类的应用:先定义一个类继承了JDialog类,在该类中定义指定父窗体的JDialog窗体,用super()来调用。然后在定义一个类,在该类继承JFrame类,在该类中实现创建JFrame窗体,在其中添加按钮,并未该按钮设置监听事件。在监听事件的actionPerformed()方法中将继承JDialog类的对象设置为可见。
二、标签组件与图标
1、在Swing中显示文本或提示信息的方法是使用标签,它支持文本字符串和图标。
2、标签的使用:
1)、标签可以显示一行只读文本、一个图像或带图像的文本,它并不能产生任何类型的事件,只是简单的显示文本和图片,但是可以使用标签的特性指定标签上文本的对齐方式。
2)标签的构造方法:(JLabel类的构造方法)
A、public JLabel();//创建一个不带图表和文本的JLabel类对象
B、Public JLabel(String text)//创建一个带文本的JLabel类对象
C、Public JLabel(String text,int aligment)//创建一个带文本,并设置文本水平对齐方式的JLabel类
D、Public JLabel(Icon icon)//创建一个带图标的JLabel类对象
E、Public JLabel(Icon icon,int aligment)//创建一个带图标并制定图标水平对齐方式的JLabel类对象
F、Public JLabel(String text,Icon icon,int aligment)//创建一个带图表和文本并制定水平对齐方式的JLabel类对象
3、图标的使用:
1)、创建图标:在Swing中通过Icon接口来创建图表,可以在创建时给定图标的大小、颜色等特性。
2)如果使用Icon接口,必须实现Icon接口中的三个方法:
A、public int getIconHeight()//获取图标的长
B、Public int getIconWidth()//获取图标的宽
C、Public void paintIcon(Component arg0,Graphics arg1,int arg3)//画图标
4、使用图片图标
1)、在Swing中的图标除了可以绘制之外,还可以使用某个特定的图片创建。
2)Swing利用InageIcon类根据现有图片创建图标。ImageIcon类实现了Icon接口,同时java支持多种图片格式。
3)ImageIcon类有多个构造函数
A、public ImageIcon()//该构造方法创建一个通用的ImageIcon对象,当真正需要设置图片是在使用ImageIcon对象调用setImage(Image image)方法来操作。
B、Public ImageIcon(Inage image)//可以直接从图片圆来创建图标
C、Public ImageIcon(Image image,String description)//除了可以从图片源创建图标之外,还可以为这个图标创建剪短的描述,但这个描述不会在图标上显示,可以使用getDescripion()方法胡哦哦去这个描述。
D、Public ImageIcon(UPL url)//该构造方法利用位于计算机网络上的图象文件创建图标。
四、常用布局管理器
1、Swing提供的常用布局管理器包括流布局管理器、边界布局管理器、网格布局管理器。
2、据对布局:(就是硬性指定组件在容器中的位置和大小,可以使用绝对坐标的方式来指定组件的位置)
1)、使用绝对布局的步骤如下:
A、使用Container.setLayout(null)方法取消布局管理器
B、使用Component.setBounds()方法设置每个组件的大小与位置。
3、流布局管理器
1)、流布局管理器(FlowLayout)是最基本的布局管理器,在整个容器中的布局正如其名,像流一样从左到右摆放组件,知道占据了这一行的所有空间,然后在向下移动一行。默认情况下,组件在每一行都是居中排列的,但是通过设置也可以更改组件在每一行的排列位置。
2)FlowLayout类中常用的构造方法:
A、public FlowLayout()
B、Public FlowLayout(int alignment)
C、Public FlowLayout(int alignment,int horizGap,int vertGap)
其中alignment参数表示使用流布局管理器后组件在每一行的具体摆放位置。他可以被赋予一下3个值之一:
A、FlowLayout.LEFT=0//每一行组件左对齐
B、FlowLayout.CENTER=1//
C、FlowLayout.RIGHT=2//每一行组件右对齐
4、边界布局管理器(BorderLayout)
1)、边界布局管理器将容器划分为东、南、西、北、中五个区域,可以将组件添加到这五个区域中。容器调用Container类的add()方法添加组件式可以设置此组件在布局管理器中的区域,区域的可控制可以有BorderLayout类中的成员变量来决定这些成员变量的具体含义如下:
A、BorderLayout.NORTH//添加组件时置顶
B、BorderLayout.SOUTH//置下
C、BorderLayout.EAST//置右
D、BorderLayout.WEST//置左
E、BorderLayout.CENTER//置中
5、网格布局管理器
1)、网格布局管理器(GridLayout)布局管理器将容器划分为网格,所以组件可以按行和列进行排列。
2)在网格布局管理器中,每个组件的大小都相同,并且网格中空格的个数由网格的行数和列数决定。
3)组件从网格的左上角开始,按照从左到右,从上到下的顺序加入到网格中,而且每一个组件都会填满整个网格,改变窗体的大小,组件的大小也会随之改变
4)网格布局管理器主要有一下两个常用的构造方法:
A、public GridLayout(int rows,int columns)
B、Public GridLayout(int rows,int columns,int horizGap,int vertGap)
Rows代表行号,columns代表列号,horizGap代表网格之间的水平距离,
vertGap指定网格之间的垂直距离。
五、常用面板
1、面板也是一个Swing容器,他可以作为容器容纳其他组件,但他也必须被添加到其他容器中。
2、Swing中常用的面板包括JPanel面板以及JScrollPane面板。
3、JPanel面板
1)、JPanel面板可以聚集一些组件来布局。
2)、JPanel 面板名=new JPanel(布局管理器);
4、JScrollPane面板
1)、在设置界面是可能会遇到在一个较小的容器窗体中显示一个较大部分的内容的情况,这时可以使用JScrollPane面板。
2)、JScrollPane面板是带滚动条的面板,他也是一种容器,但是
JScrollPane只能放置一个组件,并且不可以使用布局管理器。
3)、JScrollPane只能放置一个组件,并且不可以使用布局管理器。如果需要在JScrollPane面板中放置多个组件,需要将多个组件放置在JPanel面板上,然后将JPanel面板作为一个整体组件添加在JScrollPane组件上。
4)创建方式是:
JScrollPane 面板名=new JScrollPane(文本域名或其他的组件名);
六、按钮组
1、按钮在Swing中是较为常见的组件,用于触发特定动作。
2、Swing中提供了多种按钮,包括提交按钮、复选框、单选按钮等。
3、提交按钮:
1)、Swing中的提交按钮(JButton)由JButton对象表示,其构造方法主要有以下几种形式:
A、public JButton()
B、Public JButton(String text)
C、Public JButton(Icon icon)
D、Public JButton(String text,Icon icon)
通过以上的构造方法,在Swing按钮上不仅能显示文本标签,还可以显示图标。
4、单选按钮组件
1)、在默认的情况下,单选按钮(JRadioButton)显示一个圆形图标,并且通常在该图标旁放置一些说明性文字,而在应用程序中,一般将多个单选按钮放置在按钮组中,使这些单选按钮表现出某种功能,当用户选中某个单选按钮后,按钮组中其他按钮将被自动取消。
(单选按钮就相当于在电脑上做单项选择题)
2)、单选按钮的构造方式:
A、public JRadioButton()
B、Public JRadioButton(Icon icon)
C、Public JRadioButton(Icon icon,boolean selected)
D、Public JRadioButton(String text)
E、Public JRadioButton(String text,Icon icon)
F、Public JRadioButton(String text,Icon icon,boolean selected)
其中的selected表示默认是否被选中。
3)、按钮组:
在Swing中存在一个ButtonGroup类,用于产生按钮组,如果希望将所有的单选按钮放置在按钮组中,需要实例化一个ButtonGroup对象,并使用该对象调用add()方法添加单选按钮。
5、复选框组件
1)、复选框(JCheckBox)在Swing组件中的使用也非常广泛,它具有一个方块图表,外加一段描述性文字。
2)、与单选按钮唯一不同的是:复选框可以进行多选设置,每个复选框都提供“选中”与“选不中”两种状态。
3)、JCheckBox的构造方法
A、public JCheckBox()
B、Public JCheckBox(Icon icon,Boolean checked)
C、Public JCheckBox(String text,Boolean checked)
其中checked表示复选框中的文字是否被选中。
七、列表组件
1、Swing中提供两种列表组件,分别为下拉列表框与列表框。
2、下拉列表框组件
1)、下拉列表框(JComboBox)
下拉列表框是一个带条状的县市区,它具有下拉功能,在下拉列表的框的右方存在一个一个倒三角行的按钮,当用户单击该按钮时,下拉列表框中的项目将会以列表形式显示出来。
2)、JComboBox的构造方法:
A、public JComboBox()//可以使用addItem增加选项
B、Public JComboBox(ComboBoxModel dataModel)
C、Public JComboBox(Object[] arrayData)
D、Pulic JComboBox(Vector vector)
在初始化下拉列表框时可以选择同时指定下拉列表框中的项目内容,也可以在程序中使用其他方法设置下拉列表框中的内容。下拉列表框中的内容可以被封装在ComboBoxModel类型、数组或Vector类型中。
3)、JComboBox模型
一般将下拉列表框中的项目封装为ComboBoxModel的情况比较多。
ComboBoxModel为接口,它代表一般模型,可以自定义一个类实现该接口,然后在初始化JComboBox对象时向上转型为ComboBOxModel接口类型,但是必须实现一下两种方法:
A、public void setSelectedItem(Object item)//用于设置下拉列表框中的选项
B、Public Object getSelectedItem()//用于返回下拉列表框中的选项。
自定义这个类除了实现该接口之外,还可以继承AbstractListModel类,在该类中也有两个操作下拉列表框的重要方法:
A、getsize()//返回列表的长度
B、getElementAt(int index)//返回指定索引处的值
3、列表框组件
1)、列表框(JList)与下拉列表框的区别不仅表现在外观上,当激活下拉列表框时,还会出现下拉列表框中的内容,但列表框只是在窗体上占据固定的大小,如果需要列表框具有滚动效果,可以将列表框放入滚动面板中。用户在选择列表框中的某一项是,按住shift建并选择列表框中的其他项目,则当前选项和其他项目之间的选项将全部被选中,也可以按住ctrl建并的年纪列表框中的单个项目,这样可以使列表框中被单击的项目反复切换非选择状态或选择状态。
2)JList的构造函数:
A、public JList()
B、Public JList(Object[] obj)
C、Public JList(ListModel dataModel)
D、Public JList(Vector vector)
八、文本组件
1、文本框组件:
1)、文本框(JTextField)用来显示或编辑一个单行文本,在Swing中通过javax.seing.JTextField类对象创建。
2)、JTextField的构造方法:
A、public JTextField()
B、Public JTextField(String Text)
C、Public JTextField(int fieldwidth)
D、Public JTextField(String text,int fieldwidth)
E、Public JTextField(Document docModel,String text,int
fieldwidth)
可以通过在初始化文本框是设置文本框的默认文字,文本框的长度等实现。
2、密码框组件(JPasswordField)
1)、密码框(JPasswordField)与文本框的定义与用法基本相同,唯一不同的是密码框将用户输入的字符串以某种符号进行加密,
2)、JPasswordField的构造方法:
A、public JPasswordField()
B、Public JPasswordField(String text)
C、Public JPasswordField(String text,int fieldwidth)
D、Public JPasswordField(int fieldwidth)
E、Public JPasswordField(Document docModel,String text,int fieldwidth)
3、文本域组件(JTextArea)
1)、文本域组件可以接受用户输入多行文字
2)、构造方法:
A、public JTextArea()
B、Public JTextArea(String text)
C、Public JTextArea(int rows,int colunms)
D、Public JTextArea(Document doc)
E、Public JTextArea(Document doc,String text,int rows,int columns)
上述构造方法可以在初始化文本域是提供默认文本以及文本域的长度和宽度。 注:文本域组件不能使用绝对布局管理器,其他三种布局管理器均可使用。
九、常用事件监听器
1、在Swing中常用的事件监听器有两个:动作事件监听器和焦点事件监听器。
2、监听事件简介:
在Swing事件模型中由3个分离的对象完成对事件的处理,分别为事件源、事
件以及监听程序。事件源触发一个事件,它被一个活多个“监听器”接受,监听器负责处理事件。所谓的事件监听器实质上是一个“实现特定类型监听器接口”的类对象,具体地说,时间几乎都以对象来表示,他是某种事件类的对象,事件源(如按钮)会在用户做出相应的动作时产生事件对象。
所有的事件源都具有addXXXListener()和removeXXXListener()方法。这样就可以为组件添加或移除相应的事件监听器。
3、动作事件监听器:
1)、动作事件(ActionEvent)监听器是Swing中比较常用的事件监听器,很多组件的动作都会使用它的监听,如按钮被单击等。
动作事件监听器:
事件名称:ActionEvent
事件源:JButton JList JTextField等
监听接口:ActionListener
添加或删除相应类型监听器的方法:addActionListener()
removeActionListener()
4、焦点事件监听器:
1)、焦点事件(FocusEvent)监听器在实际项目开发中应用也比较广泛,如将光标焦点离开一个文本框时需要弹出一个对话框,或者将焦点返回给该文本框等。
2)、焦点事件监听器:
事件名称:FocusEvent
事件源:Component以及派生类
监听接口:FocusListener
添加或删除相应类型监听器的方法:addFocusListener()或
removeFocusListener()