📄 stylededitor2.java
字号:
// StyledEditor2.java// An extension of SimpleEditor that adds styled-text features. This version// also adds the ability to save a styled document as an HTML file.//package jswing.ch23;import javax.swing.*;import javax.swing.text.*;import javax.swing.text.html.*;import java.awt.event.*;import java.awt.Toolkit;import java.io.*;public class StyledEditor2 extends SimpleEditor { public static void main(String[] args) { StyledEditor2 editor = new StyledEditor2(); editor.setVisible(true); editor.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } // Create a styed editor. public StyledEditor2() { updateInputMap(); // Install our style-related keystrokes } // Override to create a JTextPane. protected JTextComponent createTextComponent() { return new JTextPane(); } // Add icons & friendly names for font actions. protected void makeActionsPretty() { super.makeActionsPretty(); Action a; a = getTextComponent().getActionMap().get("font-bold"); a.putValue(Action.SMALL_ICON, new ImageIcon("icons/bold.gif")); a.putValue(Action.NAME, "Bold"); a = getTextComponent().getActionMap().get("font-italic"); a.putValue(Action.SMALL_ICON, new ImageIcon("icons/italic.gif")); a.putValue(Action.NAME, "Italic"); a = getTextComponent().getActionMap().get("font-underline"); a.putValue(Action.SMALL_ICON, new ImageIcon("icons/underline.gif")); a.putValue(Action.NAME, "Underline"); a = getTextComponent().getActionMap().get("font-family-SansSerif"); a.putValue(Action.NAME, "SansSerif"); a = getTextComponent().getActionMap().get("font-family-Monospaced"); a.putValue(Action.NAME, "Monospaced"); a = getTextComponent().getActionMap().get("font-family-Serif"); a.putValue(Action.NAME, "Serif"); a = getTextComponent().getActionMap().get("font-size-10"); a.putValue(Action.NAME, "10"); a = getTextComponent().getActionMap().get("font-size-12"); a.putValue(Action.NAME, "12"); a = getTextComponent().getActionMap().get("font-size-16"); a.putValue(Action.NAME, "16"); a = getTextComponent().getActionMap().get("font-size-24"); a.putValue(Action.NAME, "24"); } // Add key mappings for font style features. protected void updateInputMap() { // Extend the input map used by our text component. InputMap map = getTextComponent().getInputMap(); int mask = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(); KeyStroke bold = KeyStroke.getKeyStroke(KeyEvent.VK_B, mask, false); KeyStroke italic = KeyStroke.getKeyStroke(KeyEvent.VK_I, mask, false); KeyStroke under = KeyStroke.getKeyStroke(KeyEvent.VK_U, mask, false); map.put(bold, "font-bold"); map.put(italic, "font-italic"); map.put(under, "font-underline"); } // Add font actions to the toolbar. protected JToolBar createToolBar() { JToolBar bar = super.createToolBar(); bar.addSeparator(); bar.add(getTextComponent().getActionMap().get("font-bold")).setText(""); bar.add(getTextComponent().getActionMap().get("font-italic")).setText(""); bar.add(getTextComponent().getActionMap().get("font-underline")).setText(""); return bar; } // Add font actions to the menu. protected JMenuBar createMenuBar() { JMenuBar menubar = super.createMenuBar(); JMenu font = new JMenu("Font"); menubar.add(font); JMenu style = new JMenu("Style"); JMenu family = new JMenu("Family"); JMenu size = new JMenu("Size"); font.add(style); font.add(family); font.add(size); style.add(getTextComponent().getActionMap().get("font-bold")); style.add(getTextComponent().getActionMap().get("font-underline")); style.add(getTextComponent().getActionMap().get("font-italic")); family.add(getTextComponent().getActionMap().get("font-family-SansSerif")); family.add(getTextComponent().getActionMap().get("font-family-Monospaced")); family.add(getTextComponent().getActionMap().get("font-family-Serif")); size.add(getTextComponent().getActionMap().get("font-size-10")); size.add(getTextComponent().getActionMap().get("font-size-12")); size.add(getTextComponent().getActionMap().get("font-size-16")); size.add(getTextComponent().getActionMap().get("font-size-24")); // Don't forget; we can define new actions too! size.add(new StyledEditorKit.FontSizeAction("64", 64)); JMenu htmlMenu = new JMenu("HTML"); menubar.add(htmlMenu); htmlMenu.add(new SaveAsHtmlAction()); return menubar; } class SaveAsHtmlAction extends AbstractAction { public SaveAsHtmlAction() { super("Save As HTML...", null); } // Query user for a filename and attempt to open and write the text // component's content to the file. public void actionPerformed(ActionEvent ev) { JFileChooser chooser = new JFileChooser(); if (chooser.showSaveDialog(StyledEditor2.this) != JFileChooser.APPROVE_OPTION) return; File file = chooser.getSelectedFile(); if (file == null) return; FileWriter writer = null; try { writer = new FileWriter(file); MinimalHTMLWriter htmlWriter = new MinimalHTMLWriter(writer, (StyledDocument)getTextComponent().getDocument()); htmlWriter.write(); } catch (IOException ex) { JOptionPane.showMessageDialog(StyledEditor2.this, "HTML File Not Saved", "ERROR", JOptionPane.ERROR_MESSAGE); } catch (BadLocationException ex) { JOptionPane.showMessageDialog(StyledEditor2.this, "HTML File Corrupt", "ERROR", JOptionPane.ERROR_MESSAGE); } finally { if (writer != null) { try { writer.close(); } catch (IOException x) {} } } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -