gpt4 book ai didi

java - 使用 setCurrentID 时在 TOC 中选择 JavaHelp 主题

转载 作者:行者123 更新时间:2023-11-30 09:56:14 25 4
gpt4 key购买 nike

当我使用 HelpBroker.setCurrentID("[some help id]") 时,JavaHelp 正确显示了我想要的页面,但相关主题不会在目录中自动选择/突出显示。这使得用户很难知道当前页面在主题树中的位置。

当我使用 HelpBroker 导航到特定的帮助页面时,是否有任何方法可以以编程方式突出显示 TOC 中的当前主题?

请注意,当用户点击 Java 帮助系统中的链接时,会在目录中正确选择新主题。

最佳答案

您应该能够只调用navigate() 函数,其余的都是辅助函数。 id当然是id,nodeLabel是你要选择的节点上可见的文字。请注意,此代码不检查错误,即防止尝试去某个不存在的地方。

import java.awt.Component;
import java.util.Enumeration;
import javax.help.*;
import javax.help.plaf.basic.BasicTOCNavigatorUI;
import javax.swing.JTree;
import javax.swing.JScrollPane;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.DefaultMutableTreeNode;

public class Nav
{
private static DefaultMutableTreeNode match = null;

private Nav()
{
}

public static void navigate(HelpSet set, HelpBroker broker, String id, String nodeLabel)
{
broker.setCurrentID(id);
JHelp jhelp = new JHelp(set);
JHelpNavigator nav = getNavigator(jhelp);
JTree tree = getTree(nav);
TreeModel model = tree.getModel();
Object root = model.getRoot();
match = null;
findNode(model, root, nodeLabel);
TreePath path = new TreePath(match.getPath());
tree.setSelectionPath(path);
tree.scrollPathToVisible(path);
}

//http://www.google.com/codesearch/p?hl=en#WiboLAWeTd0/xena/ext/src/javahelp/jhMaster/JavaHelp/src/new/javax/help/WindowPresentation.java&t=0&d=30&l=272
private static JHelpNavigator getNavigator(JHelp jhelp)
{
JHelpNavigator nav = null;
for (Enumeration e = jhelp.getHelpNavigators(); e.hasMoreElements(); )
{
nav = (JHelpNavigator) e.nextElement();
if (nav.getNavigatorName().equals("TOC"))
{
return nav;
}
}
return null;
}

//http://forums.sun.com/thread.jspa?threadID=350180#1459484
private static JTree getTree(JHelpNavigator nav)
{
JTree tree = null;
Component[] components = nav.getComponents();
int count = components.length;
int i = 0;
while(i < count && !(components[i] instanceof JScrollPane))
{
i++;
}
if(i < count)
{
JScrollPane sp = (JScrollPane) components[i];
components = sp.getViewport().getComponents();
count = components.length;
i = 0;
while(i < count && !(components[i] instanceof JTree))
{
i++;
}
tree = (JTree) components[i];
}
return tree;
}

//http://www.rkcole.com/articles/swing/TraverseJtree-2000-11-17.html
private static void findNode(TreeModel model, Object o, String search)
{
if(match != null)
return;

int count = model.getChildCount(o);
for( int i=0; i < count; i++ )
{
Object child = model.getChild(o, i );
if ( model.isLeaf( child ) )
{
if(search.equals(((TOCItem)((DefaultMutableTreeNode)child).getUserObject()).getName()))
{
match = (DefaultMutableTreeNode)child;
return;
}
}
else
findNode( model, child, search );
}
}
}

关于java - 使用 setCurrentID 时在 TOC 中选择 JavaHelp 主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2449574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com