86 lines
2.8 KiB
Java
86 lines
2.8 KiB
Java
//: gui/BeanDumper.java
|
|
// Introspecting a Bean.
|
|
import javax.swing.*;
|
|
import java.awt.*;
|
|
import java.awt.event.*;
|
|
import java.beans.*;
|
|
import java.lang.reflect.*;
|
|
import static net.mindview.util.SwingConsole.*;
|
|
|
|
public class BeanDumper extends JFrame {
|
|
private JTextField query = new JTextField(20);
|
|
private JTextArea results = new JTextArea();
|
|
public void print(String s) { results.append(s + "\n"); }
|
|
public void dump(Class<?> bean) {
|
|
results.setText("");
|
|
BeanInfo bi = null;
|
|
try {
|
|
bi = Introspector.getBeanInfo(bean, Object.class);
|
|
} catch(IntrospectionException e) {
|
|
print("Couldn't introspect " + bean.getName());
|
|
return;
|
|
}
|
|
for(PropertyDescriptor d: bi.getPropertyDescriptors()){
|
|
Class<?> p = d.getPropertyType();
|
|
if(p == null) continue;
|
|
print("Property type:\n " + p.getName() +
|
|
"Property name:\n " + d.getName());
|
|
Method readMethod = d.getReadMethod();
|
|
if(readMethod != null)
|
|
print("Read method:\n " + readMethod);
|
|
Method writeMethod = d.getWriteMethod();
|
|
if(writeMethod != null)
|
|
print("Write method:\n " + writeMethod);
|
|
print("====================");
|
|
}
|
|
print("Public methods:");
|
|
for(MethodDescriptor m : bi.getMethodDescriptors())
|
|
print(m.getMethod().toString());
|
|
print("======================");
|
|
print("Event support:");
|
|
for(EventSetDescriptor e: bi.getEventSetDescriptors()){
|
|
print("Listener type:\n " +
|
|
e.getListenerType().getName());
|
|
for(Method lm : e.getListenerMethods())
|
|
print("Listener method:\n " + lm.getName());
|
|
for(MethodDescriptor lmd :
|
|
e.getListenerMethodDescriptors() )
|
|
print("Method descriptor:\n " + lmd.getMethod());
|
|
Method addListener= e.getAddListenerMethod();
|
|
print("Add Listener Method:\n " + addListener);
|
|
Method removeListener = e.getRemoveListenerMethod();
|
|
print("Remove Listener Method:\n "+ removeListener);
|
|
print("====================");
|
|
}
|
|
}
|
|
class Dumper implements ActionListener {
|
|
public void actionPerformed(ActionEvent e) {
|
|
String name = query.getText();
|
|
Class<?> c = null;
|
|
try {
|
|
c = Class.forName(name);
|
|
} catch(ClassNotFoundException ex) {
|
|
results.setText("Couldn't find " + name);
|
|
return;
|
|
}
|
|
dump(c);
|
|
}
|
|
}
|
|
public BeanDumper() {
|
|
JPanel p = new JPanel();
|
|
p.setLayout(new FlowLayout());
|
|
p.add(new JLabel("Qualified bean name:"));
|
|
p.add(query);
|
|
add(BorderLayout.NORTH, p);
|
|
add(new JScrollPane(results));
|
|
Dumper dmpr = new Dumper();
|
|
query.addActionListener(dmpr);
|
|
query.setText("frogbean.Frog");
|
|
// Force evaluation
|
|
dmpr.actionPerformed(new ActionEvent(dmpr, 0, ""));
|
|
}
|
|
public static void main(String[] args) {
|
|
run(new BeanDumper(), 600, 500);
|
|
}
|
|
} ///:~
|