rendered paste bodyimport javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import javax.swing.text.*;
public class RegexKing implements ActionListener, KeyListener{
public static void main(String[] args) {
new RegexKing();
}
public RegexKing(){
initGUI();
setupGUI();
displayFrame();
}
public void initGUI(){
// init
frame = new JFrame("Regex King");
container = new JPanel();
inputArea = new JTextArea();
regexField =new JTextField();
outputArea = new JTextArea();
quickMatch = new JCheckBox("Attempt Match on Change");
matchButton = new JButton("Match");
inputScroll = new JScrollPane(inputArea);
outputScroll = new JScrollPane(outputArea);
// setup
outputArea.setEditable(false);
matchButton.addActionListener(this);
regexField.addKeyListener(this);
// key binding
KeyStroke key = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, Event.SHIFT_MASK, false);
Action keyact = new AbstractAction(){
public void actionPerformed(ActionEvent e){
doMatch();
}
};
container.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(key, "DO_MATCH");
container.getActionMap().put("DO_MATCH", keyact);
}
public void setupGUI(){
gbl = new GridBagLayout();
gbc = new GridBagConstraints();
container.setLayout(gbl);
setInsets(2, 2, 2, 2);
gbcf = GridBagConstraints.BOTH;
setComp(inputScroll, 10, 10, 20, 1, 1, 1);
setComp(quickMatch, 10, 20, 1, 1, 1, .1);
setComp(matchButton, 20, 20, 1, 1, 1, .1);
setComp(regexField, 10, 30, 20, 1, 1, .1);
setComp(outputScroll, 10, 40, 20, 1, 1, 1);
}
public void setComp(JComponent comp, int gx, int gy, int gw, int gh, double wx, double wy){
gbc.gridx = gx;
gbc.gridy = gy;
gbc.gridwidth = gw;
gbc.gridheight = gh;
gbc.weightx = wx;
gbc.weighty = wy;
gbc.fill = gbcf;
gbl.setConstraints(comp, gbc);
container.add(comp);
}
public void setInsets(int top, int bottom, int left, int right){
gbc.insets.top = top;
gbc.insets.bottom = bottom;
gbc.insets.left = left;
gbc.insets.right = right;
}
public void displayFrame(){
frame.setContentPane(container);
frame.setSize(500, 500);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public void keyPressed(KeyEvent e){
if(quickMatch.isSelected() == true){
doMatch();
}
}
public void keyReleased(KeyEvent e){
}
public void keyTyped(KeyEvent e){
}
public void actionPerformed(ActionEvent evt) {
if(evt.getSource() == matchButton){
doMatch();
}
}
public void doMatch(){
outputArea.setText("\nAttempting Match...");
inputArea.getHighlighter().removeAllHighlights();
try{
String inputText = inputArea.getText();
Pattern pattern = Pattern.compile(regexField.getText());
Matcher matcher = pattern.matcher(inputText);
int matchCount = 0;
while(matcher.find()){
matchCount++;
outputArea.append("\n\nMatch #" + matchCount);
for(int i = 0; i < matcher.groupCount() + 1; i++){
outputArea.append("\nGroup #" + i + ": " + matcher.group(i));
outputArea.append(" , " + matcher.end(i));
inputArea.getHighlighter().addHighlight(
matcher.start(i), matcher.end(i), DefaultHighlighter.DefaultPainter);
}
}
} catch(Exception exc){
outputArea.append("\nEXCEPTION THROWN");
//exc.printStackTrace();
}
outputArea.append("\n\nFinished.\n");
}
GridBagLayout gbl;
GridBagConstraints gbc;
int gbcf;
JFrame frame;
JPanel container;
JTextArea inputArea;
JTextField regexField;
JTextArea outputArea;
JScrollPane inputScroll;
JScrollPane outputScroll;
JCheckBox quickMatch;
JButton matchButton;
}