Help us understand the problem. What is going on with this article?

Java+Swingでヘルプダイアログを作る

More than 5 years have passed since last update.

Java+Swingという標準機能でヘルプダイアログを作る方法です。
いわゆる普通のアプリを作る際に、ヘルプをHTMLで作っておき、そのHTMLをSwingでレンダリングさせます。

CSS3などを表示するのは普通に無理なので、この機能で表示するHTMLはあまり凝ったことをしないほうが良いです。

HelpDialog.java
import java.awt.Frame;
import java.io.IOException;
import java.net.URL;

import javax.swing.JDialog;
import javax.swing.JEditorPane;
import javax.swing.JScrollPane;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import javax.swing.event.HyperlinkEvent.EventType;
import javax.swing.text.html.HTMLDocument;

/**
 * ヘルプダイアログ
 * @author tamura shingo
 *
 */
public class HelpDialog extends JDialog {

    private JScrollPane scrollPane;
    private JEditorPane html;

    /**
     * コンストラクタ
     * @param parent 親フレーム
     * @throws IOException ファイルオープンに失敗
     */
    public HelpDialog(Frame parent, URL url) throws IOException {
        super(parent, false);
        makeDialog(url);
    }

    /**
     * 指定したURLを開く。
     * @param url
     */
    private synchronized void open(URL url) {
        try {
            html.setPage(url);
        }
        catch (IOException ex) {
            // ページが開けない場合は特に何もしない。
        }
    }

    /**
     * ダイアログを作成する。
     * @param url ヘルプファイルのURL
     * @throws IOException ファイルオープンに失敗
     */
    private void makeDialog(URL url) throws IOException {
        /*-
         * ウィンドウ情報
         * ここらへんはプロパティなどに出しておくと良さそうです。
         *
         */
        setTitle("ヘルプ");
        setSize(400, 500);
        // setIconImages(icon);

        /*-
         * HTML Viewer
         *
         */
        html = new JEditorPane();
        html.setContentType("text/html");
        html.setEditable(false);
        html.addHyperlinkListener(new HyperlinkListener() {
                @Override
                public void hyperlinkUpdate(HyperlinkEvent event) {
                    if (event.getEventType() == EventType.ACTIVATED) {
                        URL newUrl = event.getURL();
                        open( newUrl );
                    }
                }
            });

        HTMLDocument doc = (HTMLDocument)html.getDocument();
        doc.putProperty("IgnoreCharsetDirective", Boolean.TRUE);

        html.setPage( url );

        scrollPane = new JScrollPane(html);
        getContentPane().add(scrollPane);
    }
}

使い方は見ての通り、

File html = new File(file);
//URL url = new URL("file:" + file.getPath());
URL url = file.toURI().toURL();
HelpDialog dialog = new HelpDialog(null, url);
dialog.setVisible(true);

とやれば、HTMLファイルを表示することができます。

freee
スモールビジネスのバックオフィス業務をテクノロジーで自動化し、日本のスモールビジネスを元気にする
http://www.freee.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away