import java.awt.BorderLayout;
import java.io.File; import java.io.FileNotFoundException; import java.util.concurrent.ExecutionException; import java.util.logging.Level; import java.util.logging.Logger;import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTree;
import javax.swing.SwingWorker; import javax.swing.event.TreeExpansionEvent; import javax.swing.event.TreeExpansionListener;import javax.swing.table.DefaultTableModel;
import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel;import javax.swing.tree.TreePath; /** * 文件系统树 * @author xiaoYu Email: [email protected] */ public class JFileTree extends JTree { public static final boolean DIRECTORY_AND_FILE = true;//含有文件节点 public static final boolean DIRECTORY_NO_FILE = false;//不含有文件节点 private static final String DESKTOP_EN = "Desktop"; private static final String DESKTOP_ZH = "桌面"; private static final String DISK_EN = "Disk"; private JFileTreeNode systemNode = null; private JFileTreeNode rootNode; private DefaultTreeModel jFileTreeModel; private boolean model;//显示文件或不显示文件 public JFileTree() throws FileNotFoundException { this(DIRECTORY_AND_FILE); }
public JFileTree(boolean model) { this(null, model); } public JFileTree(File file) { this(file, DIRECTORY_AND_FILE); } public JFileTree(File file, boolean model) { this.model = model; putClientProperty("JTree.lineStyle", "Angled"); //建立默认系统文件树 if (file == null || !file.exists()) { file = new File(System.getProperty("user.home") + File.separator + DESKTOP_EN); if (!file.exists()) { file = new File(System.getProperty("user.home") + File.separator + DESKTOP_ZH); } rootNode = systemNode = new JFileTreeNode(file); } else { rootNode = new JFileTreeNode(file); } rootNode.expand(); jFileTreeModel = new DefaultTreeModel(rootNode);
setModel(jFileTreeModel); addTreeExpansionListener(new JTreeExpansionListener()); } public String getPathName(TreePath path) { Object o = path.getLastPathComponent(); if (o instanceof JFileTreeNode) { return ((JFileTreeNode) o).file.getAbsolutePath(); } return null; } /** * 文件树节点 */
protected class JFileTreeNode extends DefaultMutableTreeNode { protected File file; protected boolean isDirectory;
public JFileTreeNode(File file) { this.file = file; //判断该文件是文件还是文件夹
isDirectory = file.isDirectory();
setUserObject(file); } @Override
//是否是根接点
public boolean isLeaf() { if (file == null) { return false; } return !isDirectory; } @Override public String toString() { if (file.getParentFile() == null) { return DISK_EN + "(" + file.getPath().substring(0, 2) + ")"; } else { return file.getName(); } } @Override public boolean getAllowsChildren() { return isDirectory; } /** * 节点展开 * @return 展开是否含有子节点 */ public boolean expand() { this.removeAllChildren(); if (this.equals(systemNode)) { File[] roots = File.listRoots(); for (int i = 0; i < roots.length; i++) { if (roots[i].exists()) { this.add(new JFileTreeNode(roots[i])); } } } File[] files = file.listFiles(); if (files == null) { return false; } for (int i = 0; i < files.length; i++) { File f = files[i]; /** * 文件夹必添加 * 文件则受系统文件树model控制 */ if (f.isDirectory() || model) { this.add(new JFileTreeNode(f)); } } return true; } } protected class JTreeExpansionListener implements TreeExpansionListener { public void treeExpanded(TreeExpansionEvent e) { JFileTreeNode fileNode = (JFileTreeNode) e.getPath().getLastPathComponent(); if (fileNode != null) { new FileNodeExpansion(fileNode).execute(); } } public void treeCollapsed(TreeExpansionEvent e) { } } /** * 展开节点的后台线程 */ protected class FileNodeExpansion extends SwingWorker<Boolean, Void> { private JFileTreeNode node; public FileNodeExpansion(JFileTreeNode node) { this.node = node; } @Override protected Boolean doInBackground() throws Exception { return node.expand(); } @Override protected void done() { try { //节点可以展开 if (get()) { jFileTreeModel.reload(node); } } catch (InterruptedException ex) { Logger.getLogger(JFileTree.class.getName()).log(Level.SEVERE, null, ex); } catch (ExecutionException ex) { Logger.getLogger(JFileTree.class.getName()).log(Level.SEVERE, null, ex); } } }
public static void main(String args[]){
//DefaultTableModel model = new DefaultTableModel(srcdata, cname);
JScrollPane js = new JScrollPane();
File file = new File("f:\\");
JTree jft;
try {
jft = new JFileTree(file);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JTable jt = new JTable();
jt.add(jft);//----这里报错。好象是不支持该参数。。不就是继承了一下么,怎么就不支持了呢
} }//从入口函数开始往下到结束是问题所在位置,上面的jfiletree类就不要看了,是权威人士写的,至于是哪个我也不知道,反正是没错了,我的问题是:我想用jtable将jtree嵌套进去,可是却报错。。
import java.io.File; import java.io.FileNotFoundException; import java.util.concurrent.ExecutionException; import java.util.logging.Level; import java.util.logging.Logger;import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTree;
import javax.swing.SwingWorker; import javax.swing.event.TreeExpansionEvent; import javax.swing.event.TreeExpansionListener;import javax.swing.table.DefaultTableModel;
import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel;import javax.swing.tree.TreePath; /** * 文件系统树 * @author xiaoYu Email: [email protected] */ public class JFileTree extends JTree { public static final boolean DIRECTORY_AND_FILE = true;//含有文件节点 public static final boolean DIRECTORY_NO_FILE = false;//不含有文件节点 private static final String DESKTOP_EN = "Desktop"; private static final String DESKTOP_ZH = "桌面"; private static final String DISK_EN = "Disk"; private JFileTreeNode systemNode = null; private JFileTreeNode rootNode; private DefaultTreeModel jFileTreeModel; private boolean model;//显示文件或不显示文件 public JFileTree() throws FileNotFoundException { this(DIRECTORY_AND_FILE); }
public JFileTree(boolean model) { this(null, model); } public JFileTree(File file) { this(file, DIRECTORY_AND_FILE); } public JFileTree(File file, boolean model) { this.model = model; putClientProperty("JTree.lineStyle", "Angled"); //建立默认系统文件树 if (file == null || !file.exists()) { file = new File(System.getProperty("user.home") + File.separator + DESKTOP_EN); if (!file.exists()) { file = new File(System.getProperty("user.home") + File.separator + DESKTOP_ZH); } rootNode = systemNode = new JFileTreeNode(file); } else { rootNode = new JFileTreeNode(file); } rootNode.expand(); jFileTreeModel = new DefaultTreeModel(rootNode);
setModel(jFileTreeModel); addTreeExpansionListener(new JTreeExpansionListener()); } public String getPathName(TreePath path) { Object o = path.getLastPathComponent(); if (o instanceof JFileTreeNode) { return ((JFileTreeNode) o).file.getAbsolutePath(); } return null; } /** * 文件树节点 */
protected class JFileTreeNode extends DefaultMutableTreeNode { protected File file; protected boolean isDirectory;
public JFileTreeNode(File file) { this.file = file; //判断该文件是文件还是文件夹
isDirectory = file.isDirectory();
setUserObject(file); } @Override
//是否是根接点
public boolean isLeaf() { if (file == null) { return false; } return !isDirectory; } @Override public String toString() { if (file.getParentFile() == null) { return DISK_EN + "(" + file.getPath().substring(0, 2) + ")"; } else { return file.getName(); } } @Override public boolean getAllowsChildren() { return isDirectory; } /** * 节点展开 * @return 展开是否含有子节点 */ public boolean expand() { this.removeAllChildren(); if (this.equals(systemNode)) { File[] roots = File.listRoots(); for (int i = 0; i < roots.length; i++) { if (roots[i].exists()) { this.add(new JFileTreeNode(roots[i])); } } } File[] files = file.listFiles(); if (files == null) { return false; } for (int i = 0; i < files.length; i++) { File f = files[i]; /** * 文件夹必添加 * 文件则受系统文件树model控制 */ if (f.isDirectory() || model) { this.add(new JFileTreeNode(f)); } } return true; } } protected class JTreeExpansionListener implements TreeExpansionListener { public void treeExpanded(TreeExpansionEvent e) { JFileTreeNode fileNode = (JFileTreeNode) e.getPath().getLastPathComponent(); if (fileNode != null) { new FileNodeExpansion(fileNode).execute(); } } public void treeCollapsed(TreeExpansionEvent e) { } } /** * 展开节点的后台线程 */ protected class FileNodeExpansion extends SwingWorker<Boolean, Void> { private JFileTreeNode node; public FileNodeExpansion(JFileTreeNode node) { this.node = node; } @Override protected Boolean doInBackground() throws Exception { return node.expand(); } @Override protected void done() { try { //节点可以展开 if (get()) { jFileTreeModel.reload(node); } } catch (InterruptedException ex) { Logger.getLogger(JFileTree.class.getName()).log(Level.SEVERE, null, ex); } catch (ExecutionException ex) { Logger.getLogger(JFileTree.class.getName()).log(Level.SEVERE, null, ex); } } }
public static void main(String args[]){
//DefaultTableModel model = new DefaultTableModel(srcdata, cname);
JScrollPane js = new JScrollPane();
File file = new File("f:\\");
JTree jft;
try {
jft = new JFileTree(file);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JTable jt = new JTable();
jt.add(jft);//----这里报错。好象是不支持该参数。。不就是继承了一下么,怎么就不支持了呢
} }//从入口函数开始往下到结束是问题所在位置,上面的jfiletree类就不要看了,是权威人士写的,至于是哪个我也不知道,反正是没错了,我的问题是:我想用jtable将jtree嵌套进去,可是却报错。。
解决方案 »
- for语句出错,但不知哪里出错,求指教?
- 求学习类java网站源码+数据库等可以跑起来的东东学习
- JAVA如何获取当前系统时间?
- 大家用的软件打包工具是InstalShield吗
- 哪位兄弟有fileupload组件 commons-fileupload-1.1-dev.jar,commons-io-1.1-dev.jar, 麻烦发一份给我:[email protected].谢谢!
- 我在linux下运行java程序遇到的一个奇怪的问题,请大虾帮忙解决 ,急,在线等待
- 什么工具可以根据设计设计好的ER图,导出java的model类。
- 关于timer和daemon线程的使用探讨
- 可以把二进制数字转成十六制么?
- 怎么计算求反的值?
- 关于一个算法
- 在JDK1.1中Thread类定义了suspend()和resume()方法,但是在JDK1.2中已经过时,应使用什么方法来替代之?
出现的是编译错误。
两种方法,你的main方法里面
:
1 JTree jft = null;2 e.printStackTrace();
return;可以都加上去。其余的,你的程序我没有跑,这样可以保证不会有编译的问题了。