Including message(), there are five static
        methods in the Macros class that
        allow you to converse easily with your macros. They all encapsulate
        calls to methods of the Java platform's
        JOptionPane class.
| public static void
                        message( | Component comp, | 
| String
                        message ); | 
| public static void
                        error( | Component comp, | 
| String
                        message ); | 
| public static String
                        input( | Component comp, | 
| String
                        prompt ); | 
| public static String
                        input( | Component comp, | 
| String prompt, | |
| String
                        defaultValue ); | 
| public static int
                        confirm( | Component comp, | 
| String prompt, | |
| int buttons ); | 
The format of these four declarations
        provides a concise reference to the way in which the methods may be
        used. The keyword public means that the method can
        be used outside the Macros class. The
        alternatives are private and
        protected. For purposes of BeanShell, you just have
        to know that BeanShell can only use public methods of other Java
        classes. The keyword static we have already
        discussed. It means that the method does not operate on a particular
        object. You call a static function using the name of the class (like
        Macros) rather
        than the name of a particular object (like view). The
        third word is the type of the value returned by the method. The keyword
        void is Java's way of saying the the method does
        not have a return value.
The error() method works just like
        message() but displays an error icon in the message
        box. The input() method furnishes a text field for
        input, an OK button and a
        Cancel button. If Cancel is
        pressed, the method returns null. If
        OK is pressed, a String
        containing the contents of the text field is returned. Note that there
        are two forms of the input() method; the first form
        with two parameters displays an empty input field, the other forms lets
        you specify an initial, default input value.
For those without Java experience, it is important to know that
        null is not the same as an
        empty, “zero-length” String. It is
        Java's way of saying that there is no object associated with this
        variable. Whenever you seek to use a return value from
        input() in your macro, you should test it to see if
        it is null. In most cases, you will want to exit
        gracefully from the script with a return statement,
        because the presence of a null value for an input variable usually means
        that the user intended to cancel macro execution. BeanShell will
        complain if you call any methods on a null
        object.
The confirm() method in the Macros class is a
        little more complex. The buttons parameter has an
        int type, and the usual way to supply a value is
        to use one of the predefined values taken from Java's
        JOptionPane class. You can choose among
        JOptionPane.YES_NO_OPTION,
        JOptionPane.YES_NO_CANCEL_OPTION, or
        JOptionPane.OK_CANCEL_OPTION. The return value of
        the method is also an int, and should be tested
        against the value of other predefined constants:
        JOptionPane.YES_OPTION,
        JOptionPane.NO_OPTION,
        JOptionPane.OK_OPTION or
        JOptionPane.CANCEL_OPTION.
We've looked at using Macros.message(). To
        use the other methods, you would write something like the
        following:
Macros.error(view, "Goodbye, cruel world!");
String result = Macros.input(view, "Type something here.");
String result = Macros.input(view, "When were you born?",
    "I don't remember, I was very young at the time");
int result = Macros.confirm(view, "Do you really want to learn"
    + " about BeanShell?",JOptionPane.YES_NO_OPTION);
    In the last three examples, placing the word
        String or int before the
        variable name result tells BeanShell that the
        variable refers to an integer or a String object,
        even before a particular value is assigned to the variable. In
        BeanShell, this declaration of the
        type of result is not
        necessary; BeanShell can figure it out when the macro runs. This can be
        helpful if you are not comfortable with specifying types and classes;
        just use your variables and let BeanShell worry about it.
Note that macros are not limited to using these methods for presenting a user interface. In fact, full-blown user interfaces using the Java Swing APIs are also possible, and will be covered later on in Chapter 14, A Dialog-Based Macro.