求帮忙解释下这个JAVA程序哪一部分是干什么的,最好详细点

http://tieba.baidu.com/p/3845403807... http://tieba.baidu.com/p/3845403807 展开
 我来答
o卡卡西老师o
推荐于2016-11-10 · 超过50用户采纳过TA的回答
知道小有建树答主
回答量:69
采纳率:100%
帮助的人:79.7万
展开全部
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;

/**
 * 这段程序可以对文本类型的文件通过对单个char字符类型的值的增加和减少进行加密和解密。
 * 是用awt和swing GUI图形用户界面完成的小程序。
 * AWT(Abstract Window Toolkit),中文译为抽象窗口工具包,是Java提供的用来建立和设置Java的图形用户界面的基本工具。
 * AWT由Java中的java.awt包提供,里面包含了许多可用来建立与平台无关的图形用户界面(GUI)的类,这些类又被称为组件(components)。
 * 
 * Swing(AWT的子类)是一个用于开发Java应用程序用户界面的开发工具包。
 * 以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。
 * Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。
 * 
 * java图形界面在你毕业以后基本上是用不到的,因为做客户端程序有c++,c,c#等这些都比swing高效,
 * 建议你从swing转android,做手机软件,android的后台端跟swing很类似,你可以认为android是java的swing
 * 在手机端的重生。如果你想从事java开发这个行业,android>javaee,记住我说的话,以后你会明白。
 * @author Administrator
 * 
 */
public class code {
Frame f;//定义一个awt的frame(框架),更多我们用的swing的JFrame
JPanel p1, p2;//定义一个面板,你之前用的awt的小组件,我都改成swing了,awt的在某些电脑上可能存在中文乱码的问题,所以给你调整了。
JLabel l1, l2;//这个是标签,就是一个小东东,上面写着一些字,比如:请输入名字。
JButton key, unkey, scan;//定义按钮,按钮是啥知道不,点一下,原子弹就爆炸了,不要乱点噢。
JTextField t1, t2;//这个是一个只有一行的文本框,常见的是输入名字和密码
JTextArea ta;//定义一个多行的文本框,常见的是输入回复,或者水贴,比如水帝真经、卖房兽这些多行的文本。
String path;//这个不说了,String字符串,定义路径,用来定位文件。
String FileName;//文件名字,不知道文件名字怎么能找到文件,你是福尔摩斯吗,所以必须要有这个东东,文件名字,后面会用到。

public code() {
// 设置系统风格 这个是我给你单独加上的,设置跟随系统的风格,你电脑是apple就是apple的风格,windows就是windows的风格,而非原java风格。
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();//如果风格定义失败了,会抛出异常。因为setLookAndFeel这个方法直接throws new Exception,所以我们必须写一个try catch以防万一。
}
f = new Frame("文件加密");//这个就是实例化对象喽,一个对象实例化,就是给他分配一块内存空间,这样他才能被使用
f.setLayout(new BorderLayout());//这个是设置布局管理器,是定义布局的,BorderLayout(): 构造一个组件之间没有间距(默认间距为0像素)的新边框布局。
p1 = new JPanel();//对象实例化,这个面板的定义在上面声明这个变量的时候都已经加了注释了,我就不赘述了。
p2 = new JPanel();//其实对象实例化就好像你大学毕业了,户口要落户,你要买房子,你要买车子,你要娶媳妇,不然你咋有脸生活?
l1 = new JLabel("选择路径");
scan = new JButton("浏览");
l2 = new JLabel("密钥");
key = new JButton("加密");
unkey = new JButton("解密");
t1 = new JTextField(30);//定义字符串的长度是30的文本框
t2 = new JTextField(20);
ta = new JTextArea();
p1.add(l1);//把li这个标签加到p1这个面板上
p1.add(t1);//把t1这个文本框加到p1这个面板上
p1.add(scan);//把scan这个按钮加到p1这个面板上
f.add(p1, BorderLayout.NORTH);//把p1这个面板放到frame框架的上方,north 北面,按照上北下南的国际约定,就是整个框架的上方。
p2.add(l2);//跟p1面板的操作一样,就不赘述了。说白了,就是要把这些元素一点一点的放上去,就好像你摞积木,要一块一块的来
p2.add(t2);//先放啥,后发啥,都要有个顺序,当然swing放的顺序是可以打乱的,但是那样显示出来的效果你可能就不满意了。
p2.add(key);
p2.add(unkey);
f.add(p2, BorderLayout.SOUTH);//frame框架下面
f.add(ta, BorderLayout.CENTER);//frame框架中间
f.pack();//pack是调整窗口大小,尽量满足每一个组件的最优大小的情况下让窗口最小化
f.setVisible(true);//设置是否可见,默认是不可见的,你要是不见这个setVisible,那就看不到你的作品
f.addWindowListener(new win());//增加窗口监听器 win是实现了窗口监听器的内部类
scan.addActionListener(new scanner());//浏览按钮增加监听动作,点击浏览按钮之后,scanner中的actionperformed的方法会被调用,打开文件浏览窗口
key.addActionListener(new keyer());//加密按钮增加监听动作,点击加密按钮之后,keyer中的actionperformed的方法会被调用,进行加密操作
unkey.addActionListener(new unkeyer());//解密按钮增加监听动作,点击解密按钮之后,unkeyer中的actionperformed的方法会被调用,进行解密操作

}

public static void main(String[] args) {//main方法是你可以直接执行的方法,右键-->run as-->java application就会执行main这个方法,而且mian方法的声明也是固定的,不能改,改了就不会执行这个入口方法了。
code code1 = new code();//声明code对象,会直接调用code类的构造函数public code(),然后就有你看到的界面了。
}

/**
 *  WindowAdapter类说明如下:

1.接收窗口事件的抽象适配器类。此类中的方法为空。此类存在的目的是方便创建侦听器对象。

2.扩展此类可创建 WindowEvent 侦听器并为所需事件重写该方法。(如果要实现 WindowListener 接口,则必须定义该接口内的所有方法。此抽象类将所有方法都定义为 null,所以只需针对关心的事件定义方法。)

3.使用扩展的类可以创建侦听器对象,然后使用窗口的 addWindowListener 方法向该窗口注册侦听器。当通过打开、关闭、激活或停用、图标化或取消图标化而改变了窗口状态时,将调用该侦听器对象中的相关方法,并将 WindowEvent 传递给该方法。 

4.方法摘要:

方法摘要
void windowActivated(WindowEvent e) 
激活窗口时调用。
void windowClosed(WindowEvent e) 
当窗口已被关闭时调用。
void windowClosing(WindowEvent e) 
窗口正处在关闭过程中时调用。
void windowDeactivated(WindowEvent e) 
停用窗口时调用。
void windowDeiconified(WindowEvent e) 
取消图标化窗口时调用。
void windowGainedFocus(WindowEvent e) 
该 Window 被设置为聚焦 Window 时调用,聚焦 Window 意味着该 Window 或其某个子组件将接收键盘事件。
void windowIconified(WindowEvent e) 
图标化窗口时调用。
void windowLostFocus(WindowEvent e) 
该 Window 不再为聚焦 Window 时调用,不再为聚焦 Window 意味着键盘事件不再传递到该 Window 或其任意子组件。
void windowOpened(WindowEvent e) 
已打开窗口时调用。
void windowStateChanged(WindowEvent e) 
窗口状态改变时调用。
 * @author Administrator
 *
 */
class win extends WindowAdapter {//window适配器

public void windowClosing(WindowEvent e) {//重载windowClosing方法
System.exit(0);//安全退出,这样写会使整个GUI完全退出,不会存在未关掉的情况。
}
}

/**
 * ActionListener用于接收操作事件的侦听器接口。对处理操作事件感兴趣的类可以实现此接口,而使用该类创建的对象可使用组件的 addActionListener 方法向该组件注册。
 * 在发生操作事件时,调用该对象的 actionPerformed 方法。
 */
class scanner implements ActionListener {//浏览按钮的监听器
public void actionPerformed(ActionEvent e) {
JFileChooser file = new JFileChooser(".");//创建一个文本选择器
int result = file.showOpenDialog(null);//打开文本选择器
if (result == JFileChooser.APPROVE_OPTION) {//如果选择了某个文件
FileName = file.getSelectedFile().getName();//获取文件名字
path = file.getSelectedFile().getAbsolutePath();//获取文件绝对路径
t1.setText(path);//t1这个文本框设置他的内容是文件的绝对路径
FileReader reader = null;
try {
reader = new FileReader(path);//声明一个文件读取器,并指向你选中的文件
int tempchar;
ta.setText("");//ta大文本框内容先清空
while ((tempchar = reader.read()) != -1) {//reader.read()这个方法可以一个一个的读取字符,不断循环,直到读取完毕。
char n = (char) tempchar;//获取到char类型的字符 temppchar是个int值,可以直接强转成char。
char[] m = { n };//定义一个char数组
String M = new String(m, 0, 1);//把char数组转化成字符串
ta.append(M);//大文本框后面添加这个字符串,这样只能针对英文字母,不能处理中文噢,你这个程序只能处理abcd这种字母类型的东东。中文是多字节的所以处理不了。
}
reader.close();//关闭读取器,如果你不关闭的话,会留在内存里面,造成垃圾。
} catch (Exception e1) {
ta.append("文件读取出错!");//读取失败大文本框显示失败信息
}
}

}

}

class keyer implements ActionListener {//加密的监听器
public void actionPerformed(ActionEvent e) {

FileReader read1 = null;
FileWriter write1 = null;
int n;
try {
String a = t1.getText();
String b = t2.getText();
File Exist = new File("加密" + FileName);//获取到要加密的文件
if (a.equals(""))
throw new MyException1("请选择路径!");
if (Exist.exists())
throw new MyException1("已存在加密文件,请先删除,再进行加密!");
if (b.equals(""))
throw new MyException1("请输入密钥!");
else
n = Integer.parseInt(t2.getText());
try {
read1 = new FileReader(path);
write1 = new FileWriter("加密" + FileName, true);
int i;
while ((i = read1.read()) != -1) {

write1.write((char) (i + n));//这里是把字符的值加上你输入要加密的密钥,比如5,然后写入到你创建的文件中
}
write1.close();
JOptionPane.showMessageDialog(null, "加密成功", "祝贺您",
JOptionPane.PLAIN_MESSAGE);//这个是显示提示框
ta.setText("");
t2.setText("");
} catch (IOException e1) {

}
} catch (MyException1 e2) {
}
}
}

class unkeyer implements ActionListener {//解密我就不说了
public void actionPerformed(ActionEvent e) {
FileReader read1 = null;
FileWriter write1 = null;
int n;
try {
String a = t1.getText();
String b = t2.getText();
File Exist = new File("解密" + FileName);
if (a.equals(""))
throw new MyException1("请选择路径!");
if (Exist.exists())
throw new MyException1("已存在解密密文件,请先删除,再进行解密!");
if (b.equals(""))
throw new MyException1("请输入密钥!");
else
n = Integer.parseInt(t2.getText());
try {
ta.setText("");
t2.setText("");
read1 = new FileReader(path);
write1 = new FileWriter("解密" + FileName, true);
int i;
while ((i = read1.read()) != -1) {
write1.write((char) (i - n));
char[] m = { (char) (i - n) };
String M = new String(m, 0, 1);
ta.append(M);
}
write1.close();
JOptionPane.showMessageDialog(null, "解密成功", "祝贺您",
JOptionPane.PLAIN_MESSAGE);
} catch (IOException e1) {
}
} catch (MyException1 e2) {
}
}
}

class MyException1 extends Exception {//这个是自定义的异常,如果有异常,弹出框展示异常信息。
public MyException1(String message) {
JOptionPane.showMessageDialog(null, message);
}

}
}

不要谢我,我叫雷哄

dark19861201
2015-06-23 · TA获得超过2153个赞
知道大有可为答主
回答量:2584
采纳率:79%
帮助的人:1793万
展开全部
public class code 这个是展示界面的
class scanner这个是读取文件操作的代码
class keyer 这个是加密的操作
class unkeyer解密的操作
大体框架就是这样,有问题请追问
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式