java Swing实现的正则表达式测试工具详解编程语言

import java.awt.GridLayout; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
import java.util.regex.PatternSyntaxException; 
import javax.swing.*; 
import javax.swing.event.ChangeEvent; 
import javax.swing.event.ChangeListener; 
import javax.swing.event.DocumentEvent; 
import javax.swing.event.DocumentListener; 
 
/** 
 * Standalone Swing GUI application for demonstrating REs. <br/>TODO: Show the 
 * entire match, and $1 and up as captures that matched. 
 */ 
 
public class GuiDemo extends JPanel { 
 
    protected Pattern pattern; 
    protected Matcher m; 
    protected JTextField pattTF, strTF; 
    protected JCheckBox compiledOK; 
    protected JRadioButton match, find, findAll; 
    protected JTextField mTF; 
 
    /** 
     * "main program" method - construct and show 
     */ 
    public static void main(String[] av) { 
 
        JFrame f = new JFrame("GuiDemo"); 
 
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        GuiDemo comp = new GuiDemo(); 
        f.setContentPane(comp); 
        f.pack(); 
        f.setLocation(200, 200); 
        f.setVisible(true); 
    } 
 
    /** 
     * Construct the REDemo object including its GUI 
     */ 
    public GuiDemo() { 
        super(); 
 
        JPanel top = new JPanel(); 
        top.add(new JLabel("Pattern:", JLabel.RIGHT)); 
        pattTF = new JTextField(20); 
        pattTF.getDocument().addDocumentListener(new PattListener()); 
        top.add(pattTF); 
        top.add(new JLabel("Syntax OK?")); 
        compiledOK = new JCheckBox(); 
        top.add(compiledOK); 
 
        ChangeListener cl = new ChangeListener() { 
 
            @Override 
            public void stateChanged(ChangeEvent ce) { 
                tryToMatch(); 
            } 
        }; 
 
        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)); 
        strTF = new JTextField(20); 
        strTF.getDocument().addDocumentListener(new StrListener()); 
        strPane.add(strTF); 
        strPane.add(new JLabel("Matches:")); 
        mTF = new JTextField(3); 
        strPane.add(mTF); 
 
        setLayout(new GridLayout(0, 1, 5, 5)); 
        add(top); 
        add(strPane); 
        add(switchPane); 
    } 
 
    protected void setMatch(boolean b) { 
        if (b) { 
            mTF.setText("Yes"); 
        } else { 
            mTF.setText("No"); 
        } 
    } 
 
    protected void setMatch(int n) { 
        mTF.setText(Integer.toString(n)); 
    } 
 
    protected void tryToCompile() { 
        pattern = null; 
        try { 
            pattern = Pattern.compile(pattTF.getText()); 
            m = pattern.matcher(""); 
            compiledOK.setSelected(true); 
        } catch (PatternSyntaxException ex) { 
            compiledOK.setSelected(false); 
        } 
    } 
 
    protected boolean tryToMatch() { 
        if (pattern == null) { 
            return false; 
        } 
        m.reset(strTF.getText()); 
        if (match.isSelected() && m.matches()) { 
            setMatch(true); 
            return true; 
        } 
        if (find.isSelected() && m.find()) { 
            setMatch(true); 
            return true; 
        } 
        if (findAll.isSelected()) { 
            int i = 0; 
            while (m.find()) { 
                ++i; 
            } 
            if (i > 0) { 
                setMatch(i); 
                return true; 
            } 
        } 
        setMatch(false); 
        return false; 
    } 
 
    /** 
     * Any change to the pattern tries to compile the result. 
     */ 
    class PattListener implements DocumentListener { 
 
        @Override 
        public void changedUpdate(DocumentEvent ev) { 
            tryToCompile(); 
        } 
 
        @Override 
        public void insertUpdate(DocumentEvent ev) { 
            tryToCompile(); 
        } 
 
        @Override 
        public void removeUpdate(DocumentEvent ev) { 
            tryToCompile(); 
        } 
    } 
 
    /** 
     * Any change to the input string tries to match the result 
     */ 
    class StrListener implements DocumentListener { 
 
        @Override 
        public void changedUpdate(DocumentEvent ev) { 
            tryToMatch(); 
        } 
 
        @Override 
        public void insertUpdate(DocumentEvent ev) { 
            tryToMatch(); 
        } 
 
        @Override 
        public void removeUpdate(DocumentEvent ev) { 
            tryToMatch(); 
        } 
    } 
}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/11037.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论