这次学的内容是java中所有控件的事件Listener,根据控件查找可用的事件。
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.reflect.Method;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class ShowAddListeners extends JFrame
{
private JTextField name=new JTextField(25);
private JTextArea results=new JTextArea(40,65);
private static Pattern addListener= Pattern.compile("(add\\w+?Listener\\(.*?\\))");
private static Pattern qualifier=Pattern.compile("\\w+\\.");
class NameL implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
// TODO 自动生成的方法存根
String nm=name.getText().trim();
if(nm.length()==0)
{
results.setText("No match");
// System.out.println(1);
return;
}
Class<?>kind;
try
{
kind=Class.forName("javax.swing."+nm);
}
catch(ClassNotFoundException ex)
{
// System.out.println(nm);
results.setText("No match");
return;
}
Method[] methods=kind.getMethods();
results.setText(" ");
for(Method m : methods)
{
Matcher matcher=addListener.matcher(m.toString());
if(matcher.find())
results.append(qualifier.matcher(matcher.group(1)).replaceAll("")+"\n");
}
}
}
public ShowAddListeners()
{
NameL nameListener=new NameL();
name.addActionListener(nameListener);
JPanel top=new JPanel();
top.add(new JLabel("Swing class name (press Enter):"));
top.add(name);
this.add(BorderLayout.NORTH,top);
this.add(new JScrollPane(results));
name.setText("JTextArea");
nameListener.actionPerformed(new ActionEvent("",0,""));
}
public static void main(String[] args)
{
GeneralCodes.run(new ShowAddListeners(), 500, 400);
}
}
在name JTextField中输入要查找的Swing组件类的名称。查找的结果将使用正则表达式进行匹配,最终结果显示在JTextArea中。
注意的是在查找中必须输入正确的组件类名称,还要注意区分大小写。