Now For Something Useful
Prev | Chapter 13. Macro Basics | Next

## Now For Something Useful

Here is a macro that inserts the path of the current buffer in the text:

    String newText = buffer.getPath();
    textArea.setSelectedText(newText);

Unlike in our first macro example, here we are calling class methods on particular objects. First, we call `getPath()` on the current Buffer object to get the full path of the text file currently being edited. Next, we call `setSelectedText()` on the current text display component, specifying the text to be inserted as a parameter.

In precise terms, the `setSelectedText()` method substitutes the contents of the `String` parameter for a range of selected text that includes the current caret position. If no text is selected at the caret position, the effect of this operation is simply to insert the new text at that position.

Here's a few alternatives to the full file path that you could use to insert various useful things:

    // the file name (without full path)
    String newText = buffer.getName();

    // today's date
    import java.text.DateFormat;

    String newText = DateFormat.getDateInstance()
        .format(new Date());

    // a line count for the current buffer
    String newText = "This file contains "
        + textArea.getLineCount() + " lines.";

Here are brief comments on each:

- In the first, the call to `getName()` invokes another method of the Buffer class.

- The syntax of the second example chains the results of several methods. You could write it this way:

      import java.text.DateFormat;
      Date d = new Date();
      DateFormat df = DateFormat.getDateInstance();
      String result = df.format(d);

  Taking the pieces in order:

  - A Java `Date` object is created using the `new` keyword. The empty parenthesis after `Date` signify a call on the constructor method of `Date` having no parameters; here, a `Date` is created representing the current date and time.

  - `DateFormat.getDateInstance()` is a static method that creates and returns a `DateFormat` object. As the name implies, `DateFormat` is a Java class that takes `Date` objects and produces readable text. The method `getDateInstance()` returns a `DateFormat` object that parses and formats dates. It will use the default locale or text format specified in the user's Java installation.

  - Finally, `DateFormat.format()` is called on the new `DateFormat` object using the `Date` object as a parameter. The result is a `String` containing the date in the default locale.

  - Note that the `Date` class is contained in the `java.util` package, so an explicit import statement is not required. However, `DateFormat` is part of the `java.text` package, which is not automatically imported, so an explicit `import` statement must be used.

- The third example shows three items of note:

  - `getLineCount()` is a method in jEdit's JEditTextArea class. It returns an `int` representing the number of lines in the current text buffer. We call it on `textArea`, the pre-defined, current JEditTextArea object.

  - The use of the `+` operator (which can be chained, as here) appends objects and string literals to return a single, concatenated `String`.

Prev | Up | Next
BeanShell Dynamic Typing | Home | Chapter 14. A Dialog-Based Macro