我正在使用 CheckBoxTree 类,它是 JIDE 公共层包 (http://jidesoft.com/products/oss.htm) 的一部分。我想要做的是保存和加载 CheckBoxTreeSelectionModel 的状态,它跟踪哪些框被选中或不被选中。我可以通过保存 selectionModel.getSelectionPaths() 来保存它,但我的问题是加载它。当我 selectionModel.setSelectionPaths() 它只检查路径的根和叶的框,但两者之间没有任何内容。奇怪的是,当我保存 getSelectionPaths() 的结果然后将其直接输入 setSelectionPaths() 时,也会发生这种情况。
对于 FileSystemModel,我使用了一些我发现的喜欢使用 File 对象而不是 TreeNodes 的代码。我尝试了在网络上不同地方找到的 FileSystemModels 和 CheckBoxTrees 的不同组合,结果总是相同的。我可能在这个问题上花了将近 20 个小时……承认这有点尴尬。任何帮助表示赞赏!
我的代码如下。这将创建 CheckBoxTree 并尝试使用“/Documents and Settings/Administrator”加载它,这会导致“/”和“Administrator”以及它的所有子项都被检查,而不是“Documents and Settings”。
public class CheckBoxTreeFrame {
private FileSystemModel fileSystemModel = null;
private CheckBoxTree checkBoxTree = null;
private JFrame main_frame = null;
private CheckBoxTreeSelectionModel selectionModel = null;
public CheckBoxTreeFrame(){
// create the model
fileSystemModel = new FileSystemModel(new File(File.separator));
// use the model for the Tree
checkBoxTree = new CheckBoxTree(fileSystemModel);
checkBoxTree.setEditable(false);
// model for the checkboxes (not the directory structure)
selectionModel = checkBoxTree.getCheckBoxTreeSelectionModel();
// event listener
checkBoxTree.getCheckBoxTreeSelectionModel().addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
System.out.println(selectionModel.getSelectionPath());
}
});
// setup a little UI window for the tree.
main_frame = new JFrame("Frame Title");
main_frame.add(checkBoxTree);
main_frame.setSize(400, 400);
main_frame.setVisible(true);
// run the loading test
runTest();
}
public void runTest(){
File[] finalPath = new File[3];
finalPath[0] = (File)selectionModel.getModel().getRoot();
finalPath[1] = new File(finalPath[0],"Documents and Settings");
finalPath[2] = new File(finalPath[1],"Administrator");
selectionModel.setSelectionPath(new TreePath(finalPath));
}
}
谢谢!!