最近做了几个小项目:
1.画图板
2.五子棋
3.文件搜索器(包括按关键字搜索)
4.学生信息管理系统(主要是集合框架的简单应用)
5.多线程的简单应用
总的说来,这几个项目只是实现了一些小小的功能,还有很大的改进空间。
通过这几个项目,进一步的熟悉了Java中的类及其一些方法的作用及使用。
下面说说比较重要的几点:
1.传参数:当需要把一个类A的参数传到类B时,可以重载类B的构造方法。例:
//构造方法,用来接收外部传来的参数
public MyMouseListener(ShapePanel shapePanel, ColorPanel colorPanel,DrawPanel drawPanel, Graphics g) {
this.shape_panel = shapePanel;
this.color_panel = colorPanel;
this.draw_panel = drawPanel;
this.g2 = (Graphics2D) g;
draw_panel.setList(list);//将list传递到主界面中去 这一个方法很特殊,在不同类中修改同一个数据结构
}
2.画图板中,有些图形需要锁住个别点的坐标,sometimes u need to rewiew it .
3.文件搜索器,主要是会使用方法。
File(String pathname)
通过将给定路径名字符串转换为抽象路径名来创建一个新 File
实例。
/**
* 搜索指定路径下的文件信息(并且打印所有的文件的绝对路径)
* 搜索文件的方法并且计数,然后把绝对路径显示到文本域中
*
* @param path
* 用户输入的文件的绝对路径
*/
public static void query(String path) {
// 根据得到的path构建一个File对象
File file = new File(path);
// 判断该path的文件是否存在
if (file.exists()) {
if (file.isFile()) {
//如果是文件类型
countFile++;
//把文件的绝对路径显示出来
jt_result.append(file.getAbsolutePath());
jt_result.append("\r\n");//回车和换行是两步骤
jl_countfile.setText(countFile+"");
} else if (file.isDirectory()) {
countDirection++;
jl_countDirectionField.setText(String.valueOf(countDirection));
jt_result.append(file.getAbsolutePath());
jt_result.append("\n");
//如果是文件夹类型,则得到该文件夹下的所有文件和文件夹
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
//对该文件夹下的每一个文件或文件夹创建一个File对象,并让其调用这个方法,并且递归下去
File f = files[i];
query(f.getAbsolutePath());
}
}
}
//如果该路径不存在文件
else {
jt_result.append("路径无效");
}
}
若要用关键字进行搜索时,可以这样
if (path.contains(key)) //如果文件名包含key
4.用户的账号及其密码可以用集合框架的HashMap来存储,因为它的key和value是一一对应的,可以通过key值来得到相应的value,并且判断是否相等
else if(record.equals("注册")){
//将用户输入的信息保存到map中
String username = field_username.getText();
String password = field_password.getText();
if(username.equals("")||password.equals("")){
JOptionPane.showMessageDialog(registerFrame, "输入信息不能为空!!!");
}else{
map.put(username,password);
JOptionPane.showMessageDialog(registerFrame, "注册完成,请登陆!");
System.out.println("map="+map);
}
}
//这一步是注册,并且立即把数据存放在map中,但是这只是在内存中,程序结束,用户注册的信息就没了。可以考虑用IO流,把数据写入硬盘,用的时候去读取即可
if(record.equals("login")){
//验证用户输入的信息
String key_username=text_acount.getText();
String value_password=text_passWord.getText();
//用户登陆会出现三种情况 用户不存在 密码错误 ok
if(map.get(key_username)!=null){//说明用户存在
if(map.get(key_username).equals(value_password)){//ok
this.dispose();
TheSecondUI secUI=new TheSecondUI();
}else{
JOptionPane.showMessageDialog(this, "输入的密码与用户名不匹配!");
}
}else{
JOptionPane.showMessageDialog(this, "此用户不存在!");
}
}
//这是用户登录时候,判断用户的输入与map种的数据是否相符
5.多线程:线程创建有三种方式,但是本质上是两种
</pre><pre name="code" class="java">①class A entends Thread{
<pre name="code" class="java"><span style="white-space:pre"> </span>//重写方法
public void run() {
<span style="white-space:pre"> </span>super.run();
try {
Thread.sleep(10);//注意这里,实现接口的要用thread类来调用,因为没有Thread类对象,而且sleep是静态方法
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//(调用线程时)线程对象.start();
②public class ImplementsInterface implements Runnable{
}
public void count() {
int i = 0;
while (i<20) {
i++;
System.out.println(name+"="+i);
}
}
//实现接口的抽象方法
public void run() {
<span style="white-space:pre"> </span>count();
try {
Thread.sleep(10);//注意这里,实现接口的要用thread类来调用,因为没有Thread类对象,而且sleep是静态方法
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
<pre name="code" class="java">//(调用线程时) new Thread(线程对象).start();
③通过内部类的方法
class A{
<span style="white-space:pre"> </span>Thread th = new Thread(){
<span style="white-space:pre"> </span>run(){//重写父类的run方法
<span style="white-space:pre"> </span>super.run();
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
}
其实本质上是一类,因为查看源代码可知,Thread类也是实现Runnable接口的。
今年即将结束,新的一年,多多练习,打好基础,展望未来吧!喜羊羊