📄 searchdialog.java
字号:
wrap= new JCheckBox(jEdit.getProperty("search.wrap")); wrap.setMnemonic(jEdit.getProperty("search.wrap.mnemonic") .charAt(0)); searchSettings.add(wrap); wrap.addActionListener(actionHandler); return searchSettings; } private JPanel createMultiFilePanel() { JPanel multifile = new JPanel(); GridBagLayout layout = new GridBagLayout(); multifile.setLayout(layout); GridBagConstraints cons = new GridBagConstraints(); cons.gridy = cons.gridwidth = cons.gridheight = 1; cons.anchor = GridBagConstraints.WEST; cons.fill = GridBagConstraints.HORIZONTAL; MultiFileActionHandler actionListener = new MultiFileActionHandler(); filter = new HistoryTextField("search.filter"); filter.addActionListener(actionListener); cons.insets = new Insets(0,0,3,0); JLabel label = new JLabel(jEdit.getProperty("search.filterField"), SwingConstants.RIGHT); label.setBorder(new EmptyBorder(0,0,0,12)); label.setDisplayedMnemonic(jEdit.getProperty("search.filterField.mnemonic") .charAt(0)); label.setLabelFor(filter); cons.weightx = 0.0f; layout.setConstraints(label,cons); multifile.add(label); cons.insets = new Insets(0,0,3,6); cons.weightx = 1.0f; layout.setConstraints(filter,cons); multifile.add(filter); cons.gridy++; directory = new HistoryTextField("search.directory"); directory.addActionListener(actionListener); label = new JLabel(jEdit.getProperty("search.directoryField"), SwingConstants.RIGHT); label.setBorder(new EmptyBorder(0,0,0,12)); label.setDisplayedMnemonic(jEdit.getProperty("search.directoryField.mnemonic") .charAt(0)); label.setLabelFor(directory); cons.insets = new Insets(0,0,3,0); cons.weightx = 0.0f; layout.setConstraints(label,cons); multifile.add(label); cons.insets = new Insets(0,0,3,6); cons.weightx = 1.0f; cons.gridwidth = 2; layout.setConstraints(directory,cons); multifile.add(directory); choose = new JButton(jEdit.getProperty("search.choose")); choose.setMnemonic(jEdit.getProperty("search.choose.mnemonic") .charAt(0)); cons.insets = new Insets(0,0,3,0); cons.weightx = 0.0f; cons.gridwidth = 1; layout.setConstraints(choose,cons); multifile.add(choose); choose.addActionListener(actionListener); cons.insets = new Insets(0,0,0,0); cons.gridy++; cons.gridwidth = 4; searchSubDirectories = new JCheckBox(jEdit.getProperty( "search.subdirs")); searchSubDirectories.setMnemonic(jEdit.getProperty("search.subdirs.mnemonic") .charAt(0)); layout.setConstraints(searchSubDirectories,cons); multifile.add(searchSubDirectories); return multifile; } private Box createButtonsPanel() { Box box = new Box(BoxLayout.Y_AXIS); ButtonActionHandler actionHandler = new ButtonActionHandler(); box.add(Box.createVerticalStrut(12)); JPanel grid = new JPanel(new GridLayout(5,1,0,12)); findBtn = new JButton(jEdit.getProperty("search.findBtn")); getRootPane().setDefaultButton(findBtn); grid.add(findBtn); findBtn.addActionListener(actionHandler); replaceBtn = new JButton(jEdit.getProperty("search.replaceBtn")); replaceBtn.setMnemonic(jEdit.getProperty("search.replaceBtn.mnemonic") .charAt(0)); grid.add(replaceBtn); replaceBtn.addActionListener(actionHandler); replaceAndFindBtn = new JButton(jEdit.getProperty("search.replaceAndFindBtn")); replaceAndFindBtn.setMnemonic(jEdit.getProperty("search.replaceAndFindBtn.mnemonic") .charAt(0)); grid.add(replaceAndFindBtn); replaceAndFindBtn.addActionListener(actionHandler); replaceAllBtn = new JButton(jEdit.getProperty("search.replaceAllBtn")); replaceAllBtn.setMnemonic(jEdit.getProperty("search.replaceAllBtn.mnemonic") .charAt(0)); grid.add(replaceAllBtn); replaceAllBtn.addActionListener(actionHandler); closeBtn = new JButton(jEdit.getProperty("common.close")); grid.add(closeBtn); closeBtn.addActionListener(actionHandler); grid.setMaximumSize(grid.getPreferredSize()); box.add(grid); box.add(Box.createGlue()); return box; } private void updateEnabled() { boolean replaceEnabled = !hyperSearch.isSelected(); stringReplace.setEnabled(replaceEnabled); beanShellReplace.setEnabled(replaceEnabled); replace.setEnabled(replaceEnabled); replaceBtn.setEnabled(replaceEnabled); replaceAndFindBtn.setEnabled(replaceEnabled); replaceAllBtn.setEnabled(replaceEnabled); wrap.setEnabled(replaceEnabled); boolean reverseEnabled = replaceEnabled && searchCurrentBuffer.isSelected(); searchBack.setEnabled(reverseEnabled); searchForward.setEnabled(reverseEnabled); boolean regexpEnabled = (hyperSearch.isSelected() || !(searchBack.isEnabled() && searchBack.isSelected())); regexp.setEnabled(regexpEnabled); filter.setEnabled(searchAllBuffers.isSelected() || searchDirectory.isSelected()); boolean directoryEnabled = searchDirectory.isSelected(); directory.setEnabled(directoryEnabled); choose.setEnabled(directoryEnabled); searchSubDirectories.setEnabled(directoryEnabled); } private boolean save() { String filter = this.filter.getText(); this.filter.addCurrentToHistory(); if(filter.length() == 0) filter = "*"; SearchFileSet fileset = SearchAndReplace.getSearchFileSet(); if(searchCurrentBuffer.isSelected()) fileset = new CurrentBufferSet(); else if(searchAllBuffers.isSelected()) fileset = new AllBufferSet(filter); else if(searchDirectory.isSelected()) { String directory = this.directory.getText(); this.directory.addCurrentToHistory(); boolean recurse = searchSubDirectories.isSelected(); if(fileset instanceof DirectoryListSet) { DirectoryListSet dset = (DirectoryListSet)fileset; if(!dset.getDirectory().equals(directory) || !dset.getFileFilter().equals(filter) || !dset.isRecursive() == recurse) fileset = new DirectoryListSet(directory,filter,recurse); } else fileset = new DirectoryListSet(directory,filter,recurse); } else { // can't happen fileset = null; } jEdit.setBooleanProperty("search.keepDialog.toggle", keepDialog.isSelected()); jEdit.setBooleanProperty("search.hypersearch.toggle", hyperSearch.isSelected()); boolean ok = true; if(fileset.getBufferCount() == 0) { // oops GUIUtilities.error(this,"empty-fileset",null); ok = false; } else SearchAndReplace.setSearchFileSet(fileset); if(find.getText().length() != 0) { find.addCurrentToHistory(); SearchAndReplace.setSearchString(find.getText()); replace.addCurrentToHistory(); SearchAndReplace.setReplaceString(replace.getText()); } else ok = false; return ok; } private void closeOrKeepDialog() { if(keepDialog.isSelected()) return; else { GUIUtilities.saveGeometry(this,"search"); setVisible(false); } } // used for the stringReplace and beanShell replace radio buttons, // so that the user can press tab to go from the find field to the // replace field in one go class MyJRadioButton extends JRadioButton { MyJRadioButton(String label) { super(label); } public boolean isFocusTraversable() { return false; } } class ReplaceActionHandler implements ActionListener { public void actionPerformed(ActionEvent evt) { replace.setModel(beanShellReplace.isSelected() ? "replace.script" : "replace"); SearchAndReplace.setBeanShellReplace( beanShellReplace.isSelected()); } } class SettingsActionHandler implements ActionListener { public void actionPerformed(ActionEvent evt) { Object source = evt.getSource(); if(source == ignoreCase) SearchAndReplace.setIgnoreCase(ignoreCase.isSelected()); else if(source == regexp) SearchAndReplace.setRegexp(regexp.isSelected()); else if(source == searchBack || source == searchForward) SearchAndReplace.setReverseSearch(searchBack.isSelected()); else if(source == wrap) SearchAndReplace.setAutoWrapAround(wrap.isSelected()); updateEnabled(); } } class MultiFileActionHandler implements ActionListener { public void actionPerformed(ActionEvent evt) { if(evt.getSource() == choose) { File dir = new File(directory.getText()); JFileChooser chooser = new JFileChooser(dir.getParent()); chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); chooser.setSelectedFile(dir); if(chooser.showOpenDialog(SearchDialog.this) == JFileChooser.APPROVE_OPTION) directory.setText(chooser.getSelectedFile().getPath()); } else // source is directory or filter field { // just as if Enter was pressed in another // text field ok(); } } } class ButtonActionHandler implements ActionListener { public void actionPerformed(ActionEvent evt) { Object source = evt.getSource(); if(source == closeBtn) cancel(); else if(source == findBtn || source == find || source == replace) { ok(); } else if(source == replaceBtn) { save(); if(SearchAndReplace.replace(view)) closeOrKeepDialog(); else getToolkit().beep(); } else if(source == replaceAndFindBtn) { save(); if(SearchAndReplace.replace(view)) ok(); else getToolkit().beep(); } else if(source == replaceAllBtn) { setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); save(); if(SearchAndReplace.replaceAll(view)) closeOrKeepDialog(); else getToolkit().beep(); setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -