JTree问题(急) 请问JTree中的结点能不能是一些具体的Swing组件(比如JCheckBox)??也就是说在显示界面的时候各个结点是自定义的Swing组件,用户可以根据Swing组件进行除JTree之外的操作。请帮忙给出个例子。。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以,jtree的每个节点都有自己的绘制器和编辑器,编辑器可以作出你想要得节点 /* * FileViewer.java * * Created on 2005年5月8日, 上午10:46 */package test.tree;import java.io.File;import java.awt.*;import javax.swing.*;import javax.swing.event.*;import javax.swing.tree.*;/** * * @author yanl */public class FileViewer extends JFrame{ private static String metalClassName = "lambert.swing.plaf.jupiter.JupiterLookAndFeel"; /** Creates a new instance of FileViewer */ public FileViewer() {// try {// UIManager.setLookAndFeel(metalClassName);// SwingUtilities.updateComponentTreeUI(this);// pack();// } catch (UnsupportedLookAndFeelException exc) {// System.out.println("UnsupportedLookAndFeelException Error:" + exc);// } catch (IllegalAccessException exc) {// System.out.println("IllegalAccessException Error:" + exc);// } catch (ClassNotFoundException exc) {// System.out.println("ClassNotFoundException Error:" + exc);// } catch (InstantiationException exc) {// System.out.println("InstantiateException Error:" + exc);// } setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); final JTree tree = new JTree(createTreeModel()); JScrollPane scrollPane = new JScrollPane(tree); FileNodeRenderer renderer = new FileNodeRenderer(); tree.setEditable(true); tree.setCellRenderer(renderer); getContentPane().add(scrollPane); tree.addTreeExpansionListener(new TreeExpansionListener(){ public void treeCollapsed(TreeExpansionEvent e){ } public void treeExpanded(TreeExpansionEvent e){ TreePath path = e.getPath(); FileNode node = (FileNode)path.getLastPathComponent(); if(!node.isExplored()){ DefaultTreeModel model = (DefaultTreeModel)tree.getModel(); node.explore(); model.nodeStructureChanged(node); } } }); tree.addTreeSelectionListener(new TreeSelectionListener(){ public void valueChanged(TreeSelectionEvent e){ TreePath path = e.getNewLeadSelectionPath(); FileNode node = (FileNode)path.getLastPathComponent(); node.setSelected(); if(path != null) System.out.println(path); } }); } private DefaultTreeModel createTreeModel(){ File root = new File("E:/"); FileNode rootNode = new FileNode(root); rootNode.explore(); return new DefaultTreeModel(rootNode); } public static void main(String [] args){ FileViewer f = new FileViewer(); f.setSize(300,300); f.show(); }}class FileNode extends DefaultMutableTreeNode{ private boolean explored = false; private boolean selected = false; public FileNode(File file){ setUserObject(file); } public boolean getAllowsChildren() {return isDirectory();} public boolean isLeaf() {return !isDirectory();} public File getFile(){return (File)getUserObject();} public boolean isExplored(){return explored;} public boolean isDirectory(){ File file = getFile(); return file.isDirectory(); } public boolean isSelected(){ return selected; } public void setSelected(){ selected = !selected; } public String toString(){ File file = (File)getUserObject(); String filename = file.toString(); int index = filename.lastIndexOf("\\"); return (index!=-1&&index!=filename.length()-1)? filename.substring(index+1):filename; } public void explore(){ if(!isExplored()){ File file = getFile(); File [] children = file.listFiles(); for(int i = 0;i<children.length;++i){ add(new FileNode(children[i])); } explored = true; } }}class FileNodeRenderer extends DefaultTreeCellRenderer{ protected JCheckBox checkBox = new JCheckBox("Backup"); private Component strut = Box.createHorizontalStrut(5); private JPanel panel = new JPanel(); public FileNodeRenderer(){ panel.setBackground(UIManager.getColor("Tree.textBackground")); setOpaque(false); checkBox.setOpaque(false); panel.setOpaque(false); panel.setLayout(new FlowLayout(FlowLayout.CENTER,0,0)); panel.add(this); panel.add(strut); panel.add(checkBox); } public Component getTreeCellRendererComponent( JTree tree,Object value,boolean selected, boolean expanded,boolean leaf,int row, boolean hasFocus){ FileNode node = (FileNode)value; super.getTreeCellRendererComponent(tree, value,selected,expanded,leaf,row, hasFocus); checkBox.setVisible(node.isDirectory()); checkBox.setSelected(node.isSelected()); return panel; }} 这位同学,你的问题,可有在这个网站看到所有的情况,还有例子:http://java.sun.com/docs/books/tutorial/uiswing/components/example-1dot4/记得给我加分:我也是小兵 看一下 很急啊,两个小程序,求答案啊 寻求一个思路(或许对你有益,进来帮帮我)急。 如何实现分卷压缩? 求《《Eclipse开发入门与项目实践》》的电子版图书下载??? 关于图像的问题 急!急!急!关于数据库事务提交的一个问题 为什么在jb7环境中编译一个项目时老是出现cannot access directory java\lang applet中的錯誤java.security.accesscontrolexception 在WIN/XP下如何设置JDK1.3.1/JDK1.4的路径! 100分求解决办法最好有例子 谢谢 JTabbedPane简单问题?
* FileViewer.java
*
* Created on 2005年5月8日, 上午10:46
*/package test.tree;
import java.io.File;
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;/**
*
* @author yanl
*/
public class FileViewer extends JFrame{
private static String metalClassName = "lambert.swing.plaf.jupiter.JupiterLookAndFeel";
/** Creates a new instance of FileViewer */
public FileViewer() {
// try {
// UIManager.setLookAndFeel(metalClassName);
// SwingUtilities.updateComponentTreeUI(this);
// pack();
// } catch (UnsupportedLookAndFeelException exc) {
// System.out.println("UnsupportedLookAndFeelException Error:" + exc);
// } catch (IllegalAccessException exc) {
// System.out.println("IllegalAccessException Error:" + exc);
// } catch (ClassNotFoundException exc) {
// System.out.println("ClassNotFoundException Error:" + exc);
// } catch (InstantiationException exc) {
// System.out.println("InstantiateException Error:" + exc);
// }
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
final JTree tree = new JTree(createTreeModel());
JScrollPane scrollPane = new JScrollPane(tree);
FileNodeRenderer renderer = new FileNodeRenderer();
tree.setEditable(true);
tree.setCellRenderer(renderer);
getContentPane().add(scrollPane);
tree.addTreeExpansionListener(new TreeExpansionListener(){
public void treeCollapsed(TreeExpansionEvent e){
}
public void treeExpanded(TreeExpansionEvent e){
TreePath path = e.getPath();
FileNode node = (FileNode)path.getLastPathComponent();
if(!node.isExplored()){
DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
node.explore();
model.nodeStructureChanged(node);
}
}
});
tree.addTreeSelectionListener(new TreeSelectionListener(){
public void valueChanged(TreeSelectionEvent e){
TreePath path = e.getNewLeadSelectionPath();
FileNode node = (FileNode)path.getLastPathComponent();
node.setSelected();
if(path != null)
System.out.println(path);
}
});
}
private DefaultTreeModel createTreeModel(){
File root = new File("E:/");
FileNode rootNode = new FileNode(root);
rootNode.explore();
return new DefaultTreeModel(rootNode);
}
public static void main(String [] args){
FileViewer f = new FileViewer();
f.setSize(300,300);
f.show();
}
}class FileNode extends DefaultMutableTreeNode{
private boolean explored = false;
private boolean selected = false;
public FileNode(File file){
setUserObject(file);
}
public boolean getAllowsChildren() {return isDirectory();}
public boolean isLeaf() {return !isDirectory();}
public File getFile(){return (File)getUserObject();}
public boolean isExplored(){return explored;}
public boolean isDirectory(){
File file = getFile();
return file.isDirectory();
}
public boolean isSelected(){
return selected;
}
public void setSelected(){
selected = !selected;
}
public String toString(){
File file = (File)getUserObject();
String filename = file.toString();
int index = filename.lastIndexOf("\\");
return (index!=-1&&index!=filename.length()-1)?
filename.substring(index+1):filename;
}
public void explore(){
if(!isExplored()){
File file = getFile();
File [] children = file.listFiles();
for(int i = 0;i<children.length;++i){
add(new FileNode(children[i]));
}
explored = true;
}
}
}class FileNodeRenderer extends DefaultTreeCellRenderer{
protected JCheckBox checkBox = new JCheckBox("Backup");
private Component strut = Box.createHorizontalStrut(5);
private JPanel panel = new JPanel();
public FileNodeRenderer(){
panel.setBackground(UIManager.getColor("Tree.textBackground"));
setOpaque(false);
checkBox.setOpaque(false);
panel.setOpaque(false);
panel.setLayout(new FlowLayout(FlowLayout.CENTER,0,0));
panel.add(this);
panel.add(strut);
panel.add(checkBox);
}
public Component getTreeCellRendererComponent(
JTree tree,Object value,boolean selected,
boolean expanded,boolean leaf,int row,
boolean hasFocus){
FileNode node = (FileNode)value;
super.getTreeCellRendererComponent(tree, value,selected,expanded,leaf,row, hasFocus);
checkBox.setVisible(node.isDirectory());
checkBox.setSelected(node.isSelected());
return panel;
}
}
http://java.sun.com/docs/books/tutorial/uiswing/components/example-1dot4/
记得给我加分:
我也是小兵