📄 apptree.java
字号:
/*程序文件名称:TreeDemoFrame.java
*功能:最简单的显示JTree的示例
*/
import javax.swing.*;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.io.*;
class Remember extends JFrame implements TreeSelectionListener,ActionListener
{
JTree tree=null;
int i=0;
JTextArea text=new JTextArea("",20,20);
DefaultMutableTreeNode root;
DefaultMutableTreeNode month[]=new DefaultMutableTreeNode[13];
JButton b_save=new JButton("保存日志"),
b_del=new JButton("删除日志");
//构造方法,完成界面及树结点初始化
Remember()
{
Container con=getContentPane();
DefaultMutableTreeNode root=new DefaultMutableTreeNode("心情日记本");
//设置以月份为结点的树
for(i=1;i<=12;i++)
{
month[i]=new DefaultMutableTreeNode(""+i+"月");
root.add(month[i]);
}
for(i=1;i<=12;i++)
{
//处理有31天的月份
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
{
for(int j=1;j<=31;j++)
month[i].add(new DefaultMutableTreeNode(j+"日"));
}
//处理有30天的月份
else if(i==4||i==6||i==9||i==11)
{
for(int j=1;j<=30;j++)
month[i].add(new DefaultMutableTreeNode(j+"日"));
}
else
{
for(int j=1;j<=28;j++)
month[i].add(new DefaultMutableTreeNode(j+"日"));
}
}
//设置监听
b_save.addActionListener(this);
b_del.addActionListener(this);
tree=new JTree(root);
JPanel p=new JPanel();
//设置边界布局
p.setLayout(new BorderLayout());
JScrollPane scrollpane_1=new JScrollPane(text);
//带滚动条的面板放置到中间,可以占据最大空间位置
p.add(scrollpane_1,BorderLayout.CENTER);
//设置面板,放置"保存"和删除按钮,面板放在上部
JPanel p_1=new JPanel();
p_1.add(b_save);
p_1.add(b_del);
p.add(p_1,BorderLayout.NORTH);
JScrollPane scrollpane_2=new JScrollPane(tree);
JSplitPane splitpane=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,scrollpane_2,p);
tree.addTreeSelectionListener(this);
con.add(splitpane);
//设置窗体适配器,关闭功能
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{ System.exit(0); }
});
setVisible(true);
setBounds(70,80,200,300);
}
//处理树结点事件
public void valueChanged(TreeSelectionEvent e)
{
//清空文本区中的内容
text.setText("");
if(e.getSource()==tree)
{
//定义被选中的结点
DefaultMutableTreeNode node=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
//如果是叶结点,则可以对文件进行操作
if(node.isLeaf())
{
String str=node.toString();
for(int i=0;i<=12;i++)
{
if(node.getParent()==month[i])
{
try{
String temp=null;
//打开以结点所定义的文本为文件名的文件
File f=new File(node.getParent().toString()+str+".txt");
//建立文本文件输入流,读取文件
FileReader file=new FileReader(f);
BufferedReader in=new BufferedReader(file);
//将读到的文件内容添加到文本区中
while((temp=in.readLine())!=null)
text.append(temp+'\n');
file.close();
in.close();
}
catch(FileNotFoundException e1){ }
catch(IOException e1){ }
}
}
}
}
}
public void actionPerformed(ActionEvent e)
{
//处理"保存"按钮的事件
if(e.getSource()==b_save)
{
DefaultMutableTreeNode node=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
String str=node.toString();
//如果是叶结点,则可以对文件进行操作
if(node.isLeaf())
{
//保存文件
try{
//建立叶结点所定义的文本为文件名的文件
File f=new File(node.getParent().toString()+str+".txt");
//建立文本文件输出流
FileWriter tofile=new FileWriter(f);
BufferedWriter out=new BufferedWriter(tofile);
//将文本区中的内容写到文件缓冲区
out.write(text.getText(),0,(text.getText()).length());
//将缓冲区中的内容写到文件
out.flush();
tofile.close();
out.close();
}
catch(FileNotFoundException e1){ }
catch(IOException e1){ }
}
}
//处理单击"删除"按钮的事件
else if(e.getSource()==b_del)
{
DefaultMutableTreeNode node=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
String str=node.toString();
if(node.isLeaf())
{
try{
//把删除命令写到一个批处理文件中
File f=new File(node.getParent().toString()+str+".txt");
FileWriter tofile=new FileWriter("gxy.bat");
BufferedWriter out=new BufferedWriter(tofile);
String temp1="del"+f.getAbsoluteFile().toString();
out.write(temp1,0,temp1.length());
out.newLine();
out.flush();
tofile.close();
out.close();
}
catch(IOException e1){ }
}
//调用执行删除文件的方法
del();
}
}
//删除文件
void del()
{
//调用外部命令执行批处理程序
try{
Runtime ce=Runtime.getRuntime();
ce.exec("gxy.bat");
}catch(IOException e1){ }
}
}
public class AppTree
{
public static void main(String args[])
{
Remember win=new Remember();
win.pack();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -