📄 htmldocumenteditor.java
字号:
/*
* 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 + -