📄 htmleditor.java
字号:
* editor.getKeymap().addActionForKeyStroke( * KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, KeyEvent.CTRL_MASK), */ editor.getKeymap().removeKeyStrokeBinding( KeyStroke.getKeyStroke(KeyEvent.VK_C, KeyEvent.CTRL_MASK)); editor.getKeymap().removeKeyStrokeBinding( KeyStroke.getKeyStroke(KeyEvent.VK_V, KeyEvent.CTRL_MASK)); editor.getKeymap().removeKeyStrokeBinding( KeyStroke.getKeyStroke(KeyEvent.VK_X, KeyEvent.CTRL_MASK)); editor.getKeymap().addActionForKeyStroke( KeyStroke.getKeyStroke(KeyEvent.VK_C, KeyEvent.CTRL_MASK), copyAction); editor.getKeymap().addActionForKeyStroke( KeyStroke.getKeyStroke(KeyEvent.VK_V, KeyEvent.CTRL_MASK), pasteAction); editor.getKeymap().addActionForKeyStroke( KeyStroke.getKeyStroke( KeyEvent.VK_V, KeyEvent.CTRL_MASK + KeyEvent.SHIFT_MASK), stylePasteAction); editor.getKeymap().addActionForKeyStroke( KeyStroke.getKeyStroke(KeyEvent.VK_X, KeyEvent.CTRL_MASK), cutAction); editor.getKeymap().addActionForKeyStroke( KeyStroke.getKeyStroke(KeyEvent.VK_F, KeyEvent.CTRL_MASK), findAction); /* * editor.getKeymap().addActionForKeyStroke( * KeyStroke.getKeyStroke(KeyEvent.VK_EQUALS, KeyEvent.CTRL_MASK), * zoomInAction); editor.getKeymap().addActionForKeyStroke( * KeyStroke.getKeyStroke(KeyEvent.VK_MINUS, KeyEvent.CTRL_MASK), */ /* POPUP MENUs */ /* * jMenuItemUndo.setAction(undoAction); jMenuItemUndo.setText("Undo"); * jMenuItemUndo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, * KeyEvent.CTRL_MASK)); jMenuItemUndo.setIcon( new * ImageIcon(net.sf.memoranda.ui.htmleditor.AppFrame.class.getResource("resources/icons/undo16.png"))); * * jMenuItemRedo.setAction(redoAction); jMenuItemRedo.setText("Redo"); * jMenuItemRedo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, * KeyEvent.CTRL_MASK + KeyEvent.SHIFT_MASK)); jMenuItemRedo.setIcon( * new * ImageIcon(net.sf.memoranda.ui.htmleditor.AppFrame.class.getResource("resources/icons/redo16.png"))); * * jMenuItemCut.setAction(cutAction); jMenuItemCut.setText("Cut"); * jMenuItemCut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, * KeyEvent.CTRL_MASK)); jMenuItemCut.setIcon( new * ImageIcon(net.sf.memoranda.ui.htmleditor.AppFrame.class.getResource("resources/icons/cut.png"))); * * jMenuItemCopy.setAction(copyAction); jMenuItemCopy.setText("Copy"); * jMenuItemCopy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, * KeyEvent.CTRL_MASK)); jMenuItemCopy.setIcon( new * ImageIcon(net.sf.memoranda.ui.htmleditor.AppFrame.class.getResource("resources/icons/copy.png"))); * * jMenuItemPaste.setAction(pasteAction); * jMenuItemPaste.setText("Paste"); * jMenuItemPaste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, * KeyEvent.CTRL_MASK)); jMenuItemPaste.setIcon( new * ImageIcon(net.sf.memoranda.ui.htmleditor.AppFrame.class.getResource("resources/icons/paste.png"))); * * jMenuItemProp.setAction(propsAction); * jMenuItemProp.setText("Properties"); jMenuItemProp.setIcon( */ /* * defaultPopupMenu.add(jMenuItemUndo); * defaultPopupMenu.add(jMenuItemRedo); * defaultPopupMenu.addSeparator(); defaultPopupMenu.add(jMenuItemCut); * defaultPopupMenu.add(jMenuItemCopy); * defaultPopupMenu.add(jMenuItemPaste); * defaultPopupMenu.addSeparator(); */ /* * jMenuItemInsCell.setAction(new InsertTableCellAction()); * jMenuItemInsCell.setText(Local.getString("Insert table cell")); * * jMenuItemInsRow.setAction(new InsertTableRowAction()); */ /* * tablePopupMenu.add(jMenuItemUndo); * tablePopupMenu.add(jMenuItemRedo); tablePopupMenu.addSeparator(); * tablePopupMenu.add(jMenuItemCut); tablePopupMenu.add(jMenuItemCopy); * tablePopupMenu.add(jMenuItemPaste); tablePopupMenu.addSeparator(); * tablePopupMenu.add(jMenuItemInsCell); * tablePopupMenu.add(jMenuItemInsRow); tablePopupMenu.addSeparator(); */ editor.addMouseListener(new PopupListener()); document.getStyleSheet().setBaseFontSize(currentFontSize); this.requestFocusInWindow(); } class PopupListener extends MouseAdapter { public void mousePressed(MouseEvent e) { maybeShowPopup(e); } public void mouseReleased(MouseEvent e) { maybeShowPopup(e); } private void maybeShowPopup(MouseEvent e) { if (e.isPopupTrigger()) { JPopupMenu popupMenu = new JPopupMenu(); popupMenu.setFocusable(false); popupMenu.add(jMenuItemUndo); popupMenu.add(jMenuItemRedo); popupMenu.addSeparator(); popupMenu.add(jMenuItemCut); popupMenu.add(jMenuItemCopy); popupMenu.add(jMenuItemPaste); popupMenu.addSeparator(); if (jMenuItemInsCell.getAction().isEnabled()) { popupMenu.add(jMenuItemInsCell); jMenuItemInsCell.setEnabled(true); popupMenu.add(jMenuItemInsRow); jMenuItemInsRow.setEnabled(true); popupMenu.addSeparator(); } popupMenu.add(jMenuItemProp); popupMenu.show(e.getComponent(), e.getX(), e.getY()); } } } /** * Resets the undo manager. */ protected void resetUndoManager() { undo.discardAllEdits(); undoAction.update(); redoAction.update(); } class UndoHandler implements UndoableEditListener { /** * Messaged when the Document has created an edit, the edit is added to * <code>undo</code>, an instance of UndoManager. */ public void undoableEditHappened(UndoableEditEvent e) { undo.addEdit(e.getEdit()); undoAction.update(); redoAction.update(); } } class UndoAction extends AbstractAction { public UndoAction() { super(Local.getString("Undo")); setEnabled(false); putValue( Action.SMALL_ICON, new ImageIcon(cl.getResource("resources/icons/undo16.png"))); putValue( Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_Z, KeyEvent.CTRL_MASK)); } public void actionPerformed(ActionEvent e) { try { undo.undo(); } catch (CannotUndoException ex) { System.out.println("Unable to undo: " + ex); ex.printStackTrace(); } update(); redoAction.update(); } protected void update() { if (undo.canUndo()) { setEnabled(true); putValue( Action.SHORT_DESCRIPTION, undo.getUndoPresentationName()); } else { setEnabled(false); putValue(Action.SHORT_DESCRIPTION, Local.getString("Undo")); } } } class RedoAction extends AbstractAction { public RedoAction() { super(Local.getString("Redo")); setEnabled(false); putValue( Action.SMALL_ICON, new ImageIcon(cl.getResource("resources/icons/redo16.png"))); putValue( Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke( KeyEvent.VK_Z, KeyEvent.CTRL_MASK + KeyEvent.SHIFT_MASK)); } public void actionPerformed(ActionEvent e) { try { undo.redo(); } catch (CannotRedoException ex) { System.out.println("Unable to redo: " + ex); ex.printStackTrace(); } update(); undoAction.update(); } protected void update() { if (undo.canRedo()) { setEnabled(true); putValue( Action.SHORT_DESCRIPTION, undo.getRedoPresentationName()); } else { setEnabled(false); putValue(Action.SHORT_DESCRIPTION, Local.getString("Redo")); } } } public class BlockAction extends AbstractAction { int _type; public BlockAction(int type, String name) { super(name); _type = type; } public void actionPerformed(ActionEvent e) { blockCB.setSelectedIndex(_type); } } public class InlineAction extends AbstractAction { int _type; public InlineAction(int type, String name) { super(name); _type = type; } public void actionPerformed(ActionEvent e) { inlineCB.setSelectedIndex(_type); } } public String getContent() { try { return editor.getText(); } catch (Exception e) { e.printStackTrace(); return ""; } } public void boldActionB_actionPerformed(ActionEvent e) { if (!bold) { boldActionB.setBorder(border2); } else { boldActionB.setBorder(border1); } bold = !bold; boldActionB.setBorderPainted(bold); /* * SimpleAttributeSet attrs = new SimpleAttributeSet(); * attrs.addAttribute(StyleConstants.Bold, new Boolean(bold)); */ new StyledEditorKit.BoldAction().actionPerformed(e); } public void italicActionB_actionPerformed(ActionEvent e) { if (!italic) { italicActionB.setBorder(border2); } else { italicActionB.setBorder(border1); } italic = !italic; italicActionB.setBorderPainted(italic); /* * SimpleAttributeSet attrs = new SimpleAttributeSet(); * attrs.addAttribute(StyleConstants.Italic, new Boolean(italic)); */ new StyledEditorKit.ItalicAction().actionPerformed(e); } public void underActionB_actionPerformed(ActionEvent e) { if (!under) { underActionB.setBorder(border2); } else { underActionB.setBorder(border1); } under = !under; underActionB.setBorderPainted(under); /* * SimpleAttributeSet attrs = new SimpleAttributeSet(); * attrs.addAttribute(StyleConstants.Underline, new Boolean(under)); */ new StyledEditorKit.UnderlineAction().actionPerformed(e); } void editor_caretUpdate(CaretEvent e) { currentCaret = e.getDot(); /* * currentParaElement = * document.getParagraphElement(editor.getCaretPosition()); * currentTagName = currentParaElement.getName().toUpperCase(); */ AttributeSet charattrs = null; //System.out.print(editor.getCaretPosition()+" : // "+document.getCharacterElement(editor.getCaretPosition()).getName()+" // -> "); if (editor.getCaretPosition() > 0) try { charattrs = document .getCharacterElement(editor.getCaretPosition() - 1) .getAttributes(); } catch (Exception ex) { ex.printStackTrace(); } else charattrs = document .getCharacterElement(editor.getCaretPosition()) .getAttributes(); if (charattrs .containsAttribute(StyleConstants.Bold, new Boolean(true))) { boldActionB.setBorder(border2); bold = true; } else if (bold) { boldActionB.setBorder(border1); bold = false; } boldActionB.setBorderPainted(bold); if (charattrs .containsAttribute(StyleConstants.Italic, new Boolean(true))) { italicActionB.setBorder(border2); italic = true; } else if (italic) { italicActionB.setBorder(border1); italic = false; } italicActionB.setBorderPainted(italic); if (charattrs .containsAttribute(StyleConstants.Underline, new Boolean(true))) { underActionB.setBorder(border2); under = true; } else if (under) { underActionB.setBorder(border1); under = false; } underActionB.setBorderPainted(under); /* * String iName = document * .getCharacterElement(editor.getCaretPosition()) .getAttributes() * .getAttribute(StyleConstants.NameAttribute) .toString() */ inlineCBEventsLock = true; inlineCB.setEnabled(!charattrs.isDefined(HTML.Tag.A)); if (charattrs.isDefined(HTML.Tag.EM)) inlineCB.setSelectedIndex(I_EM); else if (charattrs.isDefined(HTML.Tag.STRONG)) inlineCB.setSelectedIndex(I_STRONG); else if ( (charattrs.isDefined(HTML.Tag.CODE)) || (charattrs.isDefined(HTML.Tag.SAMP))) inlineCB.setSelectedIndex(I_CODE); else if (charattrs.isDefined(HTML.Tag.SUP)) inlineCB.setSelectedIndex(I_SUPERSCRIPT); else if (charattrs.isDefined(HTML.Tag.SUB)) inlineCB.setSelectedIndex(I_SUBSCRIPT); else if (charattrs.isDefined(HTML.Tag.CITE)) inlineCB.setSelectedIndex(I_CITE); else if (charattrs.isDefined(HTML.Tag.FONT)) inlineCB.setSelectedIndex(I_CUSTOM); else inlineCB.setSelectedIndex(I_NORMAL); inlineCBEventsLock = false; Element pEl = document.getParagraphElement(editor.getCaretPosition()); String pName = pEl.getName().toUpperCase(); blockCBEventsLock = true; if (pName.equals("P-IMPLIED")) pName = pEl.getParentElement().getName().toUpperCase(); if (pName.equals("P")) blockCB.setSelectedIndex(T_P); else if (pName.equals("H1")) blockCB.setSelectedIndex(T_H1); else if (pName.equals("H2")) blockCB.setSelectedIndex(T_H2); else if (pName.equals("H3")) blockCB.setSelectedIndex(T_H3); else if (pName.equals("H4")) blockCB.setSelectedIndex(T_H4); else if (pName.equals("H5")) blockCB.setSelectedIndex(T_H5); else if (pName.equals("H6")) blockCB.setSelectedIndex(T_H6); else if (pName.equals("PRE")) blockCB.setSelectedIndex(T_PRE); /* * else if (pName.equals("ADDRESS")) */ else if (pName.equals("BLOCKQUOTE")) blockCB.setSelectedIndex(T_BLOCKQ); blockCBEventsLock = false; this.insertTableCellAction.update(); this.insertTableRowAction.update(); /* * String ppName = * document.getParagraphElement(editor.getCaretPosition()).getParentElement().getName().toUpperCase(); * System.out.print(ppName+"->"+pName+":"); * * AbstractDocument.BranchElement pEl = * (AbstractDocument.BranchElement)document.getParagraphElement(editor.getCaretPosition()); * Element el = pEl.positionToElement(editor.getCaretPosition()); * System.out.println(el.getAttributes().getAttribute(StyleConstants.NameAttribute)+", * "+pEl.getElementCount()+"/"+el.getElementCount()); */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -