课 程 设 计 报 告
学院、系: 吉林大学珠海学院计算机科学与技术系
专业名称:
计算机科学与技术
课程设计科目
java 程序课程设计
学生姓名:
指导教师:
完成时间:
陈舒韵
陈红玲
2012 年 3 月-7 月
(课程设计报告正文部分)
题目 3
一、设计任务与目标
编写一个窗口程序,该程序可以打开硬盘中的某个目录,并可以打开目录中
某个文件进行浏览。
设计要求:
1)在界面上设计两个文本区,一个用于显示打开的硬盘上的目录,另一用
于打开所选中该目录中的文件。
2)设计文本框,用于显示当前的目录位置
*3)设计一个“压缩”按钮,和一个指定目录文本框,将选中的这个文件压
缩到指定的目录中。
二、方案设计与论证
针对这道题的特点,首先做一个界面、构造一个目录树模型,用 swing 做界
面设计,JTree 实现系统目录,界面内容包括显示目录的文本框、显示目录树形
和显示目录中文件别表的两个文本区,分别设置监听器,监听目录树节点以及界
面内的一个 button,各个分功能对应各自的类。在做这道题时遇到最大的障碍就
是实现系统文件目录树中涵盖了 JTree 的大部分属性,这部分知识课本上只略微
提及了一下,参考了很多别人的程序,需要用到 File[] fles = file.listFiles()
这个技术(用以得到某文件夹下的子文件夹),目前为止自己也十分不熟悉,编
写的很多程序都是直接挪用别人的。因为技术有限,显示目录文件的文本区最后
只能做到显示目录文件名称,故最后第三问未能完成。
三、程序框图或流程图,程序清单与调用关系
主界面
显示目录路径
显示目录文件
显示树形目录
监听器
构造目录树模型
四、全部源程序清单
package kechengsheji;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*;
public class TiMu3 extends JFrame
{
public static final ImageIcon ICON_FOLDER = new ImageIcon("folder.gif");
public static final ImageIcon ICON_COMPUTER = new
ImageIcon("computer.gif");
public static final ImageIcon ICON_DISK = new ImageIcon("disk.gif");
public static final ImageIcon ICON_EXPANDEDFOLDER = new
ImageIcon("expandedfolder.gif");
protected JTree m_tree;
protected DefaultTreeModel m_model;//一个目录树模型
protected JTextField m_display;//m_display就是显示目录的那个JTextField
protected JTextArea ta;
public String s;
public BufferedReader fin;
public TiMu3()
{
super("Directories Tree");
setBounds(320, 100, 450, 400);
DefaultMutableTreeNode top = new DefaultMutableTreeNode(
new IconData(ICON_COMPUTER, null, "Computer"));//构造默认树形父节点,
名字为Computer
DefaultMutableTreeNode node;//定义父节点下边的节点
File[] roots = File.listRoots();//列出可用的文件系统根
for ( int k = 0 ; k < roots.length; k ++ ) {
node = new DefaultMutableTreeNode(new IconData(
ICON_DISK, null, new FileNode(roots[k])));//从k=0开始建立新的
节点
top.add(node);//在树形父节点下构造其孩子节点
node.add( new DefaultMutableTreeNode(new Boolean(true)));//在构
造的孩子节点下构造字节点
}
m_model = new DefaultTreeModel(top);//以top节点为首节点建立一个目录树
m_tree = new JTree(m_model);//目录树以目录树模型m_model建立目录树
m_tree.putClientProperty("JTree.lineStyle", "Angled");
TreeCellRenderer renderer = new IconCellRenderer();
m_tree.setCellRenderer(renderer);
m_tree.addTreeExpansionListener(new DirExpansionListener());//添加
模型
响应
m_tree.addTreeSelectionListener(new DirSelectionListener());//添
加响应
m_tree.getSelectionModel().setSelectionMode( TreeSelectionModel.SINGL
E_TREE_SELECTION);
m_tree.setShowsRootHandles(true); //设置显示源处理?
m_tree.setEditable(false);
//界面设置
JScrollPane s = new
s.getViewport().add(m_tree);//把m_tree添加到滚动的Pane里去
add(s, BorderLayout.CENTER);//把s添加到JFrame的中区
JScrollPane();//新建一个滚动的Pane
m_display = new JTextField();//显示目录的文本区
Panel p = new Panel();//新建一个面板p
p.setLayout(new BorderLayout());
p.add(m_display,BorderLayout.CENTER);//把文本区添加到p的中区
Button b = new Button("确定");//新建一个“确定”按钮b
b.addActionListener(new TT());//给Button添加监听器
p.add(b,BorderLayout.EAST);//把b添加到p的东区
add(p, BorderLayout.NORTH);//把p添加到JFrame的北区
ta=new JTextArea(12,12);//文本区用于打开所选中目录的文件
ta.setBackground(Color.yellow);
JScrollPane s1 = new JScrollPane();//新建一个滚动的Pane(s1)
s1.getViewport().add(ta);//把ta添加到滚动的Pane(s1)里去
add(s1, BorderLayout.SOUTH);//把s1添加到JFrame的南区
WindowListener wndCloser = new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
}
System.exit(0);
};
addWindowListener(wndCloser);
setVisible(true);
}//end of structured method
DefaultMutableTreeNode getTreeNode(TreePath path)
return
(DefaultMutableTreeNode)(path.getLastPathComponent());//获取选中节点
{
}
}
FileNode getFileNode(DefaultMutableTreeNode node)
{
if (node == null)
return null;
Object obj = node.getUserObject();
if (obj instanceof IconData)
obj = ((IconData)obj).getObject();
if (obj instanceof FileNode)
return (FileNode)obj;
else
return null;
// Make sure expansion is threaded and updating the tree model
// only occurs within the event dispatching thread.
class DirExpansionListener implements TreeExpansionListener
{
public void treeExpanded(TreeExpansionEvent event)
{
final DefaultMutableTreeNode node = getTreeNode(
event.getPath());
final FileNode fnode = getFileNode(node);
Thread runner = new Thread()
{
public void run()
{
if (fnode != null && fnode.expand(node))
{
Runnable runnable = new Runnable()
{
public void run()
{
m_model.reload(node);
}
};
SwingUtilities.invokeLater(runnable);
}
}
};
runner.start();
}
public void treeCollapsed(TreeExpansionEvent event) {}
}//end of DirExpansionListener
public void showFile(String s) {
try{
File f = new File(s);
ta.setText(f.getName()+'\n');
treeFile(f,1);
}catch(Exception e) {
System.out.println("读取文件结束!");
}
}
public void treeFile(File f,int level) {
String srt = "-";
for(int i = 0;i
录树?
{
public void valueChanged(TreeSelectionEvent event)
{
DefaultMutableTreeNode node = getTreeNode(
event.getPath());
FileNode fnode = getFileNode(node);
if (fnode != null)
m_display.setText(fnode.getFile().
getAbsolutePath());//返回路径名字符串
else
m_display.setText("");
}
}// end of class DirSelectionListener
//这里是main方法,当要被别的类调用时就把此处注释
public static void main(String argv[])
{
new TiMu3();
}
}//end of class PathToSave
JLabel implements TreeCellRenderer
class IconCellRenderer extends
{
protected Color m_textSelectionColor;
protected Color m_textNonSelectionColor;
protected Color m_bkSelectionColor;
protected Color m_bkNonSelectionColor;
protected Color m_borderSelectionColor;
protected boolean m_selected;
public IconCellRenderer() //没有用?
{
super();
m_textSelectionColor = UIManager.getColor(
"Tree.selectionForeground");
m_textNonSelectionColor = UIManager.getColor(
"Tree.textForeground");
m_bkSelectionColor = UIManager.getColor(
"Tree.selectionBackground");
m_bkNonSelectionColor = UIManager.getColor(
"Tree.textBackground");
m_borderSelectionColor = UIManager.getColor(