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

📄 searchdialog.java

📁 一个很好的LIBSVM的JAVA源码。对于要研究和改进SVM算法的学者。可以参考。来自数据挖掘工具YALE工具包。
💻 JAVA
字号:
/*
 *  YALE - Yet Another Learning Environment
 *  Copyright (C) 2001-2004
 *      Simon Fischer, Ralf Klinkenberg, Ingo Mierswa, 
 *          Katharina Morik, Oliver Ritthoff
 *      Artificial Intelligence Unit
 *      Computer Science Department
 *      University of Dortmund
 *      44221 Dortmund,  Germany
 *  email: yale-team@lists.sourceforge.net
 *  web:   http://yale.cs.uni-dortmund.de/
 *
 *  This program is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU General Public License as 
 *  published by the Free Software Foundation; either version 2 of the
 *  License, or (at your option) any later version. 
 *
 *  This program is distributed in the hope that it will be useful, but
 *  WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 *  General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 *  USA.
 */
package edu.udo.cs.yale.gui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JTextField;
import javax.swing.JCheckBox;
import javax.swing.JRadioButton;
import javax.swing.JOptionPane;
import javax.swing.text.JTextComponent;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class SearchDialog extends JDialog {

    private class Result {
	private int start, end;
	private Result(int start, int end) {
	    this.start = start;
	    this.end   = end;
	}
    }

    private JTextField patternField = new JTextField(20);
    private JCheckBox caseSensitive = new JCheckBox("Case sensitive");
    private JCheckBox regExp        = new JCheckBox("Regular expression");
    private JRadioButton up         = new JRadioButton("Up");    
    private JRadioButton down       = new JRadioButton("Down");
    private JTextComponent textComponent;

    public SearchDialog(Component owner, JTextComponent textComponent) {
	super();
	this.textComponent = textComponent;
	setTitle("Find");
	setModal(false);
	getContentPane().setLayout(new BorderLayout());

	Box mainBox = new Box(BoxLayout.Y_AXIS);
	mainBox.setBorder(BorderFactory.createEmptyBorder(11,11,11,5));

	JPanel searchPanel = new JPanel();
	searchPanel.add(new JLabel("Find:"));
	searchPanel.add(patternField);
	mainBox.add(searchPanel);

	Box optionBox = new Box(BoxLayout.X_AXIS);

	JPanel directionPanel = new JPanel();
	directionPanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(11,0,0,11),
								    BorderFactory.createTitledBorder("Direction")));
	ButtonGroup directionGroup = new ButtonGroup();
	up.setMnemonic(KeyEvent.VK_U);
	directionGroup.add(up);
	directionPanel.add(up);
	down.setMnemonic(KeyEvent.VK_D);
	directionGroup.add(down);
	down.setSelected(true);
	directionPanel.add(down);
	directionPanel.setAlignmentY(0.5f);
	optionBox.add(directionPanel);

	Box checkBoxBox = new Box(BoxLayout.Y_AXIS);
	checkBoxBox.add(caseSensitive);
	checkBoxBox.add(regExp);
	checkBoxBox.setAlignmentY(0.5f);
	optionBox.add(checkBoxBox);

	mainBox.add(optionBox);

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

	Box buttonBox = new Box(BoxLayout.Y_AXIS);
	buttonBox.setBorder(BorderFactory.createEmptyBorder(11,6,11,11));
	JButton find = new JButton("Find");
	getRootPane().setDefaultButton(find);
	find.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
		    find();
		}
	    });
	buttonBox.add(find);

	JButton cancel = new JButton("Close");
	//cancel.setMnemonic(KeyEvent.VK_ESCAPE);
	cancel.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent e) {
		    dispose();
		}
	    });
	buttonBox.add(cancel);
	getContentPane().add(buttonBox, BorderLayout.EAST);

	pack();
	setLocationRelativeTo(owner);
    }

    private void find() {
	String pattern = patternField.getText().trim();
	if (pattern.length() == 0) return;
	int startPos = textComponent.getCaretPosition();
	String text = textComponent.getText();
	if (startPos == text.length()) startPos = 0;

	if (down.isSelected()) {
	    Result result = search(startPos, pattern, text);
	    if (result == null) {
		noMoreHits();
		return;
	    } else {
		textComponent.setCaretPosition(result.start);
		textComponent.moveCaretPosition(result.end);
	    }
	} else {

	    Result lastResult = null;
	    int pos = 0;
	    while (true) {
		Result result = search(pos, pattern, text);
		if (result != null) {
		    if (result.end < startPos) {
			pos = result.start+1;
			lastResult = result;
		    } else {
			break;
		    }
		} else {
		    break;
		}
	    }

	    if (lastResult == null) {
		noMoreHits();
	    } else {
		textComponent.setCaretPosition(lastResult.start);
		textComponent.moveCaretPosition(lastResult.end);
	    }
	}
    }

    private Result search(int start, String pattern, String text) {
	if (regExp.isSelected()) {
	    Matcher matcher = 
		Pattern.compile(pattern, 
				caseSensitive.isSelected() ? 
				0 : Pattern.CASE_INSENSITIVE).matcher(text.subSequence(start, text.length()));
	    if (matcher.find()) {
		return new Result(start + matcher.start(), start + matcher.end());
	    } else {
		return null;
	    }
	} else {
	    if (!caseSensitive.isSelected()) {
		text = text.toLowerCase();
		pattern = pattern.toLowerCase();
	    }
	    int result = text.indexOf(pattern, start);
	    if (result == -1) {
		return null;
	    } else {
		return new Result(result, result+pattern.length());
	    }
	}
    }

    private void noMoreHits() {
	String restartAt = up.isSelected() ? "end" : "beginning";
	switch (JOptionPane.showConfirmDialog(this, "Search string not found. Search from "+restartAt+"?", 
					      "String not found", JOptionPane.YES_NO_OPTION)) {
	case JOptionPane.YES_OPTION: 
	    textComponent.setCaretPosition(up.isSelected() ? 
					   textComponent.getText().length()-1 : 0);
	    find();
		    break;
	case JOptionPane.NO_OPTION: 
	default:
	    return;
	}
    }

}

⌨️ 快捷键说明

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