亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? textfileeditor.java

?? ∥顯示數據文件未壓縮大小及壓縮大小單行文本顯示域存儲隨機生成的數據
?? JAVA
字號:
package org.jr.jzj.editor;
/**
 * <p>Copyright: Copyright (c) 2002-2003</p>
 * <p>Company: JavaResearch(http://www.javaresearch.org)</p>
 * <p>最后更新日期:2003年3月20日
 * @author Barney,Cherami,Brain
 * @version 0.8
 */

import java.io.*;
import java.util.*;

import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.text.*;
import javax.swing.text.html.*;
import javax.swing.text.rtf.*;
import javax.swing.undo.*;

import org.jr.jzj.*;

/**
 * java文件加亮的查看器,默認是java文件類型,支持顯示行號,undo等
 * 支持以XML格式的語法加亮設置文件
 */

public class TextFileEditor
    extends JPanel
    implements UndoableEditListener, DocumentListener, CaretListener {
  private static int UNDODEPTH = 100;
  private static JZJLogger logger = new JZJLogger(TextFileEditor.class);
  private JTextPane editor;
  private Object highlight = null;
  private boolean dirty;
  private File file;
  private UndoManager undo;
  private String searchString = "";
  private String replaceString = "";
  private boolean ignoreCase = false;
  private LineNumber lineNumber;
  private JScrollPane scrollPane;

  //
  private HashMap typeHandlers;
  private File syntaxFile = null;
  private SyntaxParser parser = null;

  /**
   * 默認構造函數
   */
  public TextFileEditor() {
    super(new BorderLayout(), true);
    setLayout(new BorderLayout());
    editor = new JTextPane();
    editor.addCaretListener(this);
    scrollPane = new JScrollPane(editor);

    add(scrollPane, BorderLayout.CENTER);
    undo = new UndoManager();
    undo.setLimit(this.UNDODEPTH);

    editor.getDocument().addUndoableEditListener(this);
    editor.getDocument().addDocumentListener(this);

    setLineNumberVisible(false);

  }

  /**
   * 直接打開一個文件的:構造函數
   * @param f
   */
  public TextFileEditor(File f) {
    this();
    doOpen(f);
  }

  /**
   * 導入語法加亮,屬性文件改過之后也可用這個函數更新
   * @param syntaxFile
   */
  public void loadSyntax(File syntaxFile) {
    this.syntaxFile = syntaxFile;
    if (syntaxFile != null) {
      parser = new SyntaxParser(syntaxFile);
      if (typeHandlers == null) {
        typeHandlers = new HashMap();
      }
      typeHandlers.clear();
    }
  }

  /**
   * 是否顯示行號
   * @param bVisibale
   */
  public void setLineNumberVisible(boolean bVisible) {
    if (lineNumber == null) {
      lineNumber = new LineNumber(editor);
      scrollPane.setRowHeaderView(lineNumber);
    }

    scrollPane.getRowHeader().setVisible(bVisible);

  }

  public boolean isLineNumberVisible() {
    return scrollPane.getRowHeader().isVisible();
  }

  /**
   *
   * @param type
   * @return
   */
  private EditorKit getEditorKitForContentType(String type) {
    if (typeHandlers == null) {
      typeHandlers = new HashMap();
    }

    EditorKit k = (EditorKit) typeHandlers.get(type);
    if (k == null) {
      k = createEditorKitForContentType(type);
      if (k != null) {
        typeHandlers.put(type, k);
        editor.setEditorKitForContentType(type, k);
      }
    }
    editor.setContentType(type);
    return k;

  }

  /**
   *
   * @param type
   * @return
   */
  protected EditorKit createEditorKitForContentType(String type) {
    if (parser != null) {
      return createEditorKitForContentTypeX(type);
    }

    if (type.equals("text/java")) {
      return (new SyntaxEditorKit());
    }
    else if (type.equals("text/plain")) {
      return (new StyledEditorKit());
    }
    else if (type.equals("text/html")) {
      return (new HTMLEditorKit());
    }
    else if (type.equals("text/rtf")) {
      return (new RTFEditorKit());
    }
    else if (type.equals("text/cpp")) {
      return (new SyntaxEditorKit());
    }
    else if (type.equals("text/unknown")) {
      return (new StyledEditorKit());
    }
    else {
      return editor.getEditorKitForContentType(type);
    }
  }

  /**
   *
   * @param type
   * @return
   */
  protected EditorKit createEditorKitForContentTypeX(String type) {

    if (type.equals("text/plain")) {
      return (new StyledEditorKit());
    }
    else if (type.equals("text/html")) {
      return (new HTMLEditorKit());
    }
    else if (type.equals("text/rtf")) {
      return (new RTFEditorKit());
    }
    else {
      EditorKit et = SyntaxEditorKit.newInstance(type, parser);
      if (et != null) {
        return et;
      }
      else {
        return editor.getEditorKitForContentType(type);
      }

    }
  }

  protected void selectEditorKit(String filename) {
    if (filename.endsWith(".java")) {
      getEditorKitForContentType("text/java");
    }
    else if (filename.endsWith(".cpp") || filename.endsWith(".c")
             || filename.endsWith(".hpp") || filename.endsWith(".h")) {
      getEditorKitForContentType("text/cpp");

    }
    else if (filename.endsWith(".html") || filename.endsWith(".htm")) {
      getEditorKitForContentType("text/html");
    }
    else if (filename.endsWith(".rtf")) {
      getEditorKitForContentType("text/rtf");
    }
    else {
      getEditorKitForContentType("text/unknown");
    }
  }

  /**
   *
   * @param f
   */
  public void doOpen(File f) {
    file = f;
    if (f.getName().endsWith(".html") || f.getName().endsWith(".htm")) {
      try {
        editor.setPage(org.jr.io.FileUtil.getURL(f));
        return;
      }
      catch (Exception ex) {
        ex.printStackTrace();
      }

    }

    selectEditorKit(f.getName());
    doOpen();
  }

  private void doOpen() {
    try {
      FileReader reader = new FileReader(file);
      editor.read(reader, file.getAbsolutePath());
      reader.close();
      dirty = false;
    }
    catch (IOException ex) {
      ex.printStackTrace();
      logger.error(ex.toString());
    }
  }

  public void doSave() {
    if (file == null) {
      return;
    }

    /**
     * 保存
     */
    try {
      FileWriter writer = new FileWriter(file);
      editor.write(writer);
      writer.close();
      dirty = false;
    }
    catch (IOException ex) {
      logger.error(ex.toString());
    }
  }

  public File getFile() {
    return file;
  }

  public final JTextPane getEditor() {
    return editor;
  }

  public void removeUpdate(DocumentEvent ev) {
    dirty = true;
  }

  public void changedUpdate(DocumentEvent ev) {
  }

  public void insertUpdate(DocumentEvent ev) {
    dirty = true;
  }

  public boolean getDirty() {
    return dirty;
  }

  public void doUndo() {
    if (undo.canUndo()) {
      undo.undo();
    }
  }

  public void doRedo() {
    if (undo.canRedo()) {
      undo.redo();
    }
  }

  public void caretUpdate(CaretEvent ev) {
    Highlighter highlighter = editor.getHighlighter();
    if (highlight != null) {
      highlighter.removeHighlight(highlight);
    }
    try {
      int offset = findMatchingBracket(editor.getDocument(), ev.getDot() - 1);
      if (offset != -1) {
        highlight = highlighter.addHighlight(offset, offset + 1,
                                             new DefaultHighlighter.
                                             DefaultHighlightPainter(Color.cyan));
      }
    }
    catch (BadLocationException ex) {
    }
  }

  public void undoableEditHappened(UndoableEditEvent ev) {
    undo.addEdit(ev.getEdit());
  }

  public String getSearchString() {
    return searchString;
  }

  public void setSearchString(String s) {
    searchString = s;
  }

  public String getReplaceString() {
    return replaceString;
  }

  public void setReplaceString(String s) {
    replaceString = s;
  }

  public boolean getIgnoreCase() {
    return ignoreCase;
  }

  public void setIgnoreCase(boolean b) {
    ignoreCase = b;
  }

  public void doSearch(String search, boolean ignore) {
    if (search.length() > 0) {
      setSearchString(search);
      setIgnoreCase(ignore);
      int length = editor.getDocument().getLength();
      int position = editor.getCaretPosition();
      try {
        String contents = editor.getText(0, length);
        if (ignoreCase) {
          contents = contents.toLowerCase();
        }
        int found = contents.indexOf(search, position);
        if (found != -1) {
          editor.setCaretPosition(found);
          editor.setSelectionStart(found);
          editor.setSelectionEnd(found + search.length());
        }
        else {
          Toolkit.getDefaultToolkit().beep();
        }
      }
      catch (BadLocationException ex) {
      }

    }

  }

  public void doReplace(String replace) {
    if (replace.length() > 0) {
      setReplaceString(replace);
      int start = editor.getSelectionStart();
      int end = editor.getSelectionEnd();
      if ( (start == 0 && end == 0) || (searchString.length() == 0) ||
          (replaceString.length() == 0)) {
        getToolkit().beep();
      }
      else {
        try {
          editor.getDocument().remove(start, end - start);
          editor.getDocument().insertString(start, replaceString, null);
        }
        catch (BadLocationException ex) {
//					MessageFrame.setErrorText(ex.toString());
        }
      }
    }
  }

  public int findMatchingBracket(Document doc, int offset) throws
      BadLocationException {
    int toReturn = -1;
    if (doc.getLength() == 0) {
      return toReturn;
    }
    char c = doc.getText(offset, 1).charAt(0);
    switch (c) {
      case '(':
        toReturn = searchForward(c, ')', offset);
        break;
      case '[':
        toReturn = searchForward(c, ']', offset);
        break;
      case '{':
        toReturn = searchForward(c, '}', offset);
        break;
      case ')':
        toReturn = searchBackward(c, '(', offset);
        break;
      case ']':
        toReturn = searchBackward(c, '[', offset);
        break;
      case '}':
        toReturn = searchBackward(c, '{', offset);
        break;
    }
    return toReturn;
  }

  private int searchForward(char c, char d, int offset) throws
      BadLocationException {
    int count = 1;
    offset++;
    int len = editor.getDocument().getLength() - offset;
    String text = editor.getDocument().getText(offset, len);
    for (int i = 0; i < len; i++) {
      char x = text.charAt(i);
      if (x == c) {
        count++;
      }
      else if (x == d) {
        if (--count == 0) {
          return i + offset;
        }
      }
    }
    return -1;
  }

  private int searchBackward(char c, char d, int offset) throws
      BadLocationException {
    int count = 1;
    String text = editor.getDocument().getText(0, offset);
    for (int i = offset - 1; i >= 0; i--) {
      char x = text.charAt(i);
      if (x == c) {
        count++;
      }
      else if (x == d) {
        if (--count == 0) {
          return i;
        }
      }
    }
    return -1;
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区三区美女| 色综合天天综合| gogogo免费视频观看亚洲一| 色综合久久88色综合天天| 欧美三级资源在线| 精品免费视频.| 成人免费在线播放视频| 亚洲成人动漫在线观看| 国产麻豆精品theporn| 色香色香欲天天天影视综合网 | 国产精品久久久久影院老司| 亚洲第一av色| 成人午夜短视频| 欧美日韩三级一区| 国产偷国产偷精品高清尤物| 亚洲午夜久久久久久久久电影院| 麻豆91在线播放免费| 99久久久精品| 精品国产乱码久久久久久久| 亚洲免费看黄网站| 国产在线播放一区三区四| 欧美伊人久久久久久午夜久久久久| 26uuu久久综合| 亚洲综合丝袜美腿| 国产69精品久久久久毛片| 宅男在线国产精品| 亚洲蜜臀av乱码久久精品| 国产精品一区二区男女羞羞无遮挡 | 日韩一区二区视频在线观看| 一区在线观看视频| 精品一二三四在线| 在线亚洲一区二区| 国产精品天美传媒沈樵| 秋霞午夜av一区二区三区 | 亚洲一区二区三区在线看| 国产精品综合视频| 欧美一区二区三区的| 亚洲女性喷水在线观看一区| 国产高清不卡一区二区| 这里只有精品免费| 夜夜精品视频一区二区 | 亚洲另类在线一区| 丰满亚洲少妇av| 日韩精品综合一本久道在线视频| 亚洲国产一区在线观看| 不卡在线视频中文字幕| 久久久精品天堂| 久久精品国产亚洲5555| 欧美一区二区三区在线看| 一二三区精品福利视频| 色综合天天综合网天天看片| 亚洲国产成人在线| 国产精品99久久久久久久女警| 欧美一区二区三区免费视频| 亚洲成av人片一区二区三区| 一本到不卡免费一区二区| 国产精品久久毛片a| 粉嫩aⅴ一区二区三区四区| 久久综合色婷婷| 久久精品国产第一区二区三区| 欧美日韩国产精品自在自线| 亚洲一区二区三区三| 在线观看免费一区| 一区二区三区不卡视频在线观看| 99精品桃花视频在线观看| 国产精品你懂的在线欣赏| 国产成人精品免费网站| 久久免费看少妇高潮| 国产美女在线观看一区| 久久午夜电影网| 国产在线精品一区在线观看麻豆| 337p粉嫩大胆色噜噜噜噜亚洲| 久久精品国产亚洲一区二区三区| 欧美mv日韩mv国产网站| 国产一二精品视频| 国产日产精品一区| jlzzjlzz欧美大全| 亚洲少妇最新在线视频| 色婷婷久久久亚洲一区二区三区| 亚洲黄色免费电影| 欧美亚洲动漫制服丝袜| 亚洲午夜免费视频| 欧美群妇大交群的观看方式| 蜜臀av性久久久久蜜臀aⅴ流畅| 在线综合视频播放| 国内外成人在线视频| 国产午夜精品福利| 91网站黄www| 亚洲成人在线免费| 欧美一区二区三区免费观看视频| 狠狠狠色丁香婷婷综合久久五月| 国产农村妇女精品| 91最新地址在线播放| 亚洲伊人伊色伊影伊综合网| 这里只有精品免费| 国产一区在线观看麻豆| 国产精品久久久久久久久久久免费看 | 日韩三级伦理片妻子的秘密按摩| 精品一区二区三区免费| 欧美韩国日本不卡| 欧美做爰猛烈大尺度电影无法无天| 亚洲va在线va天堂| 精品国产自在久精品国产| 国产成人在线电影| 亚洲欧美日韩一区二区 | 久久er99热精品一区二区| 国产亚洲一区二区三区四区| 色域天天综合网| 日韩av中文在线观看| 国产欧美综合色| 色婷婷av一区二区三区大白胸 | 一区二区三区四区蜜桃| 欧美一区二区在线免费播放| 丰满亚洲少妇av| 亚洲成精国产精品女| 日韩精品一区二区三区视频播放| 99精品视频中文字幕| 欧美a级理论片| 亚洲欧洲无码一区二区三区| 这里只有精品免费| 99久久久无码国产精品| 日韩激情视频网站| 久久精品一区二区三区不卡| 欧美性xxxxxxxx| 国产成人av影院| 亚洲不卡一区二区三区| 欧美国产成人精品| 欧美高清视频一二三区 | 一区二区三区日韩欧美| 精品卡一卡二卡三卡四在线| 91小视频在线| 久草中文综合在线| 亚洲国产中文字幕| 国产精品无人区| 日韩欧美国产一二三区| 日本高清无吗v一区| 国产揄拍国内精品对白| 亚洲444eee在线观看| 国产精品卡一卡二| 欧美成人aa大片| 欧美在线免费视屏| 成人免费黄色大片| 黑人巨大精品欧美黑白配亚洲| 亚洲午夜在线视频| 国产精品毛片久久久久久久| 精品处破学生在线二十三| 91精品办公室少妇高潮对白| 国产成人鲁色资源国产91色综| 免费在线看一区| 亚洲成av人综合在线观看| 亚洲桃色在线一区| 日本一二三不卡| 精品国产乱码久久久久久影片| 欧美三级电影在线看| 色综合天天综合给合国产| 成人午夜短视频| 国产毛片精品一区| 久久97超碰色| 秋霞影院一区二区| 性欧美大战久久久久久久久| 亚洲综合色婷婷| 亚洲欧美日韩一区二区三区在线观看| 亚洲国产成人午夜在线一区| 久久精品亚洲精品国产欧美kt∨ | 国产精品亚洲一区二区三区妖精 | 中文一区二区在线观看| 亚洲精品在线三区| 日韩女优av电影在线观看| 欧美高清视频在线高清观看mv色露露十八| 在线免费不卡电影| 色综合久久中文综合久久97| 成av人片一区二区| jlzzjlzz国产精品久久| 成人app在线观看| 99久久精品免费| 一本色道久久加勒比精品| 色综合久久综合网欧美综合网| 99精品视频一区| 成人精品视频一区| 99久久综合99久久综合网站| 福利电影一区二区| 懂色av中文字幕一区二区三区| 成人永久看片免费视频天堂| 成人动漫中文字幕| 99久久久久免费精品国产| 色域天天综合网| 欧美日韩免费电影| 7777精品伊人久久久大香线蕉经典版下载 | 国产精品久久久久久久久免费丝袜 | 久久精品国产色蜜蜜麻豆| 激情久久五月天| 国产麻豆欧美日韩一区| 成人免费视频国产在线观看| av一区二区三区四区| 91国偷自产一区二区使用方法| 欧美日韩一级视频| 91精品国产综合久久久久久| 日韩免费观看高清完整版在线观看 | 婷婷久久综合九色综合伊人色| 日本强好片久久久久久aaa|