javaswingjavahelp

Add a button menu to javahelp


In my program, I'm using javahelp with helpbroker: all the swing components of the window are automatically generated and positioned.

I would like custom the helpbroker to add a button bar at the bottom of the window like in the image.

enter image description here

What is the easiest way to do it ?

Thanks


Solution

  • The only way to add a help button is to Embed the javahelp in a JFrame:

    public class vmHelp {
    public static void main(String args[]) {
        JHelp helpViewer = null;
        String title = "";
        try {
            // Get the classloader of this class.                                                                                                                                                             
            ClassLoader cl = vmHelp.class.getClassLoader();
            // Use the findHelpSet method of HelpSet to create a URL referencing the helpset file.                                                                                                            
            // Note that in this example the location of the helpset is implied as being in the same                                                                                                          
            // directory as the program by specifying "jhelpset.hs" without any directory prefix,                                                                                                             
            // this should be adjusted to suit the implementation.                                                                                                                                            
            String lHelpSetFile = "APP.hs";
            URL url = HelpSet.findHelpSet(cl, lHelpSetFile);
            if (url == null) {
                System.err.println("URL is null, maybe the help set file is wrong: " + lHelpSetFile + ". Look at vmHelp.java");
                return;
            }
            // Create a new JHelp object with a new HelpSet.                                                                                                                                                  
            HelpSet h = new HelpSet(cl, url);
            title = h.getTitle();
            helpViewer = new JHelp(h);
            // Set the initial entry point in the table of contents.                                                                                                                                          
            helpViewer.setCurrentID("top");
        } catch (Exception e) {
            System.err.println(e.getMessage());
        }
    
        // Create a new frame.                                                                                                                                                                                
        JFrame frame = new JFrame();
        // Set it's size.                                                                                                                                                                                     
        frame.setSize(1000, 800);
        // Add the created helpViewer to it.                                                                                                                                                                  
        frame.getContentPane().add(helpViewer);
        // Set a default close operation.                                                                                                                                                                     
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setTitle(title);
    
        // Make the frame visible.                                                                                                                                                                            
        frame.setVisible(true);
    }
    

    } After we can customize the JFrame as we want, it is easy to add a south panel with a close button.

    To make all the help buttons listen our javahelp:

    pButton.addActionListener(helpAction(pHelpId));
    

    with helpAction that displays our JFrame

    Think also to handle keyboard shortcuts, like the helpbroker:

    pComponent.registerKeyboardAction(helpAction(pHelpId), KeyStroke.getKeyStroke(KeyEvent.VK_HELP, 0),
                JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
        pComponent.registerKeyboardAction(helpAction(pHelpId), KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0),
                JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
    

    To open the help at the wanted section:

    helpViewer.setCurrentID("top");
    

    "top" corresponds to tag in the .jhm file