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

📄 rtextareaeditorkit.java

📁 具有不同语法高亮的编辑器实例
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
  }

      /*****************************************************************************/

  /**
   * Selects the entire document.
   */
  public static class SelectAllAction
      extends RecordableTextAction {

    /**
     *
     */
    private static final long serialVersionUID = 8363273591979503169L;

    public SelectAllAction() {
      super(selectAllAction);
    }

    public SelectAllAction(String name, Icon icon, String desc,
                           Integer mnemonic, KeyStroke accelerator) {
      super(name, icon, desc, mnemonic, accelerator);
    }

    public void actionPerformedImpl(ActionEvent e, RTextArea textArea) {
      Document doc = textArea.getDocument();
      textArea.setCaretPosition(0);
      textArea.moveCaretPosition(doc.getLength());
    }

    public final String getMacroID() {
      return DefaultEditorKit.selectAllAction;
    }

  }

      /*****************************************************************************/

  /**
   * Selects the line around the caret.
   */
  public static class SelectLineAction
      extends RecordableTextAction {

    /**
     *
     */
    private static final long serialVersionUID = 8998224209303322396L;
    private Action start;
    private Action end;

    public SelectLineAction() {
      super(selectLineAction);
      start = new BeginLineAction("pigdog", false);
      end = new EndLineAction("pigdog", true);
    }

    public void actionPerformedImpl(ActionEvent e, RTextArea textArea) {
      start.actionPerformed(e);
      end.actionPerformed(e);
    }

    public final String getMacroID() {
      return DefaultEditorKit.selectLineAction;
    }

  }

      /*****************************************************************************/

  /**
   * Selects the word around the caret.
   */
  public static class SelectWordAction
      extends RecordableTextAction {

    /**
     *
     */
    private static final long serialVersionUID = 3024077158390341526L;
    private Action start;
    private Action end;

    public SelectWordAction() {
      super(selectWordAction);
      start = new BeginWordAction("pigdog", false);
      end = new EndWordAction("pigdog", true);
    }

    public void actionPerformedImpl(ActionEvent e, RTextArea textArea) {
      start.actionPerformed(e);
      end.actionPerformed(e);
    }

    public final String getMacroID() {
      return DefaultEditorKit.selectWordAction;
    }

  }

      /*****************************************************************************/

  /**
   * Puts the text area into read-only mode.
   */
  public static class SetReadOnlyAction
      extends RecordableTextAction {

    /**
     *
     */
    private static final long serialVersionUID = 6754771392405605336L;

    public SetReadOnlyAction() {
      super(readOnlyAction);
    }

    public void actionPerformedImpl(ActionEvent e, RTextArea textArea) {
      textArea.setEditable(false);
    }

    public final String getMacroID() {
      return DefaultEditorKit.readOnlyAction;
    }

    public boolean isRecordable() {
      return false; // Why would you want to record this?
    }

  }

      /*****************************************************************************/

  /**
   * Puts the text area into writable (from read-only) mode.
   */
  public static class SetWritableAction
      extends RecordableTextAction {

    /**
     *
     */
    private static final long serialVersionUID = -4865426940626155978L;

    public SetWritableAction() {
      super(writableAction);
    }

    public void actionPerformedImpl(ActionEvent e, RTextArea textArea) {
      textArea.setEditable(true);
    }

    public final String getMacroID() {
      return DefaultEditorKit.writableAction;
    }

    public boolean isRecordable() {
      return false; // Why would you want to record this?
    }

  }

      /*****************************************************************************/

  /**
   * The action for inserting a time/date stamp.
   */
  public static class TimeDateAction
      extends RecordableTextAction {

    /**
     *
     */
    private static final long serialVersionUID = 8752116956488164415L;

    public TimeDateAction() {
      super(rtaTimeDateAction);
    }

    public TimeDateAction(String name, Icon icon, String desc,
                          Integer mnemonic, KeyStroke accelerator) {
      super(name, icon, desc, mnemonic, accelerator);
    }

    public void actionPerformedImpl(ActionEvent e, RTextArea textArea) {
      if (!textArea.isEditable() || !textArea.isEnabled()) {
        UIManager.getLookAndFeel().provideErrorFeedback(textArea);
        return;
      }
      Date today = new Date();
      DateFormat timeDateStamp = DateFormat.getDateTimeInstance();
      String dateString = timeDateStamp.format(today);
      textArea.replaceSelection(dateString);
    }

    public final String getMacroID() {
      return rtaTimeDateAction;
    }

  }

      /*****************************************************************************/

  /**
   * The action for the insert key toggling insert/overwrite modes.
   */
  public static class ToggleTextModeAction
      extends RecordableTextAction {

    /**
     *
     */
    private static final long serialVersionUID = -85164461074413563L;

    public ToggleTextModeAction() {
      super(rtaToggleTextModeAction);
    }

    public void actionPerformedImpl(ActionEvent e, RTextArea textArea) {
      int textMode = textArea.getTextMode();
      if (textMode == RTextArea.INSERT_MODE) {
        textArea.setTextMode(RTextArea.OVERWRITE_MODE);
      }
      else {
        textArea.setTextMode(RTextArea.INSERT_MODE);
      }
    }

    public final String getMacroID() {
      return rtaToggleTextModeAction;
    }

  }

      /*****************************************************************************/

  /**
   * Undoes the last action done.
   */
  public static class UndoAction
      extends RecordableTextAction {

    /**
     *
     */
    private static final long serialVersionUID = 181295318893452050L;

    public UndoAction() {
      super(rtaUndoAction);
    }

    public UndoAction(String name, Icon icon, String desc,
                      Integer mnemonic, KeyStroke accelerator) {
      super(name, icon, desc, mnemonic, accelerator);
    }

    public void actionPerformedImpl(ActionEvent e, RTextArea textArea) {
      if (textArea.isEnabled() && textArea.isEditable()) {
        textArea.undoLastAction();
        textArea.requestFocusInWindow();
      }
    }

    public final String getMacroID() {
      return rtaUndoAction;
    }

  }

      /*****************************************************************************/

  /**
   * Removes the selection, if any.
   */
  public static class UnselectAction
      extends RecordableTextAction {

    /**
     *
     */
    private static final long serialVersionUID = 88130368434047507L;

    public UnselectAction() {
      super(rtaUnselectAction);
    }

    public void actionPerformedImpl(ActionEvent e, RTextArea textArea) {
      textArea.setCaretPosition(textArea.getCaretPosition());
    }

    public final String getMacroID() {
      return rtaUnselectAction;
    }

  }

      /*****************************************************************************/

  /**
   * Action to make the selection upper-case.
   */
  public static class UpperSelectionCaseAction
      extends RecordableTextAction {

    /**
     *
     */
    private static final long serialVersionUID = 6810298207159878661L;

    public UpperSelectionCaseAction() {
      super(rtaUpperSelectionCaseAction);
    }

    public void actionPerformedImpl(ActionEvent e, RTextArea textArea) {
      if (!textArea.isEditable() || !textArea.isEnabled()) {
        UIManager.getLookAndFeel().provideErrorFeedback(textArea);
        return;
      }
      String selection = textArea.getSelectedText();
      if (selection != null) {
        textArea.replaceSelection(selection.toUpperCase());
      }
      textArea.requestFocusInWindow();
    }

    public final String getMacroID() {
      return getName();
    }

  }

      /*****************************************************************************/

  /**
   * Scrolls up/down vertically.  The select version of this action extends
   * the selection, instead of simply moving the caret.
   */
  public static class VerticalPageAction
      extends RecordableTextAction {

    /**
     *
     */
    private static final long serialVersionUID = 8056447925883438083L;

    private boolean select;
    private int direction;

    public VerticalPageAction(String name, int direction, boolean select) {
      super(name);
      this.select = select;
      this.direction = direction;
    }

    public void actionPerformedImpl(ActionEvent e, RTextArea textArea) {

      Rectangle visible = textArea.getVisibleRect();
      Rectangle newVis = new Rectangle(visible);
      int selectedIndex = textArea.getCaretPosition();
      int scrollAmount = textArea.getScrollableBlockIncrement(
          visible, SwingConstants.VERTICAL, direction);
      int initialY = visible.y;
      Caret caret = textArea.getCaret();
      Point magicPosition = caret.getMagicCaretPosition();
      int yOffset;

      if (selectedIndex != -1) {

        try {

          Rectangle dotBounds = textArea.modelToView(selectedIndex);
          int x = (magicPosition != null) ? magicPosition.x :
              dotBounds.x;
          int h = dotBounds.height;
          yOffset = direction *
              ( (int) Math.ceil(scrollAmount / (double) h) - 1) * h;
          newVis.y = constrainY(textArea, initialY + yOffset, yOffset,
                                visible.height);
          int newIndex;

          if (visible.contains(dotBounds.x, dotBounds.y)) {
            // Dot is currently visible, base the new
            // location off the old, or
            newIndex = textArea.viewToModel(
                new Point(x, constrainY(textArea,
                                        dotBounds.y + yOffset, 0, 0)));
          }
          else {
            // Dot isn't visible, choose the top or the bottom
            // for the new location.
            if (direction == -1) {
              newIndex = textArea.viewToModel(new Point(
                  x, newVis.y));
            }
            else {
              newIndex = textArea.viewToModel(new Point(
                  x, newVis.y + visible.height));
            }
          }
          newIndex = constrainOffset(textArea, newIndex);
          if (newIndex != selectedIndex) {
            // Make sure the new visible location contains
            // the location of dot, otherwise Caret will
            // cause an additional scroll.
            adjustScrollIfNecessary(textArea, newVis, initialY,
                                    newIndex);
            if (select) {
              textArea.moveCaretPosition(newIndex);
            }
            else {
              textArea.setCaretPosition(newIndex);
            }
          }

        }
        catch (BadLocationException ble) {}

      } // End of if (selectedIndex!=-1).

      else {
        yOffset = direction * scrollAmount;
        newVis.y = constrainY(textArea, initialY + yOffset, yOffset,
                              visible.height);
      }

      if (magicPosition != null) {
        caret.setMagicCaretPosition(magicPosition);

      }
      textArea.scrollRectToVisible(newVis);
    }

    private int constrainY(JTextComponent textArea, int y, int vis,
                           int screenHeight) {
      if (y < 0) {
        y = 0;
      }
      else if (y + vis > textArea.getHeight()) {
        //y = Math.max(0, textArea.getHeight() - vis);
        y = Math.max(0, textArea.getHeight() - screenHeight);
      }
      return y;
    }

    private int constrainOffset(JTextComponent text, int offset) {
      Document doc = text.getDocument();
      if ( (offset != 0) && (offset > doc.getLength())) {
        offset = doc.getLength();
      }
      if (offset < 0) {
        offset = 0;
      }
      return offset;
    }

    private void adjustScrollIfNecessary(JTextComponent text,
                                  

⌨️ 快捷键说明

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