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

📄 myneweditor.java

📁 This is the complete Editor Using java
💻 JAVA
📖 第 1 页 / 共 3 页
字号:

    JPanel pf = new JPanel();
    pf.setLayout(new DialogLayout(20, 5));
    pf.setBorder(new EmptyBorder(8, 5, 8, 0));
    pf.add(new JLabel("Find what:"));
        
    m_txtFind1 = new JTextField();
    m_docFind = m_txtFind1.getDocument();
    pf.add(m_txtFind1);
    pc1.add(pf, BorderLayout.CENTER);

    JPanel po = new JPanel(new GridLayout(2, 2, 8, 2));
    po.setBorder(new TitledBorder(new EtchedBorder(), 
      "Options"));

    JCheckBox chkWord = new JCheckBox("Whole words only");
    chkWord.setMnemonic('w');
    m_modelWord = chkWord.getModel();
    po.add(chkWord);

    ButtonGroup bg = new ButtonGroup();
    JRadioButton rdUp = new JRadioButton("Search up");
    rdUp.setMnemonic('u');
    m_modelUp = rdUp.getModel();
    bg.add(rdUp);
    po.add(rdUp);

    JCheckBox chkCase = new JCheckBox("Match case");
    chkCase.setMnemonic('c');
    m_modelCase = chkCase.getModel();
    po.add(chkCase);

    JRadioButton rdDown = new JRadioButton("Search down", true);
    rdDown.setMnemonic('d');
    m_modelDown = rdDown.getModel();
    bg.add(rdDown);
    po.add(rdDown);
    pc1.add(po, BorderLayout.SOUTH);

    p1.add(pc1, BorderLayout.CENTER);

    JPanel p01 = new JPanel(new FlowLayout());
    JPanel p = new JPanel(new GridLayout(2, 1, 2, 8));

    ActionListener findAction = new ActionListener() { 
      public void actionPerformed(ActionEvent e) {
        findNext(false, true);
      }
    };
    JButton btFind = new JButton("Find Next");
    btFind.addActionListener(findAction);
    btFind.setMnemonic('f');
    p.add(btFind);

    ActionListener closeAction = new ActionListener() { 
      public void actionPerformed(ActionEvent e) {
        setVisible(false);
      }
    };
    JButton btClose = new JButton("Close");
    btClose.addActionListener(closeAction);
    btClose.setDefaultCapable(true);
    p.add(btClose);
    p01.add(p);
    p1.add(p01, BorderLayout.EAST);

    m_tb.addTab("Find", p1);

    // "Replace" panel
    JPanel p2 = new JPanel(new BorderLayout());

    JPanel pc2 = new JPanel(new BorderLayout());

    JPanel pc = new JPanel();
    pc.setLayout(new DialogLayout(20, 5));
    pc.setBorder(new EmptyBorder(8, 5, 8, 0));
        
    pc.add(new JLabel("Find what:"));
    m_txtFind2 = new JTextField();
    m_txtFind2.setDocument(m_docFind);
    pc.add(m_txtFind2);

    pc.add(new JLabel("Replace:"));
    JTextField txtReplace = new JTextField();
    m_docReplace = txtReplace.getDocument();
    pc.add(txtReplace);
    pc2.add(pc, BorderLayout.CENTER);

    po = new JPanel(new GridLayout(2, 2, 8, 2));
    po.setBorder(new TitledBorder(new EtchedBorder(), 
      "Options"));

    chkWord = new JCheckBox("Whole words only");
    chkWord.setMnemonic('w');
    chkWord.setModel(m_modelWord);
    po.add(chkWord);

    bg = new ButtonGroup();
    rdUp = new JRadioButton("Search up");
    rdUp.setMnemonic('u');
    rdUp.setModel(m_modelUp);
    bg.add(rdUp);
    po.add(rdUp);

    chkCase = new JCheckBox("Match case");
    chkCase.setMnemonic('c');
    chkCase.setModel(m_modelCase);
    po.add(chkCase);

    rdDown = new JRadioButton("Search down", true);
    rdDown.setMnemonic('d');
    rdDown.setModel(m_modelDown);
    bg.add(rdDown);
    po.add(rdDown);
    pc2.add(po, BorderLayout.SOUTH);

    p2.add(pc2, BorderLayout.CENTER);

    JPanel p02 = new JPanel(new FlowLayout());
    p = new JPanel(new GridLayout(3, 1, 2, 8));

    ActionListener replaceAction = new ActionListener() { 
      public void actionPerformed(ActionEvent e) {
        findNext(true, true);
      }
    };
    JButton btReplace = new JButton("Replace");
    btReplace.addActionListener(replaceAction);
    btReplace.setMnemonic('r');
    p.add(btReplace);

    ActionListener replaceAllAction = new ActionListener() { 
      public void actionPerformed(ActionEvent e) {
        int counter = 0;
        while (true) {
          int result = findNext(true, false);
          if (result < 0)    // error
            return;
          else if (result == 0)    // no more
            break;
          counter++;
        }
        JOptionPane.showMessageDialog(m_owner, 
          counter+" replacement(s) have been done", "Info",
          JOptionPane.INFORMATION_MESSAGE);
      }
    };
    JButton btReplaceAll = new JButton("Replace All");
    btReplaceAll.addActionListener(replaceAllAction);
    btReplaceAll.setMnemonic('a');
    p.add(btReplaceAll);

    btClose = new JButton("Close");
    btClose.addActionListener(closeAction);
    btClose.setDefaultCapable(true);
    p.add(btClose);
    p02.add(p);
    p2.add(p02, BorderLayout.EAST);
        
    // Make button columns the same size
    p01.setPreferredSize(p02.getPreferredSize());

    m_tb.addTab("Replace", p2);

    m_tb.setSelectedIndex(index);

    getContentPane().add(m_tb, BorderLayout.CENTER);

    WindowListener flst = new WindowAdapter() { 
      public void windowActivated(WindowEvent e) {
        m_searchIndex = -1;
        if (m_tb.getSelectedIndex()==0)
          m_txtFind1.grabFocus();
        else
          m_txtFind2.grabFocus();
      }

      public void windowDeactivated(WindowEvent e) {
        m_searchData = null;
      }
    };
    addWindowListener(flst);

     pack();
     setResizable(false);
  }

  public void setSelectedIndex(int index) {
    m_tb.setSelectedIndex(index);
    setVisible(true);
    m_searchIndex = -1;
  }

  public int findNext(boolean doReplace, boolean showWarnings) {
    JTextPane monitor = m_owner.getTextPane();
    int pos = monitor.getCaretPosition();
    if (m_modelUp.isSelected() != m_searchUp) {
      m_searchUp = m_modelUp.isSelected();
      m_searchIndex = -1;
    }

    if (m_searchIndex == -1) {
      try {
        Document doc = m_owner.getDocument();
        if (m_searchUp)
          m_searchData = doc.getText(0, pos);
        else
          m_searchData = doc.getText(pos, doc.getLength()-pos);
        m_searchIndex = pos;
      }
      catch (BadLocationException ex) {
        warning(ex.toString());
        return -1;
      }
    }
        
    String key = "";
    try { key = m_docFind.getText(0, m_docFind.getLength()); }
    catch (BadLocationException ex) {}
    if (key.length()==0) {
      warning("Please enter the target to search");
      return -1;
    }
    if (!m_modelCase.isSelected()) {
      m_searchData = m_searchData.toLowerCase();
      key = key.toLowerCase();
    }
    if (m_modelWord.isSelected()) {
      for (int k=0; k<Utils.WORD_SEPARATORS.length; k++) {
        if (key.indexOf(Utils.WORD_SEPARATORS[k]) >= 0) {
          warning("The text target contains an illegal "+
            "character \'"+Utils.WORD_SEPARATORS[k]+"\'");
          return -1;
        }
      }
    }

    String replacement = "";
    if (doReplace) {
      try {
        replacement = m_docReplace.getText(0, 
          m_docReplace.getLength());
      } catch (BadLocationException ex) {}
    }

    int xStart = -1;
    int xFinish = -1;
    while (true) 
    {
      if (m_searchUp)
        xStart = m_searchData.lastIndexOf(key, pos-1);
      else
        xStart = m_searchData.indexOf(key, pos-m_searchIndex);
      if (xStart < 0) {
        if (showWarnings)
          warning("Text not found");
        return 0;
      }

      xFinish = xStart+key.length();

      if (m_modelWord.isSelected()) {
        boolean s1 = xStart>0;
        boolean b1 = s1 && !Utils.isSeparator(m_searchData.charAt(
          xStart-1));
        boolean s2 = xFinish<m_searchData.length();
        boolean b2 = s2 && !Utils.isSeparator(m_searchData.charAt(
          xFinish));
                    
        if (b1 || b2)    // Not a whole word
        {
          if (m_searchUp && s1)    // Can continue up
          {
            pos = xStart;
            continue;
          }
          if (!m_searchUp && s2)    // Can continue down
          {
            pos = xFinish;
            continue;
          }
          // Found, but not a whole word, and we cannot continue
          if (showWarnings)
            warning("Text not found");
          return 0;
        }
      }
      break;
    }

    if (!m_searchUp) {
      xStart += m_searchIndex;
      xFinish += m_searchIndex;
    }
    if (doReplace) {
      m_owner.setSelection(xStart, xFinish, m_searchUp);
      monitor.replaceSelection(replacement);
      m_owner.setSelection(xStart, xStart+replacement.length(), 
        m_searchUp);
      m_searchIndex = -1;
    }
    else
      m_owner.setSelection(xStart, xFinish, m_searchUp);
    return 1;
  }

  protected void warning(String message) {
    JOptionPane.showMessageDialog(m_owner, 
      message, "Warning", JOptionPane.INFORMATION_MESSAGE);
  }
}

class DocumentTokenizer
{
  protected Document m_doc;
  protected Segment  m_seg;
  protected int m_startPos;
  protected int m_endPos;
  protected int m_currentPos;

  public DocumentTokenizer(Document doc, int offset) {
    m_doc = doc;
    m_seg = new Segment();
    setPosition(offset);
  }

  public boolean hasMoreTokens() {
    return (m_currentPos < m_doc.getLength());
  }

  public String nextToken() {
    StringBuffer s = new StringBuffer();
    try {
      // Trim leading seperators
      while (hasMoreTokens()) {
        m_doc.getText(m_currentPos, 1, m_seg);
        char ch = m_seg.array[m_seg.offset];
        if (!Utils.isSeparator(ch)) {
          m_startPos = m_currentPos;
          break;
        }
        m_currentPos++;
      }
            
      // Append characters
      while (hasMoreTokens()) {
        m_doc.getText(m_currentPos, 1, m_seg);
        char ch = m_seg.array[m_seg.offset];
        if (Utils.isSeparator(ch)) {
          m_endPos = m_currentPos;
          break;
        }
        s.append(ch);
        m_currentPos++;
      }
    }
    catch (BadLocationException ex) {
      System.err.println("nextToken: "+ex.toString());
      m_currentPos = m_doc.getLength();
    }
    return s.toString();
  }

  public int getStartPos() { return m_startPos; }

  public int getEndPos() { return m_endPos; }
    
  public void setPosition(int pos) { 
    m_startPos = pos;
    m_endPos = pos;
    m_currentPos = pos;
  }
}

class Utils
{
  public static final char[] WORD_SEPARATORS = {' ', '\t', '\n',
    '\r', '\f', '.', ',', ':', '-', '(', ')', '[', ']', '{',
    '}', '<', '>', '/', '|', '\\', '\'', '\"'};
    
  public static boolean isSeparator(char ch) {
    for (int k=0; k<WORD_SEPARATORS.length; k++)
      if (ch == WORD_SEPARATORS[k])
        return true;
    return false;
  }

  public static String soundex(String word) {
    char[] result = new char[4];
    result[0] = word.charAt(0);
    result[1] = result[2] = result[3] = '0';
    int index = 1;
        
    char codeLast = '*';
    for (int k=1; k<word.length(); k++) {
      char ch = word.charAt(k);
      char code = ' ';
      switch (ch) {
        case 'b': case 'f': case 'p': case 'v': 
          code = '1';
          break;
        case 'c': case 'g': case 'j': case 'k': 
        case 'q': case 's': case 'x': case 'z': 
          code = '2';
          break;
        case 'd': case 't': 
          code = '3';
          break;
        case 'l': 
          code = '4';
          break;
        case 'm': case 'n': 
          code = '5';
          break;
        case 'r': 
          code = '6';
          break;
        default:
          code = '*';
          break;
      }
      if (code == codeLast)
        code = '*';
      codeLast = code;
      if (code != '*') {
        result[index] = code;
        index++;
        if (index > 3)
          break;
      }
    }
    return new String(result);
  }

  public static boolean hasDigits(String word) {
    for (int k=1; k<word.length(); k++) {
      char ch = word.charAt(k);
      if (Character.isDigit(ch))
        return true;
    }
    return false;
  }

  public static String titleCase(String source) {
    return Character.toUpperCase(source.charAt(0)) + 
      source.substring(1);
  }
}

⌨️ 快捷键说明

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