📄 findreplace.java
字号:
if (s != null) fieldReplace.addItem(s); else break; } s = Search.getReplacePattern(); if (s != null) { addReplaceHistory(s); fieldReplace.setSelectedItem(s); } } // selects contents fieldSearchEditor.selectAll(); } // exits the dialog after having saved the search and // replace histories. private void exit() { if (saveStates.isSelected()) { for (int i = 0; i < fieldSearch.getItemCount(); i++) Jext.setProperty("search.history." + i, (String) fieldSearch.getItemAt(i)); for (int i = fieldSearch.getItemCount(); i < 25; i++) Jext.unsetProperty("search.history." + i); if (type == REPLACE) { for (int i = 0; i < fieldReplace.getItemCount(); i++) Jext.setProperty("replace.history." + i, (String) fieldReplace.getItemAt(i)); for (int i = fieldReplace.getItemCount(); i < 25; i++) Jext.unsetProperty("replace.history." + i); } } Jext.setProperty("savestates", (saveStates.isSelected() ? "on" : "off")); Jext.setProperty("allfiles", (allFiles.isSelected() ? "on" : "off"));// patch added by gandalf march 25 2003 Search.setIgnoreCase(checkIgnoreCase.isSelected() ? true : false); Search.setRegexp(useRegexp.isSelected() ? true : false);// patch added by gandalf march 25 2003 dispose(); } // adds current search pattern in the search history list private void addSearchHistory() { addSearchHistory(fieldSearchEditor.getText()); } // adds a pattern in the search history list // the pattern to be added is specified by the param c private void addSearchHistory(String c) { if (c == null) return; for (int i = 0; i < fieldSearch.getItemCount(); i++) { if (((String) fieldSearch.getItemAt(i)).equals(c)) return; } fieldSearch.insertItemAt(c, 0); if (fieldSearch.getItemCount() > 25) { //for (int i = 24; i < fieldSearch.getItemCount(); i++)// patch added by gandalf march 25 2003 for (int i = 25; i < fieldSearch.getItemCount();)// patch added by gandalf march 25 2003 fieldSearch.removeItemAt(i); } //Search.setFindPattern(fieldSearchEditor.getText()); fieldSearchEditor.setText((String) fieldSearch.getItemAt(0)); } // adds current replace pattern in the replace history list private void addReplaceHistory() { addReplaceHistory(fieldReplaceEditor.getText()); } // adds a pattern in the replace history list // the pattern to be added is given by the param c private void addReplaceHistory(String c) { if (c == null) return; for (int i = 0; i < fieldReplace.getItemCount(); i++) { if (((String) fieldReplace.getItemAt(i)).equals(c)) return; } fieldReplace.insertItemAt(c, 0); if (fieldReplace.getItemCount() > 25) { //for (int i = 24; i < fieldReplace.getItemCount(); i++)// patch added by gandalf march 25 2003 for (int i = 25; i < fieldReplace.getItemCount();)// patch added by gandalf march 25 2003 fieldReplace.removeItemAt(i); } //Search.setReplacePattern(fieldReplaceEditor.getText()); fieldReplaceEditor.setText((String) fieldReplace.getItemAt(0)); } // Catch the action performed and then look for its source // According to the source object we call appropriate methods public void actionPerformed(ActionEvent evt) { Object source = evt.getSource(); if (source == btnCancel) exit(); else if (source == btnFind) doFind(); else if (source == btnReplace) doReplace(); else if (source == btnReplaceAll) doReplaceAll(); else if (source == scripted) { script.setEnabled(scripted.isSelected()); fieldReplace.setEnabled(!scripted.isSelected()); } } private void setSettings() { Search.setFindPattern(fieldSearchEditor.getText()); Search.setIgnoreCase(checkIgnoreCase.isSelected()); Search.setRegexp(useRegexp.isSelected()); if (type == REPLACE) { Search.setReplacePattern(fieldReplaceEditor.getText()); Search.setPythonScript(scripted.isSelected()); Search.setPythonScriptString(script.getText()); } } // replace all the occurences of search pattern by // the replace one. If 'All Files' is checked, this is // done in all the opened file in the component 'parent' private void doReplaceAll() { Utilities.setCursorOnWait(this, true); addReplaceHistory(); addSearchHistory(); try { if (allFiles.isSelected()) { parent.setBatchMode(true); JextTextArea textArea; JextTextArea[] areas = parent.getTextAreas(); for (int i = 0; i < areas.length; i ++) { textArea = areas[i]; setSettings(); Search.replaceAll(textArea, 0, textArea.getLength()); } parent.setBatchMode(false); } else { JextTextArea textArea = parent.getTextArea(); setSettings(); if (Search.replaceAll(textArea, 0, textArea.getLength()) == 0) { Utilities.beep(); } } } catch (Exception e) { // nothing } finally { Utilities.setCursorOnWait(this, false); } } // replaces specified search pattern by the replace one. // this is done only if a match is found. private void doReplace() { Utilities.setCursorOnWait(this, true); addReplaceHistory(); addSearchHistory(); try { JextTextArea textArea = parent.getTextArea(); setSettings(); if (!Search.replace(textArea)) { Utilities.beep(); } else find(textArea); } catch (Exception e) { // nothing } finally { Utilities.setCursorOnWait(this, false); } } // finds the next occurence of current search pattern // the search is done in current text area private void doFind() { Utilities.setCursorOnWait(this, true); addSearchHistory(); find(parent.getTextArea()); Utilities.setCursorOnWait(this, false); } // finds the next occurence of the search pattern in a // a given text area. if match is not found, and if user // don't ask to start over from beginning, then the method // calls itself by specifying next opened text area. private void find(JextTextArea textArea) { setSettings(); try { if (!Search.find(textArea, textArea.getCaretPosition())) { String[] args = { textArea.getName() }; int response = JOptionPane.showConfirmDialog(null, Jext.getProperty("find.matchnotfound", args), Jext.getProperty("find.title"), (allFiles.isSelected() ? JOptionPane.YES_NO_CANCEL_OPTION : JOptionPane.YES_NO_OPTION), JOptionPane.QUESTION_MESSAGE); switch (response) { case JOptionPane.YES_OPTION: textArea.setCaretPosition(0); find(textArea); break; case JOptionPane.NO_OPTION: if (allFiles.isSelected()) { JextTabbedPane pane = parent.getTabbedPane(); int index = pane.indexOfComponent(textArea); Component c = null; while (c == null && !(c instanceof JextTextArea)) { index++; if (index == pane.getTabCount()) index = 0; c = pane.getComponentAt(index); } JextTextArea area = (JextTextArea) c; if (area != textArea) find(area); } break; case JOptionPane.CANCEL_OPTION: return; } } } catch (Exception e) { } } class KeyHandler extends KeyAdapter { public void keyPressed(KeyEvent evt) { switch (evt.getKeyCode()) { case KeyEvent.VK_ENTER: if (evt.getSource() == fieldSearchEditor) doFind(); else if (evt.getSource() == fieldReplaceEditor) doReplace(); break; case KeyEvent.VK_ESCAPE: exit(); } } }}// End of FindReplace.java
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -