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

📄 htmldocumenteditor.java

📁 OBPM是一个开源
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * Created on 2005-1-20
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package cn.myapps.core.dynaform.form.client;

/*
 * HTMLDocumentEditor.java @author: Charles Bell @version: May 27, 2002
 */

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextPane;
import javax.swing.UIManager;
import javax.swing.event.UndoableEditEvent;
import javax.swing.event.UndoableEditListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultEditorKit;
import javax.swing.text.Document;
import javax.swing.text.MutableAttributeSet;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledEditorKit;
import javax.swing.text.html.HTML;
import javax.swing.text.html.HTMLDocument;
import javax.swing.text.html.HTMLEditorKit;
import javax.swing.text.html.parser.TagElement;
import javax.swing.undo.CannotRedoException;
import javax.swing.undo.CannotUndoException;
import javax.swing.undo.UndoManager;

public class HTMLDocumentEditor extends JFrame implements ActionListener {

	private HTMLDocument document;

	private JTextPane textPane = new JTextPane();

	private boolean debug = false;

	private File currentFile;

	/** Listener for the edits on the current document. */
	protected UndoableEditListener undoHandler = new UndoHandler();

	/** UndoManager that we add edits to. */
	protected UndoManager undo = new UndoManager();

	private UndoAction undoAction = new UndoAction();

	private RedoAction redoAction = new RedoAction();

	private Action cutAction = new DefaultEditorKit.CutAction();

	private Action copyAction = new DefaultEditorKit.CopyAction();

	private Action pasteAction = new DefaultEditorKit.PasteAction();

	private Action boldAction = new StyledEditorKit.BoldAction();

	private Action underlineAction = new StyledEditorKit.UnderlineAction();

	private Action italicAction = new StyledEditorKit.ItalicAction();

	private Action insertBreakAction = new DefaultEditorKit.InsertBreakAction();

	private HTMLEditorKit.InsertHTMLTextAction unorderedListAction = new HTMLEditorKit.InsertHTMLTextAction(
			"Bullets", "<ul><li> </li></ul>", HTML.Tag.P, HTML.Tag.UL);

	private HTMLEditorKit.InsertHTMLTextAction bulletAction = new HTMLEditorKit.InsertHTMLTextAction(
			"Bullets", "<li> </li>", HTML.Tag.UL, HTML.Tag.LI);

	public HTMLDocumentEditor() {
		super("HTMLDocumentEditor");
		HTMLEditorKit editorKit = new HTMLEditorKit();
		TagElement te = null;//new TagElement();
		document = (HTMLDocument) editorKit.createDefaultDocument();
		// Force SwingSet to come up in the Cross Platform L&F
		try {
			//UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
			// If you want the System L&F instead, comment out the above line
			// and
			// uncomment the following:
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (Exception exc) {
			System.err.println("Error loading L&F: " + exc);
		}
		init();
	}

	public static void main(String[] args) {
		HTMLDocumentEditor editor = new HTMLDocumentEditor();
	}

	public void init() {

		addWindowListener(new FrameListener());

		JMenuBar menuBar = new JMenuBar();
		getContentPane().add(menuBar, BorderLayout.NORTH);
		JMenu fileMenu = new JMenu("File");
		JMenu editMenu = new JMenu("Edit");
		JMenu colorMenu = new JMenu("Color");
		JMenu fontMenu = new JMenu("Font");
		JMenu styleMenu = new JMenu("Style");
		JMenu alignMenu = new JMenu("Align");
		JMenu helpMenu = new JMenu("Help");

		menuBar.add(fileMenu);
		menuBar.add(editMenu);
		menuBar.add(colorMenu);
		menuBar.add(fontMenu);
		menuBar.add(styleMenu);
		menuBar.add(alignMenu);
		menuBar.add(helpMenu);

		JMenuItem newItem = new JMenuItem("New", new ImageIcon(
				"whatsnew-bang.gif"));
		JMenuItem openItem = new JMenuItem("Open", new ImageIcon("open.gif"));
		JMenuItem saveItem = new JMenuItem("Save", new ImageIcon("save.gif"));
		JMenuItem saveAsItem = new JMenuItem("Save As");
		JMenuItem exitItem = new JMenuItem("Exit", new ImageIcon("exit.gif"));

		newItem.addActionListener(this);
		openItem.addActionListener(this);
		saveItem.addActionListener(this);
		saveAsItem.addActionListener(this);
		exitItem.addActionListener(this);

		fileMenu.add(newItem);
		fileMenu.add(openItem);
		fileMenu.add(saveItem);
		fileMenu.add(saveAsItem);
		fileMenu.add(exitItem);

		JMenuItem undoItem = new JMenuItem(undoAction);
		JMenuItem redoItem = new JMenuItem(redoAction);
		JMenuItem cutItem = new JMenuItem(cutAction);
		JMenuItem copyItem = new JMenuItem(copyAction);
		JMenuItem pasteItem = new JMenuItem(pasteAction);
		JMenuItem clearItem = new JMenuItem("Clear");
		JMenuItem selectAllItem = new JMenuItem("Select All");
		JMenuItem insertBreaKItem = new JMenuItem(insertBreakAction);
		JMenuItem unorderedListItem = new JMenuItem(unorderedListAction);
		JMenuItem bulletItem = new JMenuItem(bulletAction);

		cutItem.setText("Cut");
		copyItem.setText("Copy");
		pasteItem.setText("Paste");
		insertBreaKItem.setText("Break");
		cutItem.setIcon(new ImageIcon("cut.gif"));
		copyItem.setIcon(new ImageIcon("copy.gif"));
		pasteItem.setIcon(new ImageIcon("paste.gif"));
		insertBreaKItem.setIcon(new ImageIcon("break.gif"));
		unorderedListItem.setIcon(new ImageIcon("bullets.gif"));

		clearItem.addActionListener(this);
		selectAllItem.addActionListener(this);

		editMenu.add(undoItem);
		editMenu.add(redoItem);
		editMenu.add(cutItem);
		editMenu.add(copyItem);
		editMenu.add(pasteItem);
		editMenu.add(clearItem);
		editMenu.add(selectAllItem);
		editMenu.add(insertBreaKItem);
		editMenu.add(unorderedListItem);
		editMenu.add(bulletItem);

		JMenuItem redTextItem = new JMenuItem(
				new StyledEditorKit.ForegroundAction("Red", Color.red));
		JMenuItem orangeTextItem = new JMenuItem(
				new StyledEditorKit.ForegroundAction("Orange", Color.orange));
		JMenuItem yellowTextItem = new JMenuItem(
				new StyledEditorKit.ForegroundAction("Yellow", Color.yellow));
		JMenuItem greenTextItem = new JMenuItem(
				new StyledEditorKit.ForegroundAction("Green", Color.green));
		JMenuItem blueTextItem = new JMenuItem(
				new StyledEditorKit.ForegroundAction("Blue", Color.blue));
		JMenuItem cyanTextItem = new JMenuItem(
				new StyledEditorKit.ForegroundAction("Cyan", Color.cyan));
		JMenuItem magentaTextItem = new JMenuItem(
				new StyledEditorKit.ForegroundAction("Magenta", Color.magenta));
		JMenuItem blackTextItem = new JMenuItem(
				new StyledEditorKit.ForegroundAction("Black", Color.black));

		redTextItem.setIcon(new ImageIcon("red.gif"));
		orangeTextItem.setIcon(new ImageIcon("orange.gif"));
		yellowTextItem.setIcon(new ImageIcon("yellow.gif"));
		greenTextItem.setIcon(new ImageIcon("green.gif"));
		blueTextItem.setIcon(new ImageIcon("blue.gif"));
		cyanTextItem.setIcon(new ImageIcon("cyan.gif"));
		magentaTextItem.setIcon(new ImageIcon("magenta.gif"));
		blackTextItem.setIcon(new ImageIcon("black.gif"));

		colorMenu.add(redTextItem);
		colorMenu.add(orangeTextItem);
		colorMenu.add(yellowTextItem);
		colorMenu.add(greenTextItem);
		colorMenu.add(blueTextItem);
		colorMenu.add(cyanTextItem);
		colorMenu.add(magentaTextItem);
		colorMenu.add(blackTextItem);

		JMenu fontTypeMenu = new JMenu("Font Type");
		fontMenu.add(fontTypeMenu);

		String[] fontTypes = { "SansSerif", "Serif", "Monospaced", "Dialog",
				"DialogInput" };
		for (int i = 0; i < fontTypes.length; i++) {
			if (debug)
				System.out.println(fontTypes[i]);
			JMenuItem nextTypeItem = new JMenuItem(fontTypes[i]);
			nextTypeItem.setAction(new StyledEditorKit.FontFamilyAction(
					fontTypes[i], fontTypes[i]));
			fontTypeMenu.add(nextTypeItem);
		}

		JMenu fontSizeMenu = new JMenu("Font Size");
		fontMenu.add(fontSizeMenu);

		int[] fontSizes = { 6, 8, 10, 12, 14, 16, 20, 24, 32, 36, 48, 72 };
		for (int i = 0; i < fontSizes.length; i++) {
			if (debug)
				System.out.println(fontSizes[i]);
			JMenuItem nextSizeItem = new JMenuItem(String.valueOf(fontSizes[i]));
			nextSizeItem.setAction(new StyledEditorKit.FontSizeAction(String
					.valueOf(fontSizes[i]), fontSizes[i]));
			fontSizeMenu.add(nextSizeItem);
		}

		JMenuItem boldMenuItem = new JMenuItem(boldAction);
		JMenuItem underlineMenuItem = new JMenuItem(underlineAction);
		JMenuItem italicMenuItem = new JMenuItem(italicAction);

		boldMenuItem.setText("Bold");
		underlineMenuItem.setText("Underline");
		italicMenuItem.setText("Italic");

		boldMenuItem.setIcon(new ImageIcon("bold.gif"));
		underlineMenuItem.setIcon(new ImageIcon("underline.gif"));
		italicMenuItem.setIcon(new ImageIcon("italic.gif"));

		styleMenu.add(boldMenuItem);
		styleMenu.add(underlineMenuItem);
		styleMenu.add(italicMenuItem);

		JMenuItem subscriptMenuItem = new JMenuItem(new SubscriptAction());
		JMenuItem superscriptMenuItem = new JMenuItem(new SuperscriptAction());
		JMenuItem strikeThroughMenuItem = new JMenuItem(
				new StrikeThroughAction());

		subscriptMenuItem.setText("Subscript");
		superscriptMenuItem.setText("Superscript");
		strikeThroughMenuItem.setText("StrikeThrough");

		subscriptMenuItem.setIcon(new ImageIcon("subscript.gif"));
		superscriptMenuItem.setIcon(new ImageIcon("superscript.gif"));
		strikeThroughMenuItem.setIcon(new ImageIcon("strikethough.gif"));

		styleMenu.add(subscriptMenuItem);
		styleMenu.add(superscriptMenuItem);
		styleMenu.add(strikeThroughMenuItem);

		JMenuItem leftAlignMenuItem = new JMenuItem(
				new StyledEditorKit.AlignmentAction("Left Align",
						StyleConstants.ALIGN_LEFT));
		JMenuItem centerMenuItem = new JMenuItem(
				new StyledEditorKit.AlignmentAction("Center",
						StyleConstants.ALIGN_CENTER));
		JMenuItem rightAlignMenuItem = new JMenuItem(
				new StyledEditorKit.AlignmentAction("Right Align",
						StyleConstants.ALIGN_RIGHT));

		leftAlignMenuItem.setText("Left Align");
		centerMenuItem.setText("Center");
		rightAlignMenuItem.setText("Right Align");

		leftAlignMenuItem.setIcon(new ImageIcon("left.gif"));
		centerMenuItem.setIcon(new ImageIcon("center.gif"));
		rightAlignMenuItem.setIcon(new ImageIcon("right.gif"));

		alignMenu.add(leftAlignMenuItem);
		alignMenu.add(centerMenuItem);
		alignMenu.add(rightAlignMenuItem);

		JMenuItem helpItem = new JMenuItem("Help");
		helpItem.addActionListener(this);
		helpMenu.add(helpItem);

		JMenuItem shortcutsItem = new JMenuItem("Keyboard Shortcuts");
		shortcutsItem.addActionListener(this);
		helpMenu.add(shortcutsItem);

		JMenuItem aboutItem = new JMenuItem("About QuantumHyperSpace");
		aboutItem.addActionListener(this);
		helpMenu.add(aboutItem);

		JPanel editorControlPanel = new JPanel();
		//editorControlPanel.setLayout(new GridLayout(3,3));
		editorControlPanel.setLayout(new FlowLayout());

		/* JButtons */
		JButton cutButton = new JButton(cutAction);
		JButton copyButton = new JButton(copyAction);
		JButton pasteButton = new JButton(pasteAction);

		JButton boldButton = new JButton(boldAction);
		JButton underlineButton = new JButton(underlineAction);
		JButton italicButton = new JButton(italicAction);

		//JButton insertButton = new JButton(insertAction);
		//JButton insertBreakButton = new JButton(insertBreakAction);
		//JButton tabButton = new JButton(tabAction);

		cutButton.setText("Cut");
		copyButton.setText("Copy");
		pasteButton.setText("Paste");

		boldButton.setText("Bold");
		underlineButton.setText("Underline");
		italicButton.setText("Italic");

		//insertButton.setText("Insert");
		//insertBreakButton.setText("Insert Break");
		//tabButton.setText("Tab");

		cutButton.setIcon(new ImageIcon("cut.gif"));
		copyButton.setIcon(new ImageIcon("copy.gif"));
		pasteButton.setIcon(new ImageIcon("paste.gif"));

		boldButton.setIcon(new ImageIcon("bold.gif"));
		underlineButton.setIcon(new ImageIcon("underline.gif"));
		italicButton.setIcon(new ImageIcon("italic.gif"));

		editorControlPanel.add(cutButton);
		editorControlPanel.add(copyButton);
		editorControlPanel.add(pasteButton);

		editorControlPanel.add(boldButton);
		editorControlPanel.add(underlineButton);
		editorControlPanel.add(italicButton);

		//editorControlPanel.add(insertButton);
		//editorControlPanel.add(insertBreakButton);
		//editorControlPanel.add(tabButton);

		JButton subscriptButton = new JButton(new SubscriptAction());
		JButton superscriptButton = new JButton(new SuperscriptAction());
		JButton strikeThroughButton = new JButton(new StrikeThroughAction());

		subscriptButton.setIcon(new ImageIcon("subscript.gif"));
		superscriptButton.setIcon(new ImageIcon("superscript.gif"));
		strikeThroughButton.setIcon(new ImageIcon("strikethough.gif"));

		JPanel specialPanel = new JPanel();
		specialPanel.setLayout(new FlowLayout());

		specialPanel.add(subscriptButton);
		specialPanel.add(superscriptButton);
		specialPanel.add(strikeThroughButton);

		//JButton leftAlignButton = new JButton(new AlignLeftAction());
		//JButton centerButton = new JButton(new CenterAction());
		//JButton rightAlignButton = new JButton(new AlignRightAction());

		JButton leftAlignButton = new JButton(
				new StyledEditorKit.AlignmentAction("Left Align",
						StyleConstants.ALIGN_LEFT));
		JButton centerButton = new JButton(new StyledEditorKit.AlignmentAction(

⌨️ 快捷键说明

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