Java tutorial
/* Copyright (C) 2003-2011 JabRef contributors. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package net.sf.jabref.help; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.Stack; import javax.swing.*; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; import net.sf.jabref.GUIGlobals; import net.sf.jabref.JabRef; import net.sf.jabref.JabRefPreferences; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class HelpContent extends JTextPane { static Log log = LogFactory.getLog(HelpContent.class); JScrollPane pane; private Stack<URL> history, forw; JabRefPreferences prefs; public HelpContent(JabRefPreferences prefs_) { super(); pane = new JScrollPane(this, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); pane.setDoubleBuffered(true); prefs = prefs_; history = new Stack<URL>(); forw = new Stack<URL>(); setEditorKitForContentType("text/html", new MyEditorKit()); setContentType("text/html"); setText(""); setEditable(false); // Handles Anchors final HyperlinkListener hyperLinkListener = new HyperlinkListener() { public void hyperlinkUpdate(final HyperlinkEvent e) { if (e.getDescription().startsWith("#")) { scrollToReference(e.getDescription().substring(1)); } } }; addHyperlinkListener(hyperLinkListener); } public boolean back() { if (!history.empty()) { URL prev = (history.pop()); forw.push(getPage()); setPageOnly(prev); } return !history.empty(); } public boolean forward() { if (!forw.empty()) { URL next = (forw.pop()); history.push(getPage()); setPageOnly(next); } return !forw.empty(); } public void reset() { forw.removeAllElements(); history.removeAllElements(); } public void setPage(String filename, Class resourceOwner) { // Check for anchor int indexOf = filename.indexOf('#'); String file; String reference; if (indexOf != -1) { file = filename.substring(0, indexOf); reference = filename.substring(indexOf + 1); } else { file = filename; reference = ""; } String middle = prefs.get("language") + "/"; if (middle.equals("en/")) middle = ""; // english in base help dir. URL old = getPage(); try { // First check in specified language URL resource = resourceOwner.getResource(GUIGlobals.helpPre + middle + file); // If not available fallback to english if (resource == null) { resource = resourceOwner.getResource(GUIGlobals.helpPre + file); } // If still not available print a warning if (resource == null) { // TODO show warning to user log.error("Could not find html-help for file '" + file + "'."); return; } setPageOnly(new URL(resource.toString() + "#" + reference)); } catch (IOException ex) { ex.printStackTrace(); } forw.removeAllElements(); if (old != null) history.push(old); } /** * Convenience method for setPage(String) */ public void setPage(URL url) { File f = new File(url.getPath()); setPage(f.getName(), JabRef.class); } private void setPageOnly(URL url) { try { super.setPage(url); } catch (IOException ex) { if (url == null) { System.out.println("Error: Help file not set"); } else { System.out.println("Error: Help file not found '" + url.getFile() + "'"); } } } public JComponent getPane() { return pane; } /*public void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); super.paintComponent(g2); }*/ }