学习笔记NO.4

Swing程序设计

面板

  1. Jpanel面板
    面板也是容器的一种,先把东西添加到面板内。然后把面板添加到容器内。

Jpanel p1=new Jpanel(布局类);
c.add(p1);

  1. JscorlPane面板
    遇到较小的容器窗体要显示较大部分内容的时候,可以使用这个面板,带滚动条。他也是一个容器,但是只能放一个组件,要是需要在面板方多个组件,就需要先把组件放在Jpanel面板上,然后把Jpanel作为一个整体放在JScorlPane上。

Container c=getContentPane();//创建容器
JTxtArea ta=new JTextArea(20,50);//创建文本区域组件
JScrollPane sp=new JScrollPane(ta);//创建面版对象
c.add(sp);//添加到容器里面

  1. 按钮组件
    ==提交按钮组件,==有下列几种构造方法
    public JButton();
    public JButton(String text);
    public JButton(Icon icon);
    public JButton(String text,Icon icon);
    setEnabled(false)可以设置这个按钮无效。
    setIcon为这个按钮指定一个图标。
    单选按钮组件
    有以下常用构造方法
    public JRadioButton();
    public JRadioButton(Icon icon);
    public JRadioButton(Icon icon,boolean selected);selexted用于设置这个选项
    是否提前选定
    public JRadioButton(String text);
    public JRadioButton(String text.Icon icon);
    public JRadioButton(String text,Icon icon,boolean selexted);
    按钮组:ButtonGroup类,把按钮放进去的话同时只能选一个了。然后再把按钮组放到容器。
    isselected可以读取这个是被选中
    复选框组件
    常用构造方法
    public JCheckBox();
    public JCheckBox(Icon icon,boolean check);
    public JCheckBox(String text,boolean checked);
    getText()方法可以得到这个按钮的名字之类;
  2. 列表框
    =下拉列表框==
    常用构造方法
    public JComboBox();
    public JComboBox(ComboBoxModel dateModel);
    public JComboBox(Objext[]arryDate);
    public JComboBox(Vector vector);下拉列表框的内容可以封装在ComboBox类型,数组或vector类型中。
    JComboBox模型

String arr[]= {“3”,“2”,“1”};
JLabel jl=new JLabel(“asdsss”);
JComboBox jc=new JComboBox<>();
ComboBoxModel cm=new DefaultComboBoxModel<>(arr);
jc.setModel(cm);

两个可以分别得到列表选中的索引和值
System.out.println(“num:”+jc.getSelectedIndex());
System.out.println(“内容”+jc.getSelectedItem());

列表框组件
常用构造方法
public void JList();
public void JList(Object[]listData);
public void JList(Vector listData);
public void JList(ListModel dataModel);
可以使用数组初始化列表框
也可以使用vector类型数据初始化列表框

.
Vector contents =new Vector();
JList ji=new JList(contents);
contents.add(“1”);
contents.add(“2”);
contents.add(“3”);

也可以使用模型

String arr[]= {“3”,“2”,“1”,“sd”,“asj”,“shxb”,“sbxj”,“agsz”,“shxn”};
JListjc=new JList<>();
DefaultListModel mo=new DefaultListModel<>();
for(String tmp:arr) {//向列表载入数据
mo.addElement(tmp);
}
好处是可以再添加其他的

可以设置选择的样子
jc.setSelectionModel(ListSelectionModel.SINGLE_SELECTION);只能单选
SINGLE_INTERVAL_SELECTION;只能连着选
MULTIPE_INTERVAL_SELECTION;随便选
用事件监听器得到选中的内容

btn.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {//获得选中的元素
				java.util.List<String> value=jc.getSelectedValuesList();
				for(String tmp:value) {
					System.out.println(tmp);
				}
			}
		});
  1. 文本组件
    文本框组件
    构造方法
    public JTextField();
    public JTextField(String arr);
    public JTextField(int fieldwidth);
    public JTextField(String arr,int fieldwidth);
    public JTextField(Document docModel,String arr,int fieldwidth);
    密码框组件
    和文本框类似
    public JPasswordField();
    public JPasswordField(String arr);
    public JPasswordField(int fieldwidth);
    public JPasswordField(String arr,int fieldwidth);
    public JPasswordField(Document docModel,String arr,int fieldwidth);
    然后可以在程序中定义密码框的回显字符
    JPasswordField jp=new JPasswordField();
    jp.setEchoChar(’#’);
    文本域组件
    public JTextArea();
    public JTextArea(String arr);
    public JTextArea(int rows,int colums);
    public JTextArea(Document doc);
    public JTextArea(Document doc,String Text,int rows,int colums);
    setLineWrap()方法可以设置文本域是否自动换行
    6.事件监听器
    动作事件监听器
事件名称 事件源 监听接口 添加或者删除相应类型监听器的方法
ActionEvent JButton,JList,JTextField等 ActionListener addActionListener(),removeActionListioner()

焦点事件监听器

事件名称 事件源 监听接口 添加或者删除相应类型监听器的方法
FocusEvent Component以及派生类 FocusListener addFocusListener(),removeFocusListioner()

在添加监听器的时候,要实现FocusListener接口,这个接口中定义了两个方法,分别为focusLost()和focusGained()方法,前者是组件失去焦点的时候调用的,后者是得到焦点的时候。

第十八章 多线程

1. 实现线程的方法
  1. 继承Thread类
    继承这个类之后,把需要执行的线程放在run方法内,用start()方法执行
  2. 实现Runnable接口,
    1, 建立runnable对象
    2,使用参数为runnable对象的构造方法创建thread实例,
    3,调用start() 方法启动线程
2,线程的生命周期
  1. notify()方法可以将线程唤醒,notifyAll()唤醒所有线程。
3, 线程的操作方法
  1. 线程的休眠
    用Thread.sleep(1000)单位是毫秒
  2. 线程的加入
    用Thread.join();方法,就是停止当前线程,等待加入的线程执行完毕
  3. 线程的中断
    再run()使用无限循环,然后用一个布尔值结束循环。
    注意要抛出异常
4,线程的优先级

setPriority()方法,参数为1-10,不然会异常,有三个常数
t.MIN_PRIORITY;表示1
t.MAX_PRIORITY;表示10
t.NORM_PRIORITY;表示5

5,线程同步
  1. 同步块
    用synchronized修饰代码块
  2. 用上边那个修饰方法
  3. 这样子程序都按照合适的顺序
    相当于排队

第十四章 集合类

1.Collection接口

1.要想取出集合中的数据,要使用迭代器

package com.lzw;

import java.util.*;

public class Muster { // 创建类Muster
	public static void main(String args[]) {
		Collection<String> list = new ArrayList<>(); // 实例化集合类对象
		list.add("a"); // 向集合添加数据
		list.add("b");
		list.add("c");
		Iterator<String> it = list.iterator(); // 创建迭代器
		while (it.hasNext()) { // 判断是否有下一个元素
			String str = (String) it.next(); // 获取集合中元素
			System.out.println(str);
		}
	}
}

2.List集合
  1. List继承了Collection中的所有方法,list集合中允许元素重复
  2. 有两个重要方法
    get(int index):获取指定索引位置的元素
    set(int index,Object obj):将集合中指定位置的元素修改为指定的对象
  3. List接口的实现类
    常用的实现类有ArrayList和LinkedList
    List< E > list=new ArrayList<>();
    List< E > list=new LinkedList<>();
    list.add(“nan”);添加元素
    list.remove(2);删除索引位置是2的元素
3.set集合
  1. Treeset类
    要注意改写CompareTo()方法,目的因该是为了排序什么的
package lianxi;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.TreeSet;

import javax.swing.*;


import javax.swing.*;
public class get implements Comparable {
	String name;
	int id;
	public get(String name,int id) {
		this.id=id;
		this.name=name;
	}
	public String getstr() {
		return name;
	}
	public int getid() {
		return id;
	}
	public void setid(int id) {
		this.id=id;
	}
	

	public int compareTo(Object o) {
		get upstu = (get) o;
		int result = id > upstu.id ? 1 : (id == upstu.id ? 0 : -1);
		return result;
	}
	public static void main(String[] args) {
		get stu1=new get("一号",1);
		get stu2=new get("二号",2);
		get stu3=new get("三号",3);
		get stu4=new get("四号",4);
		get stu5=new get("五号",5);
		TreeSet<get> t =new TreeSet<get>();
		t.add(stu1);
		t.add(stu2);
		t.add(stu3);
		t.add(stu4);
		t.add(stu5);
		Iterator<get> it=t.iterator();
	    stu2.setid(8);
		while(it.hasNext()) {
			get stu=it.next();
			System.out.println(stu.getid()+"     "+stu.getstr());
		}
	}
	
}

TreeSet类增加的方法

方法 功能描述
first() 返回set中当前的第一个元素
last() 返回set中当前的最后一个元素
comparator() 返回对这个set中的元素进行排序的比较器,要是自然排序就返回null
headSet(E toElement) 返回一个新的集合,从Element之前的,一般是包括前面不包括后面
subSet(E fromElement,E fromElement) 返回一个新的集合,从e到e,包括前不包括后
tailSet(E fromElement) 返回一个新的集合,从element到之后,包括他
  1. HashSet类,允许使用null元素
    方法一般是新建一个模范类。就是哈希类用于存储。然后添加那个hashCode方法和那个equals方法,输出的时候可以直接在上一个类中添加toString方法,输出更方便,用it。next()就可以。
    例子
package lianxi;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.TreeSet;

import javax.swing.*;


import javax.swing.*;
public class get  {
	String name;
	int id;
	public get(String name, int id) {
		super();
		this.name = name;
		this.id = id;
	}
	public String toString() {
		return "get [name=" + name + ", id=" + id + "]";
	}
	
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + id;
		return result;
	}
	
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		get other = (get) obj;
		if (id != other.id)
			return false;
		return true;
	}
	
}

主方法所在类

package lianxi;

import java.awt.*;
import java.awt.event.*;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

import javax.swing.*;
public class myexprtion  {
	public static void main(String[] args) {
		Set set=new HashSet();
		get g1=new get("小明",1);
		get g2=new get("小红",2);
		get g3=new get("小蓝",3);
		get g4=new get("小紫",4);
		set.add(g1);
		set.add(g2);
		set.add(g3);
		set.add(g4);
		System.out.println(set.size());
		Iterator it=set.iterator();
		while(it.hasNext()) {
			System.out.println(it.next());
		}
	}
}
4.Map集合
  1. Map接口
    接口提供映射,一个key只可以对应一个value
    常用方法
方法 功能描述
put(K key,V value) 向集合中添加指定的key与value的映射关系
containsKey(Object key) 如果这个集合包含指定key映射关系就返回true
containsValue(Object value) 如果这个集合包含这个指定value的映射关系就返回true
get(Object key) 如果存在指定key对象,就返回这个对象的对应值,不然就返回null
keySet() 返回集合中的所有key对象形成的set集合
values() 返回这个集合中所有值对象形成的collections集合
public static void main(String[] args) {
		Map<String, String> map=new HashMap<>();//新建map接口
		map.put("1","baiyun");
		map.put("2","zhnehaokan");
		map.put("3","sjd");
		Set<String> set=map.keySet();
		Iterator<String> it=set.iterator();
		while(it.hasNext()) {
			System.out.println(it.next());
		}
	}
  1. map接口的实现类
    有hashmap和treemap两种,前者对于随机存储很好可以使用null值和null键,但是必须保证键的唯一和映射的唯一。
    treemap不能使用null键,,但是具有一顶的顺序
    两个使用方法完全一样,输出的时候可以先转换为set,然后i用迭代器输出
    输出可以直接用名字输出

第十五章 I/O(输入/输出)

1.File类
  1. 文件的创建和删除
    使用File类创建一个文件对象,常用以下三种方法
    File(String pathname);//直接是文件地址加上文件名
    File(String parent,String child);前面是父路径,后面是子路径
    File(File f,String child);前面是父路径对象,后面是子路径字符串
    创建文件对象之后,要是不存在还可以创建这个文件,用file.creatNewFile()方法
    创建文件夹方法是mkdir()他创建单层文件夹,mkdirs()可以创建多层文件夹。本质是创建目标文件夹但之前没有的话可以顺道创建。
    获取文件信息的常用方法
方法 返回值 说明
getName() String 获取文件的名称
canRead() boolean 判断文件是否可读
canWrite() boolean 判断文件是否可写入
exits() boolean 判断文件是否存在
length() long 以字节为单位获取文件的长度
getAbsolutePath() String 获取文件的绝对路径
getParent() String 获取文件的父路径
isFile() boolean 判断文件是否存在
isDirectory() boolean 判断文件是否为一个目录
isHidden() boolean 判断文件是否为隐藏文件
lastModified() long 获取文件的最后修改时间
2.文件输入/输出流
  1. 一个例子就好
package lianxi;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.*;

public class get  {
	public static void main(String[] args) {
		File f=new File("word.txt");
		try {
			FileOutputStream out=new FileOutputStream(f,true);//是否是追加的写入
			String str="你知道你属猪嘛"+'\n';
			byte b[]=str.getBytes();
			out.write(b);//写进去
			out.close();//关闭文件
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		try {
			FileInputStream in=new FileInputStream(f);
			byte b2[]=new byte[1024];
			int len=in.read(b2);//读取文件顺便获取读取的字节数
			System.out.println(new String(b2,0,len));//设定转换的范围
			in.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
  1. FileReader和FileWriter类与上边的类似,不过写入的时候不需要缓冲区了,直接写入字符串,读出类似
    他是按照字符输入输出,所以每次都是一个完整的字符,不会有乱码
    不过FileReader是顺序的读取文件,只要文件没有关闭或者读完,就可以继续读取。
3.带缓存的输入/输出流
  1. BufferesInputStream与BufferedOutputStream类
    他们对于InputStream和OutStream都有优化效果,、
    他们的构造方法如下
    BufferesInputStream(InputStream in):
    BufferesInputStream(InputStream,int size):
    前者是创建一个带有32字节的缓存流,第二种就是创建指定大小的缓存区。
    BufferedOutputStream输出信息与OutputStream完全一样不过BufferedOutputStream还有一个flush()方法用来将缓存区的数据强制输出完,他的两个构造方法和上边一样。
  2. BufferedReader和BufferedWriter类
    和普通的使用方法类似,不过它可以按行读取和输入行分隔符
    BufferedReader类常用方法
    read():读取单个字符
    readLine():读取一个文本行,返回为字符串,若没读到就返回null
    BufferedWriter类的常用方法:
    write(String s,int off,int len):写入字符串的某一部分
    flush():刷新该留的hauncun
    newLine():写入一个行分隔符
5.数据输入/输出流
  1. DateInputStream与DateOutputStream类的构造方法如下
    DateInputStream(InputStream in):
    DateOutputStream(OutputStream out):
    DateOutputStream只提供了一个readUTF()方法返回字符串
    DateOutputStream类写入字符串有下面三种
    writeBytes(String s):
    writeChars(String s):
    writeUTF(String s):
    还可以后缀数据类型实现指定数据的输入和输出,但是数字的类型两个之间不可以连着,要不然会出错。
import java.io.*;

public class Example_01 { // 创建类
	public static void main(String[] args) { // 主方法
		try {
			// 创建FileOutputStream对象
			FileOutputStream fs = new FileOutputStream("word.txt");
			// 创建DataOutputStream对象
			DataOutputStream ds = new DataOutputStream(fs);
			ds.writeUTF("使用writeUFT()方法写入数据;"); // 写入磁盘文件数据
			//ds.writeChars("使用writeChars()方法写入数据;");
			//ds.writeBytes("使用writeBytes()方法写入数据.");
			ds.close(); // 将流关闭
			// 创建FileInputStream对象
			FileInputStream fis = new FileInputStream("word.txt");
			// 创建DataInputStream对象
			DataInputStream dis = new DataInputStream(fis);
			System.out.print(dis.readUTF()); // 将文件数据输出
		} catch (Exception e) {
			e.printStackTrace(); // 输出异常信息
		}
	}
}

你可能感兴趣的:(学习笔记NO.4)