searchdialog.java

来自「用java 编写的源码开放的文本编辑器。有很多有用的特性」· Java 代码 · 共 910 行 · 第 1/2 页

JAVA
910
字号
		searchCurrentBuffer = new JRadioButton(jEdit.getProperty("search.current"));		searchCurrentBuffer.setMnemonic(jEdit.getProperty("search.current.mnemonic")			.charAt(0));		fileset.add(searchCurrentBuffer);		searchSettings.add(searchCurrentBuffer);		searchCurrentBuffer.addActionListener(actionHandler);		ignoreCase = new JCheckBox(jEdit.getProperty("search.case"));		ignoreCase.setMnemonic(jEdit.getProperty("search.case.mnemonic")			.charAt(0));		searchSettings.add(ignoreCase);		ignoreCase.addActionListener(actionHandler);		searchForward = new JRadioButton(jEdit.getProperty("search.forward"));		searchForward.setMnemonic(jEdit.getProperty("search.forward.mnemonic")			.charAt(0));		direction.add(searchForward);		searchSettings.add(searchForward);		searchForward.addActionListener(actionHandler);		searchAllBuffers = new JRadioButton(jEdit.getProperty("search.all"));		searchAllBuffers.setMnemonic(jEdit.getProperty("search.all.mnemonic")			.charAt(0));		fileset.add(searchAllBuffers);		searchSettings.add(searchAllBuffers);		searchAllBuffers.addActionListener(actionHandler);		regexp = new JCheckBox(jEdit.getProperty("search.regexp"));		regexp.setMnemonic(jEdit.getProperty("search.regexp.mnemonic")			.charAt(0));		searchSettings.add(regexp);		regexp.addActionListener(actionHandler);		wrap = new JCheckBox(jEdit.getProperty("search.wrap"));		wrap.setMnemonic(jEdit.getProperty("search.wrap.mnemonic")			.charAt(0));		searchSettings.add(wrap);		wrap.addActionListener(actionHandler);		searchDirectory = new JRadioButton(jEdit.getProperty("search.directory"));		searchDirectory.setMnemonic(jEdit.getProperty("search.directory.mnemonic")			.charAt(0));		fileset.add(searchDirectory);		searchSettings.add(searchDirectory);		searchDirectory.addActionListener(actionHandler);		hyperSearch = new JCheckBox(jEdit.getProperty("search.hypersearch"));		hyperSearch.setMnemonic(jEdit.getProperty("search.hypersearch.mnemonic")			.charAt(0));		searchSettings.add(hyperSearch);		hyperSearch.addActionListener(actionHandler);		return searchSettings;	} //}}}	//{{{ createMultiFilePanel() method	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.setColumns(25);		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;	} //}}}	//{{{ createButtonsPanel() method	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;	} //}}}	//{{{ updateEnabled() method	private void updateEnabled()	{		wrap.setEnabled(!hyperSearch.isSelected()			&& !searchSelection.isSelected());		boolean reverseEnabled = !hyperSearch.isSelected()			&& searchCurrentBuffer.isSelected()			&& !regexp.isSelected();		searchBack.setEnabled(reverseEnabled);		searchForward.setEnabled(reverseEnabled);		if(!reverseEnabled)			searchForward.setSelected(true);		filter.setEnabled(searchAllBuffers.isSelected()			|| searchDirectory.isSelected());		boolean directoryEnabled = searchDirectory.isSelected();		directory.setEnabled(directoryEnabled);		choose.setEnabled(directoryEnabled);		searchSubDirectories.setEnabled(directoryEnabled);		findBtn.setEnabled(!searchSelection.isSelected()			|| hyperSearch.isSelected());		replaceAndFindBtn.setEnabled(!hyperSearch.isSelected()			&& !searchSelection.isSelected());	} //}}}	//{{{ save() method	/**	 * @param cancel If true, we don't bother the user with warning messages	 */	private boolean save(boolean cancel)	{		String filter = this.filter.getText();		this.filter.addCurrentToHistory();		if(filter.length() == 0)			filter = "*";		SearchFileSet fileset = SearchAndReplace.getSearchFileSet();		if(searchSelection.isSelected())			fileset = new CurrentBufferSet();		else if(searchCurrentBuffer.isSelected())		{			fileset = new CurrentBufferSet();			jEdit.setBooleanProperty("search.hypersearch.toggle",				hyperSearch.isSelected());		}		else if(searchAllBuffers.isSelected())			fileset = new AllBufferSet(filter);		else if(searchDirectory.isSelected())		{			String directory = this.directory.getText();			this.directory.addCurrentToHistory();			if((VFSManager.getVFSForPath(directory).getCapabilities()				& VFS.LOW_LATENCY_CAP) == 0)			{				if(cancel)					return false;				int retVal = GUIUtilities.confirm(					SearchDialog.this,"remote-dir-search",					null,JOptionPane.YES_NO_OPTION,					JOptionPane.WARNING_MESSAGE);				if(retVal != JOptionPane.YES_OPTION)					return false;			}			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());		boolean ok = true;		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;	} //}}}	//{{{ closeOrKeepDialog() method	private void closeOrKeepDialog()	{		if(keepDialog.isSelected())		{			// Windows bug workaround in case a YES/NO confirm			// was shown			// ... but if HyperSearch results window is floating,			// the workaround causes problems!			if(!hyperSearch.isSelected())			{				toFront();				requestFocus();				find.requestFocus();			}			return;		}		else		{			GUIUtilities.saveGeometry(this,"search");			dispose();		}	} //}}}	//}}}	//{{{ Inner classes	//{{{ MyJRadioButton class	// 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;		}	} //}}}	//{{{ ReplaceActionHandler class	class ReplaceActionHandler implements ActionListener	{		public void actionPerformed(ActionEvent evt)		{			replace.setModel(beanShellReplace.isSelected()				? "replace.script"				: "replace");			SearchAndReplace.setBeanShellReplace(				beanShellReplace.isSelected());		}	} //}}}	//{{{ SettingsActionHandler class	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());			else if(source == searchCurrentBuffer)				hyperSearch.setSelected(false);			else if(source == searchSelection				|| source == searchAllBuffers				|| source == searchDirectory)				hyperSearch.setSelected(true);			updateEnabled();		}	} //}}}	//{{{ MultiFileActionHandler class	class MultiFileActionHandler implements ActionListener	{		public void actionPerformed(ActionEvent evt)		{			if(evt.getSource() == choose)			{				String[] dirs = GUIUtilities.showVFSFileDialog(					view,directory.getText(),					VFSBrowser.CHOOSE_DIRECTORY_DIALOG,					false);				if(dirs != null)					directory.setText(dirs[0]);			}			else // source is directory or filter field			{				// just as if Enter was pressed in another				// text field				ok();			}		}	} //}}}	//{{{ ButtonActionHandler class	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 == replaceAndFindBtn)			{				save(false);				if(SearchAndReplace.replace(view))					ok();				else					getToolkit().beep();			}			else if(source == replaceAllBtn)			{				setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));				save(false);				if(searchSelection.isSelected())				{					if(SearchAndReplace.replace(view))						closeOrKeepDialog();					else						getToolkit().beep();				}				else				{					if(SearchAndReplace.replaceAll(view))						closeOrKeepDialog();					else						getToolkit().beep();				}				setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));			}		}	} //}}}	//}}}}

⌨️ 快捷键说明

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