private JTree TreeSelectedContainer() {
TreeInfo = GoogleInformation.navagation;
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Google News Category");
DefaultMutableTreeNode[] node = new DefaultMutableTreeNode[TreeInfo.size()];
DefaultTreeModel treeModel = new DefaultTreeModel(root);
//插入子节点node1,node2
System.out.println("st.NewStorySelected.size() :\t"+st.NewStorySelected.size());
TreePath[] SelectedNS = new TreePath[100];
int CountNS = 0;
for(int i=0; i< TreeInfo.size(); i++)
{
node[i] = new DefaultMutableTreeNode( TreeInfo.get(i).name);
treeModel.insertNodeInto(node[i],root,root.getChildCount());
DefaultMutableTreeNode[] leafnode = new DefaultMutableTreeNode[TreeInfo.get(i).child.size()];
for(int j =0 ; j < TreeInfo.get(i).child.size(); j++)
{
leafnode[j] = new DefaultMutableTreeNode(TreeInfo.get(i).child.get(j).name);
treeModel.insertNodeInto(leafnode[j],node[i],node[i].getChildCount());
for(int find_i = 0; find_i < st.NewStorySelected.size(); find_i++)
{
if((st.NewStorySelected.get(find_i)).equals((TreeInfo.get(i).child.get(j).name)))
{
<span style="background-color: rgb(255, 255, 51);">TreePath path = new TreePath(leafnode[j].getPath());</span>
//System.out.println("\n"+CountNS+"\t"+st.NewStorySelected.get(find_i)+"\t"+TreeInfo.get(i).child.get(j).name);
<span style="background-color: rgb(255, 255, 51);">SelectedNS[CountNS] = path;</span>
CountNS++;
}
}
}
}
//创建树对象
JTree tree = new JTree(treeModel);
// TreePath visiblePath = new TreePath(getTreeModel().getPathToRoot(leafnode[j]));
<span style="background-color: rgb(255, 255, 51);">tree.addSelectionPaths(SelectedNS);//TreePath[]</span>
//设置Tree的选择为一次选择多个节点
tree.getSelectionModel().setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION);
// TreeSelectionModel.SINGLE_TREE_SELECTION); 这个是一次只能选择一个节点的选项
//创建节点绘制对象
DefaultTreeCellRenderer cellRenderer =
(DefaultTreeCellRenderer)tree.getCellRenderer();
//设置字体
cellRenderer.setFont(new Font("Serif",Font.PLAIN,14));
cellRenderer.setBackgroundNonSelectionColor(Color.white);
cellRenderer.setBackgroundSelectionColor(Color.yellow);
// cellRenderer.setBorderSelectionColor(Color.red);
//设置选或不选时,文字的变化颜色
cellRenderer.setTextNonSelectionColor(Color.black);
cellRenderer.setTextSelectionColor(Color.blue);
return tree;
}
最终用了笨办法加亮所选的几个NewsStory。"St"是传入的Setting的设置的一些信息,其中包括在第一个页面中选取的News Story。找到他们对应的Path,然后添加到到所选里面。关键的代码用黄色高亮。