FileDocCategorySizeDatePackage
REDemo.javaAPI DocExample3780Sun Feb 08 21:33:42 GMT 2004None

REDemo

public class REDemo extends JPanel
Standalone Swing GUI application for demonstrating REs.
TODO: Show the entire match, and $1 and up as captures that matched.
author
Ian Darwin, http://www.darwinsys.com/
version
#Id$

Fields Summary
protected Pattern
pattern
protected Matcher
matcher
protected JTextField
patternTF
protected JTextField
stringTF
protected JCheckBox
compiledOK
protected JRadioButton
match
protected JRadioButton
find
protected JRadioButton
findAll
protected JTextField
matchesTF
Constructors Summary
public REDemo()
Construct the REDemo object including its GUI

		super();

		JPanel top = new JPanel();
		top.add(new JLabel("Pattern:", JLabel.RIGHT));
		patternTF = new JTextField(20);
		patternTF.getDocument().addDocumentListener(new PatternListener());
		top.add(patternTF);
		top.add(new JLabel("Syntax OK?"));
		compiledOK = new JCheckBox();
		top.add(compiledOK);

		ChangeListener cl = new ChangeListener() {
			public void stateChanged(ChangeEvent ce) {
				tryMatch();
			}
		};
		JPanel switchPane = new JPanel();
		ButtonGroup bg = new ButtonGroup();
		match = new JRadioButton("Match");
		match.setSelected(true);
		match.addChangeListener(cl);
		bg.add(match);
		switchPane.add(match);
		find = new JRadioButton("Find");
		find.addChangeListener(cl);
		bg.add(find);
		switchPane.add(find);
		findAll = new JRadioButton("Find All");
		findAll.addChangeListener(cl);
		bg.add(findAll);
		switchPane.add(findAll);

		JPanel strPane = new JPanel();
		strPane.add(new JLabel("String:", JLabel.RIGHT));
		stringTF = new JTextField(20);
		stringTF.getDocument().addDocumentListener(new StringListener());
		strPane.add(stringTF);
		strPane.add(new JLabel("Matches:"));
		matchesTF = new JTextField(3);
		strPane.add(matchesTF);

		setLayout(new GridLayout(0, 1, 5, 5));
		add(top);
		add(strPane);
		add(switchPane);
	
Methods Summary
public static voidmain(java.lang.String[] av)
"main program" method - construct and show

		JFrame f = new JFrame("REDemo");
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		REDemo comp = new REDemo();
		f.setContentPane(comp);
		f.pack();
		f.setLocation(200, 200);
		f.setVisible(true);
	
protected voidsetMatches(boolean b)

		if (b)
			matchesTF.setText("Yes");
		else
			matchesTF.setText("No");
	
protected voidsetMatches(int n)

		matchesTF.setText(Integer.toString(n));
	
protected voidtryCompile()

		pattern = null;
		try {
			pattern = Pattern.compile(patternTF.getText());
			matcher = pattern.matcher("");
			compiledOK.setSelected(true);
		} catch (PatternSyntaxException ex) {
			compiledOK.setSelected(false);
		}
	
protected booleantryMatch()

		if (pattern == null)
			return false;
		matcher.reset(stringTF.getText());
		if (match.isSelected() && matcher.matches()) {
			setMatches(true);
			return true;
		}
		if (find.isSelected() && matcher.find()) {
			setMatches(true);
			return true;
		}
		if (findAll.isSelected()) {
			int i = 0;
			while (matcher.find()) {
				++i;
			}
			if (i > 0) {
				setMatches(i);
				return true;
			}
		}
		setMatches(false);
		return false;