📄 htmleditor.java
字号:
// HTMLEditor.java// An extension of StyledEditor that adds HTML-related features.//package jswing.ch23;import javax.swing.*;import javax.swing.text.*;import javax.swing.text.html.*;import java.awt.event.*;import java.awt.*;public class HTMLEditor extends StyledEditor { private final static String COPY_HTML = "<p>© 2003, O'Reilly & Associates</p>"; public static void main(String[] args) { HTMLEditor editor = new HTMLEditor(); editor.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); editor.setVisible(true); } // Override to create a JEditorPane with the HTMLEditorKit in place protected JTextComponent createTextComponent() { JEditorPane jep = new JEditorPane(); jep.setEditorKit(new HTMLEditorKit()); return jep; } // Add icons & friendly names for font actions protected void makeActionsPretty() { super.makeActionsPretty(); Action a; // HTML Actions a = getTextComponent().getActionMap().get("InsertHR"); a.putValue(Action.SMALL_ICON, new ImageIcon("icons/hr.gif")); a.putValue(Action.NAME, "HR"); // Custom HTML Actions, need to store these in the map... // First, an easy use of the InsertHTMLTextAction class a = new HTMLEditorKit.InsertHTMLTextAction("InsertCopyright", COPY_HTML, HTML.Tag.BODY, HTML.Tag.P); a.putValue(Action.SMALL_ICON, new ImageIcon("icons/copyright.gif")); a.putValue(Action.NAME, "Teletype Text"); getTextComponent().getActionMap().put("add-copyright", a); // And some of our own Tags that require a little more work. // See the TagAction inner class below. a = new TagAction(HTML.Tag.A, "URL", HTML.Attribute.HREF); a.putValue(Action.SMALL_ICON, new ImageIcon("icons/link.gif")); a.putValue(Action.NAME, "Anchor Link"); getTextComponent().getActionMap().put("anchor-link", a); a = new TagAction(HTML.Tag.A, "Name", HTML.Attribute.NAME); a.putValue(Action.SMALL_ICON, new ImageIcon("icons/anchor.gif")); a.putValue(Action.NAME, "Anchor Name"); getTextComponent().getActionMap().put("anchor-name", a); a = new ImageAction(); a.putValue(Action.SMALL_ICON, new ImageIcon("icons/picture.gif")); a.putValue(Action.NAME, "Image"); getTextComponent().getActionMap().put("InsertIMG", a); } // Add HTML actions to the toolbar protected JToolBar createToolBar() { JToolBar bar = super.createToolBar(); bar.addSeparator(); bar.add(getTextComponent().getActionMap().get("add-copyright")).setText(""); bar.add(getTextComponent().getActionMap().get("InsertHR")).setText(""); bar.add(getTextComponent().getActionMap().get("InsertIMG")).setText(""); bar.add(getTextComponent().getActionMap().get("anchor-link")).setText(""); bar.add(getTextComponent().getActionMap().get("anchor-name")).setText(""); return bar; } // Add a preview action to the menu protected JMenuBar createMenuBar() { JMenuBar menubar = super.createMenuBar(); JMenu view = new JMenu("View"); JMenuItem preview = new JMenuItem("Preview"); view.add(preview); preview.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { JEditorPane editor = (JEditorPane)getTextComponent(); JEditorPane display = new JEditorPane(); display.setEditable(false); display.setEditorKit(new HTMLEditorKit()); JScrollPane sp = new JScrollPane(display); sp.setPreferredSize(new Dimension(500,500)); try { //display.setPage(currentFile.toURL()); display.setDocument(editor.getDocument()); } catch (Exception e) { display.setText("Failed to preview file.\n" + "Make sure file has been saved."); } JOptionPane.showMessageDialog(null, sp, "Preview", JOptionPane.PLAIN_MESSAGE); } }); menubar.add(view); return menubar; } public class TagAction extends StyledEditorKit.StyledTextAction { private HTML.Tag tag; private HTML.Attribute tagAttr; private String tagName; public TagAction(HTML.Tag t, String s, HTML.Attribute a) { super(s); tag = t; tagName = s; tagAttr = a; } public void actionPerformed(ActionEvent e) { JEditorPane editor = getEditor(e); if (editor != null) { String value = JOptionPane.showInputDialog(HTMLEditor.this, "Enter " + tagName +":"); StyledEditorKit kit = getStyledEditorKit(editor); MutableAttributeSet attr = kit.getInputAttributes(); boolean anchor = attr.isDefined(tag); if (anchor) { attr.removeAttribute(tag); } else { SimpleAttributeSet as = new SimpleAttributeSet(); as.addAttribute(tagAttr, value); attr.addAttribute(tag, as); } setCharacterAttributes(editor, attr, false); } } } public class ImageAction extends StyledEditorKit.StyledTextAction { public ImageAction() { super("InsertIMG"); } public void actionPerformed(ActionEvent ae) { JEditorPane editor = getEditor(ae); if (editor == null) { // no editor in focus...just ignore this for now return; } HTMLEditorKit kit = (HTMLEditorKit)editor.getEditorKit(); HTMLDocument doc = (HTMLDocument)editor.getDocument(); String value = JOptionPane.showInputDialog(HTMLEditor.this, "Image file:"); try { kit.insertHTML(doc, editor.getCaretPosition(), "<img src=\"" + value + "\">", 0, 0, HTML.Tag.IMG); } catch (Exception e) { JOptionPane.showMessageDialog(HTMLEditor.this, "Image Not Loaded", "ERROR", JOptionPane.ERROR_MESSAGE); e.printStackTrace(); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -