⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 helpviewer.java

📁 用java 编写的源码开放的文本编辑器。有很多有用的特性
💻 JAVA
字号:
/* * HelpViewer.java - HTML Help viewer * :tabSize=8:indentSize=8:noTabs=false: * :folding=explicit:collapseFolds=1: * * Copyright (C) 1999, 2002 Slava Pestov * * 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 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. */package org.gjt.sp.jedit.help;//{{{ Importsimport javax.swing.*;import javax.swing.border.*;import javax.swing.event.*;import javax.swing.text.html.*;import java.awt.*;import java.awt.event.*;import java.beans.*;import java.io.*;import java.net.*;import org.gjt.sp.jedit.gui.RolloverButton;import org.gjt.sp.jedit.msg.PropertiesChanged;import org.gjt.sp.jedit.*;import org.gjt.sp.util.Log;//}}}/** * jEdit's searchable help viewer. It uses a Swing JEditorPane to display the HTML, * and implements a URL history. * @author Slava Pestov * @version $Id: HelpViewer.java,v 1.9 2003/02/21 22:19:19 spestov Exp $ */public class HelpViewer extends JFrame //implements EBComponent{	//{{{ HelpViewer constructor	/**	 * Creates a new help viewer with the default help page.	 * @since jEdit 4.0pre4	 */	public HelpViewer()	{		this("welcome.html");	} //}}}	//{{{ HelpViewer constructor	/**	 * Creates a new help viewer for the specified URL.	 * @param url The URL	 */	public HelpViewer(URL url)	{		this(url.toString());	} //}}}	//{{{ HelpViewer constructor	/**	 * Creates a new help viewer for the specified URL.	 * @param url The URL	 */	public HelpViewer(String url)	{		super(jEdit.getProperty("helpviewer.title"));		setIconImage(GUIUtilities.getEditorIcon());		try		{			baseURL = new File(MiscUtilities.constructPath(				jEdit.getJEditHome(),"doc")).toURL().toString();		}		catch(MalformedURLException mu)		{			Log.log(Log.ERROR,this,mu);			// what to do?		}		history = new String[25];		ActionHandler actionListener = new ActionHandler();		JTabbedPane tabs = new JTabbedPane();		tabs.addTab(jEdit.getProperty("helpviewer.toc.label"),			toc = new HelpTOCPanel(this));		tabs.addTab(jEdit.getProperty("helpviewer.search.label"),			new HelpSearchPanel(this));		tabs.setMinimumSize(new Dimension(0,0));		JPanel rightPanel = new JPanel(new BorderLayout());		JToolBar toolBar = new JToolBar();		toolBar.setFloatable(false);		toolBar.add(title = new JLabel());		toolBar.add(Box.createGlue());		JPanel buttons = new JPanel();		buttons.setLayout(new BoxLayout(buttons,BoxLayout.X_AXIS));		buttons.setBorder(new EmptyBorder(0,12,0,0));		back = new RolloverButton(GUIUtilities.loadIcon(			jEdit.getProperty("helpviewer.back.icon")));		back.setToolTipText(jEdit.getProperty("helpviewer.back.label"));		back.addActionListener(actionListener);		toolBar.add(back);		forward = new RolloverButton(GUIUtilities.loadIcon(			jEdit.getProperty("helpviewer.forward.icon")));		forward.addActionListener(actionListener);		forward.setToolTipText(jEdit.getProperty("helpviewer.forward.label"));		toolBar.add(forward);		back.setPreferredSize(forward.getPreferredSize());		rightPanel.add(BorderLayout.NORTH,toolBar);		viewer = new JEditorPane();		viewer.setEditable(false);		viewer.addHyperlinkListener(new LinkHandler());		viewer.setFont(new Font("Monospaced",Font.PLAIN,12));		viewer.addPropertyChangeListener(new PropertyChangeHandler());		rightPanel.add(BorderLayout.CENTER,new JScrollPane(viewer));		splitter = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,			tabs,rightPanel);		splitter.setBorder(null);		getContentPane().add(BorderLayout.CENTER,splitter);		gotoURL(url,true);		setDefaultCloseOperation(DISPOSE_ON_CLOSE);		getRootPane().setPreferredSize(new Dimension(800,400));		pack();		GUIUtilities.loadGeometry(this,"helpviewer");		//EditBus.addToBus(this);		show();		SwingUtilities.invokeLater(new Runnable()		{			public void run()			{				splitter.setDividerLocation(jEdit.getIntegerProperty(					"helpviewer.splitter",250));				viewer.requestFocus();			}		});	} //}}}	//{{{ gotoURL() method	/**	 * Displays the specified URL in the HTML component.	 * @param url The URL	 * @param addToHistory Should the URL be added to the back/forward	 * history?	 */	public void gotoURL(String url, boolean addToHistory)	{		// the TOC pane looks up user's guide URLs relative to the		// doc directory...		String shortURL;		if(MiscUtilities.isURL(url))		{			if(url.startsWith(baseURL))			{				shortURL = url.substring(baseURL.length());				if(shortURL.startsWith("/"))					shortURL = shortURL.substring(1);			}			else			{				shortURL = url;			}		}		else		{			shortURL = url;			if(baseURL.endsWith("/"))				url = baseURL + url;			else				url = baseURL + '/' + url;		}		// reset default cursor so that the hand cursor doesn't		// stick around		viewer.setCursor(Cursor.getDefaultCursor());		URL _url = null;		try		{			_url = new URL(url);			if(!_url.equals(viewer.getPage()))				title.setText(jEdit.getProperty("helpviewer.loading"));			else			{				/* don't show loading msg because we won't				   receive a propertyChanged */			}			viewer.setPage(_url);			if(addToHistory)			{				history[historyPos] = url;				if(historyPos + 1 == history.length)				{					System.arraycopy(history,1,history,						0,history.length - 1);					history[historyPos] = null;				}				else					historyPos++;			}		}		catch(MalformedURLException mf)		{			Log.log(Log.ERROR,this,mf);			String[] args = { url, mf.getMessage() };			GUIUtilities.error(this,"badurl",args);			return;		}		catch(IOException io)		{			Log.log(Log.ERROR,this,io);			String[] args = { url, io.toString() };			GUIUtilities.error(this,"read-error",args);			return;		}		// select the appropriate tree node.		if(shortURL != null)			toc.selectNode(shortURL);	} //}}}	//{{{ dispose() method	public void dispose()	{		//EditBus.removeFromBus(this);		jEdit.setIntegerProperty("helpviewer.splitter",			splitter.getDividerLocation());		GUIUtilities.saveGeometry(this,"helpviewer");		super.dispose();	} //}}}	//{{{ handleMessage() method	/* public void handleMessage(EBMessage msg)	{		if(msg instanceof PropertiesChanged)			SwingUtilities.updateComponentTreeUI(getRootPane());	} */ //}}}	//{{{ getBaseURL() method	public String getBaseURL()	{		return baseURL;	} //}}}	//{{{ Private members	private String baseURL;	private JButton back;	private JButton forward;	private JEditorPane viewer;	private JLabel title;	private JSplitPane splitter;	private String[] history;	private int historyPos;	private HelpTOCPanel toc;	//}}}	//{{{ Inner classes	//{{{ ActionHandler class	class ActionHandler implements ActionListener	{		//{{{ actionPerformed() class		public void actionPerformed(ActionEvent evt)		{			Object source = evt.getSource();			if(source == back)			{				if(historyPos <= 1)					getToolkit().beep();				else				{					String url = history[--historyPos - 1];					gotoURL(url,false);				}			}			else if(source == forward)			{				if(history.length - historyPos <= 1)					getToolkit().beep();				else				{					String url = history[historyPos];					if(url == null)						getToolkit().beep();					else					{						historyPos++;						gotoURL(url,false);					}				}			}		} //}}}	} //}}}	//{{{ LinkHandler class	class LinkHandler implements HyperlinkListener	{		//{{{ hyperlinkUpdate() method		public void hyperlinkUpdate(HyperlinkEvent evt)		{			if(evt.getEventType() == HyperlinkEvent.EventType.ACTIVATED)			{				if(evt instanceof HTMLFrameHyperlinkEvent)				{					((HTMLDocument)viewer.getDocument())						.processHTMLFrameHyperlinkEvent(						(HTMLFrameHyperlinkEvent)evt);				}				else				{					URL url = evt.getURL();					if(url != null)						gotoURL(url.toString(),true);				}			}			else if (evt.getEventType() == HyperlinkEvent.EventType.ENTERED) {				viewer.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));			}			else if (evt.getEventType() == HyperlinkEvent.EventType.EXITED) {				viewer.setCursor(Cursor.getDefaultCursor());			}		} //}}}	} //}}}	//{{{ PropertyChangeHandler class	class PropertyChangeHandler implements PropertyChangeListener	{		public void propertyChange(PropertyChangeEvent evt)		{			if("page".equals(evt.getPropertyName()))			{				String titleStr = (String)viewer.getDocument()					.getProperty("title");				if(titleStr == null)				{					titleStr = MiscUtilities.getFileName(						viewer.getPage().toString());				}				title.setText(titleStr);			}		}	} //}}}	//}}}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -