时间:2022-08-07 07:40:18
摘要 JTree是Java中的树形菜单,它可以用树状结构分层显示菜单信息,并且可以折叠使用,非常主观又清晰。卡片布局管理器则可以将多个组件叠放起来,每次只显示一个,就像扑克牌一样每次只能看到最上面的一张。本文通过触发JTree的结点选择事件,来实现浏览不同卡片内容,从而完成帮助文档的制作过程。
关键词 Jtree;Java;卡片布局管理器;帮助文档
中图分类号TP312 文献标识码A 文章编号 1674-6708(2010)22-0207-02
在使用Java语言开发应用程序时,常常需要为程序制作必要的帮助文档,通常情况下,会先采用大家比较熟悉的网页设计工具Dreamweaver制作出简单漂亮的HTML格式帮助文档,然后再采用EasyCHM或QuickCHM等小工具,将该HTML帮助文档转换成压缩比较高的CHM电子文档格式,最后在Java程序中通过调用外部命令的方式:Runtime.getRuntime().exec(“路径”),将CHM帮助文档导入我们的应用程序。
最近一段时间,常在Java论坛中看到不少程序爱好者问到如何用Java开发帮助文档。本文主要采用JTree和卡片布局完成目录的选择和不同页面的交替显示效果,效果如图1所示。
本文分两种情况来讨论该效果图实现的方法和步骤:
1)如果帮助文档目录内容较少时,用NetBeans工具直接拖拽组件的方式完成,下面简要介绍该帮助文档的编写步骤,这里采用的是NetBean6.8版本。
(1)创建JFrame窗体
①设置该窗体的标题为:“巧用JTree和卡片布局制作帮助文档”,布局为边框式布局;
②在窗体“North”方位,加入工具栏JToolBar,在工具栏中加入四个按钮并设置图标;
③在窗体“Center”方位,加入分隔窗格JSplitPane,为其命名为“hsp”,窗格的orientation属性值为:HORIZONTAL_SPLIT,即窗格分为左右两边。
(2)窗格“hsp”左边
①加入标签窗格JTabbedPane,在该窗格中添加3个面板,标题分别命名为“目录”、“索引”、“搜索”,这里我们主要讲解“目录”部分;
②在“目录”面板中添加JTree(名为“mytree”),设置模型TreeModel,修改各节点标题。
(3)窗格“hsp”右边
①加入面板JPanel(名为“rightPanel”),设置其布局为CardLayout;在程序的声明部分定义CardLayout card = new CardLayout();然后为rightPanel定制代码,用rightPanel.setLayout(card)覆盖系统自动生成的代码:rightPanel.setLayout(new java.awt.CardLayout());
②在rightPanel中添加JTextPane,系统会自动为其加上滚动窗格JScrollPane,这里我们将其命名为sp1,在文本窗格JTextPane中添加文字或图片内容,接着加入第二个、第三个JTextPane,并分别为其滚动窗格命名为sp2,sp3……
③在程序的初始化部分,添加代码righPanel.add(sp1,“左边对应节点1”); righPanel.add(sp2,“左边对应节点2”);……
(4)为“mytree”添加事件
private void mytreeValueChanged(javax.swing.event.TreeSelectionEvent evt) {
DefaultMutableTreeNode selectionNode = (DefaultMutableTreeNode)mytree.getLastSelectedPathComponent(); // 获取选中的节点
String nodename = selectionNode.toString();// 将选中的节点转换为字符串:
card.show(rightPanel,nodename);// 显示rightPanel中的选定节点对应的卡片。
}//事件结束。
2)如果单纯写代码,或目录项比较多,可考虑使用数组,实现的简易效果图如图2所示,实现的主要步骤如下:
(1)创建JFrame窗体
①设置该窗体的标题为:“数组方法”;②在窗体中加入分隔窗格JSplitPane,为其命名为“hsp”,窗格的orientation属性值为:HORIZONTAL_SPLIT,即窗格分为左右两边。
(2)窗格“hsp”左边
①添加JTree,为其命名为“mytree”;
②在程序声明部分添加如下代码:
//数组nodenames存放所有树节点
String nodenames[] = {"关于此文档", "API", "All Classes", "JTree", "CardLayout", "TreeModel", "JTabbedPane", "JDK", java","javac","javadoc","PlatForm","window","unix"};
int len = nodenames.length; // len表示节点长度
DefaultMutableTreeNode nodes[]=new DefaultMutableTreeNode[len+1]; //包含根节点“root”。
③在mytree的定制代码部分加入以下代码:
nodes[0]= new DefaultMutableTreeNode("root");//定义根结点
for(int i=1;i
{ nodes[i]= new DefaultMutableTreeNode(nodenames[i-1]); }//定义除根结点以外的其他节点
nodes[0].add(nodes[1]); nodes[0].add(nodes[2]);nodes[2].add(nodes[3]);
for(int i=4;i
nodes[0].add(nodes[8]);
for(int i=9;i
for(int i=13;i