CATEGORII DOCUMENTE |
Asp | Autocad | C | Dot net | Excel | Fox pro | Html | Java |
Linux | Mathcad | Photoshop | Php | Sql | Visual studio | Windows | Xml |
Chapter 11 introduced the Java 1.1 concept of reflection and used that feature to look up methods for a particular class - either the entire list of methods or a subset of those whose names match a keyword you provide. The magic of this is that it can automatically show you all the methods for a class without forcing you to walk up the inheritance hierarchy examining the base classes at each level. Thus, it provides a valuable timesaving tool for programming: because the names of most Java method names are made nicely verbose and descriptive, you can search for the method names that contain a particular word of interest. When you find what you think you're looking for, check the online documentation.
However, by Chapter 11 you hadn't seen the AWT, so that tool was developed as a command-line application. Here is the more useful GUI version, which dynamically updates the output as you type and also allows you to cut and paste from the output:
//: DisplayMethods.java
// Display the methods of any class inside
// a window. Dynamically narrows your search.
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.lang.reflect.*;
import java.io.*;
public class DisplayMethods extends Applet
class NameL implements TextListener
try catch (ClassNotFoundException ex)
m = cl.getMethods();
ctor = cl.getConstructors();
// Convert to an array of Strings:
n = new String[m.length + ctor.length];
for(int i = 0; i < m.length; i++)
n[i] = m[i].toString();
for(int i = 0; i < ctor.length; i++)
n[i + m.length] = ctor[i].toString();
reDisplay();
}
}
void reDisplay()
results.setText('');
if(strip.getState() == true)
for (int i = 0; i < j; i++)
results.append(
StripQualifiers.strip(rs[i]) + 'n');
else // Leave qualifiers on
for (int i = 0; i < j; i++)
results.append(rs[i] + 'n');
}
class StripL implements ItemListener
}
class SearchForL implements TextListener
}
public static void main(String[] args)
});
aFrame.add(applet, BorderLayout.CENTER);
aFrame.setSize(500,750);
applet.init();
applet.start();
aFrame.setVisible(true);
}
}
class StripQualifiers
public String getNext()
}
} catch(IOException e)
return s;
}
public static String strip(String qualified)
return s;
}
} ///:~
Some things you've seen before. As with many of the GUI programs in this book, this is created to perform both as an application and as an applet. Also, the StripQualifiers class is exactly the same as it was in Chapter 11.
The GUI contains a TextField name in which you can enter the fully-qualified class name you want to look up, and another one, searchFor, in which you can enter the optional text to search for within the list of methods. The Checkbox allows you to say whether you want to use the fully-qualified names in the output or if you want the qualification stripped off. Finally, the results are displayed in a TextArea.
You'll notice that there are no buttons or other components by which to indicate that you want the search to start. That's because both of the TextFields and the Checkbox are monitored by their listener objects. Whenever you make a change, the list is immediately updated. If you change the text within the name field, the new text is captured in class NameL. If the text isn't empty, it is used inside Class.forName( ) to try to look up the class. As you're typing, of course, the name will be incomplete and Class.forName( ) will fail, which means that it throws an exception. This is trapped and the TextArea is set to "No match". But as soon as you type in a correct name (capitalization counts), Class.forName( ) is successful and getMethods( ) and getConstructors( ) will return arrays of Method and Constructor objects, respectively. Each of the objects in these arrays is turned into a String via toString( ) (this produces the complete method or constructor signature) and both lists are combined into n, a single String array. The array n is a member of class DisplayMethods and is used in updating the display whenever reDisplay( ) is called.
If you change the Checkbox or searchFor components, their listeners simply call reDisplay( ). reDisplay( ) creates a temporary array of String called rs (for "result set"). The result set is either copied directly from n if there is no find word, or conditionally copied from the Strings in n that contain the find word. Finally, the strip Checkbox is interrogated to see if the user wants the names to be stripped (the default is "yes"). If so, StripQualifiers.strip( ) does the job; if not, the list is simply displayed.
In init( ), you might think that there's a lot of busy work involved in setting up the layout. In fact, it is possible to lay out the components with less work, but the advantage of using BorderLayouts this way is that it allows the user to resize the window and make - in particular - the TextArea larger, which means you can resize to allow you to see longer names without scrolling.
You might find that you'll keep this tool running while you're programming, since it provides one of the best "first lines of attack" when you're trying to figure out what method to call.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 664
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved