TreeSelectionModel學習例子

 

package test;

import javax.swing.tree.TreeSelectionModel;
import java.awt.Container;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.JSplitPane;
import java.io.IOException;

public class TreeDemo07 implements TreeSelectionListener{
 JEditorPane editorPane;
 public TreeDemo07(){
  JFrame frame = new JFrame("TreeDemo07");
  Container contentPane = frame.getContentPane();
  DefaultMutableTreeNode root = new DefaultMutableTreeNode("資源管理器");
  DefaultMutableTreeNode node = new DefaultMutableTreeNode("TreeDemo1.java");
  root.add(node);
  node = new DefaultMutableTreeNode("TreeDemo2.java");
  root.add(node);
  node = new DefaultMutableTreeNode("TreeDemo3.java");
  root.add(node);
  node = new DefaultMutableTreeNode("TreeDemo4.java");
  root.add(node);

  JTree tree = new JTree(root);
  //設置Tree的選擇模式為一次只能選擇一個節點
  tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
  //監聽是否有SelectionEvent事件
  tree.addTreeSelectionListener(this);

  JScrollPane scrollPane1 = new JScrollPane(tree);
  editorPane = new JEditorPane();
  JScrollPane scrollPane2 = new JScrollPane(editorPane);
  //左邊是放有JTree的JScrollPane,右邊是放有EditorPane的JScrollPane
  JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
   true,scrollPane1,scrollPane2);

  contentPane.add(splitPane);
  frame.pack();
  frame.setVisible(true);

  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }
 //實現TreeSelectionListener的valueChanged方法
 public void valueChanged(TreeSelectionEvent e){
  JTree tree = (JTree)e.getSource();
  //利用getLastSelectedPathComponent方法取得當前選擇的節點
  DefaultMutableTreeNode selectionNode = 
   (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
  String nodeName = selectionNode.toString();
  if(selectionNode.isLeaf()){//如果被選中的節點是樹葉節點,則顯示其文本內容,否則什么也不做
   //System.getProperty("user.dir")可以取得目前的工作路徑
   //System.getProperty("file.separator")可以取得當前系統默認的文件分割符
   String filePath = "file:" + System.getProperty("user.dir") +
    System.getProperty("file.separator") + nodeName;
   try{
    //利用JEditorPane的setPage方法可以將文件內容顯示在editorPane中
    editorPane.setPage(filePath);
   }
   catch (IOException e1)//如果文件路徑錯誤,則會產生IOException
   {
    System.out.println("找不到文件:" + filePath);
    e1.printStackTrace();
   }
  }
 }
 public static void main(String[] args){
  new TreeDemo07();
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
package BookTest; import java.awt.*; import java.awt.event.*; import java.util.AbstractQueue; import java.util.Vector; import javax.swing.*; import javax.swing.table.*; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeSelectionModel; import javax.swing.event.*; import javax.swing.table.TableColumnModel; //import DbHelp.OperatorJobs; import Dao.ArrayBook; public class Test extends JFrame { public JPanel jp=null; public String aa; //JTable jTable1 = new JTable(); public JTable jTable1=null; private JTree jTree1; DefaultTableModel mode; private JScrollPane scrollPane = null; DefaultMutableTreeNode node; JButton[] btn={new JButton("增加"),new JButton("删除"),new JButton("修改"),new JButton("查询"),new JButton("重置")}; public JTextField[] txt ={new JTextField(),new JTextField(),new JTextField(),new JTextField(),new JTextField(),new JTextField()}; public String[] str1={"1","summer","boy","20","",""}; public String[] str2={"2","wulei","girl","19","",""}; public String[] str3={"3","west","boy","20","",""}; public String[] str4={"4","fish","girl","18","",""}; public String[] str5={"5","youku","boy","21","",""}; public String[] str6={"6","aa","boy","21","",""}; public String[][] tempData1={str1,str2,str3,str4,str5,str6}; public String[] aa1={"1","summer","boy","20","123","123"}; public String[] aa2={"2","wulei","girl","19","123",""}; public String[] aa3={"3","west","boy","20","123",""}; public String[] aa4={"4","fish","girl","18","1",""}; public String[] aa5={"5","youku","boy","21","12",""}; public String[] aa6={"6","aa","boy","21","123",""}; public String[][] tempData4={aa1,aa2,aa3,aa4,aa5,aa6}; //设置表头数据 public String[] tempTitle={"ID","标题","内容","作者","时间","是否选中"}; //设置表格的数据集合 Vector v1=new Vector(); Vecto
要实现这个功能,你需要进行以下步骤: 1. 创建一个JTree对象,并添加树节点。 2. 为JTree对象添加TreeSelectionListener,监听节点选中事件。 3. 在TreeSelectionListener中获取选中的节点,读取该节点代表的文件内容。 4. 将文件内容显示在窗体的右边。 以下是一个简单的示例代码,可以供你参考: ``` import javax.swing.*; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreeSelectionModel; import java.awt.*; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class FileTreeDemo extends JFrame { private JTree fileTree; private JTextArea fileContent; public FileTreeDemo() { setTitle("File Tree Demo"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 创建根节点 DefaultMutableTreeNode root = new DefaultMutableTreeNode("Files"); // 添加子节点 DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("file1.txt"); root.add(node1); DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("file2.txt"); root.add(node2); // 创建JTree对象 fileTree = new JTree(root); fileTree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); // 添加节点选中事件监听器 fileTree.addTreeSelectionListener(new TreeSelectionListener() { @Override public void valueChanged(TreeSelectionEvent e) { DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) fileTree.getLastSelectedPathComponent(); if (selectedNode == null) { return; } String fileName = selectedNode.getUserObject().toString(); String fileContent = readFile(fileName); showFileContent(fileContent); } }); // 创建文件内容显示区域 fileContent = new JTextArea(); fileContent.setEditable(false); // 将JTree和文件内容显示区域添加到窗体中 JScrollPane scrollPane1 = new JScrollPane(fileTree); JScrollPane scrollPane2 = new JScrollPane(fileContent); JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, scrollPane1, scrollPane2); splitPane.setDividerLocation(200); getContentPane().add(splitPane, BorderLayout.CENTER); // 显示窗体 setSize(800, 600); setLocationRelativeTo(null); setVisible(true); } // 读取文件内容 private String readFile(String fileName) { StringBuilder sb = new StringBuilder(); try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) { String line; while ((line = reader.readLine()) != null) { sb.append(line).append("\n"); } } catch (IOException e) { e.printStackTrace(); } return sb.toString(); } // 显示文件内容 private void showFileContent(String content) { fileContent.setText(content); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new FileTreeDemo(); } }); } } ``` 在这个示例中,我们创建了一个JTree对象,添加了两个树节点,当用户选中某个节点时,会自动读取该节点代表的文件内容,并将其显示在窗体的右边。你可以根据这个示例进行修改和扩展,以满足你的具体需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值