An operation consists of two parts: a filter and an action. The filter is "when," and the action is "what." For example, consider an operation that shows a window when the user clicks a button. In this case, the operation is defined for the button, with an event filter of "Action Event," and an action of "Show Window."
Operations must be associated with a specific component. Operations defined for a given component can be triggered only by events and messages that originate from the component itself. More than one operation can be defined for each component. Operations are ordered, so that if two operations match the same event, the operation closer to the beginning of the list is invoked first.
The operations editor has Insert and Delete buttons:
Each time you click Insert, an operation is added to the list. Visual Java automatically assigns a unique name for each operation you create. You can edit that name in the Op Name field. Note that operation names must be unique within a group.
To create an
operation:
There are four aspects to an event filter:
id
key
modifier
click
count
id
. The
id
determines the type of event for the
filter. The key
, modifiers
, and
click
count
fields are used to further
narrow the scope of the filter for a given event id
.
For example, the set of events selected by the "Key Down"
event id
can be further narrowed by specifying
a key
filter of "C." This can be narrowed
even further by specifying the modifier
"Control." This filter will be triggered when the
operation's component has the keyboard focus and the user
presses Control-C.
Available modifiers depend on the event id
.
For key
events, the modifiers are:
The click count
element is important only for
mouse events. To catch a double-click, the event
id
is "Mouse Down" and the click
count
is 2.
A message filter has three parts:
name
type
target
name
name
must be specified, but the type
and
target
name
can be left blank.
The type
and target
name
are additional filters within the scope
of the message name.
The component for which the operation is defined must be the originator of the message, or the filter will not be triggered. For example, you might have a custom subgroup inside your group and that subgroup sends out "Apply" messages. To trigger off of the "Apply" message, you should select the subgroup and then edit its operations attribute. Then define an operation that has a message filter with the name "Apply."
Common actions and custom code actions are not treated quite the same. Common actions are live both while the application is running and while you are building the application. Custom code actions are live only while the program is running, not while you are building the application. Future versions of Visual Java may support live code actions while building the application.
The exit action is not live while building the
application because it would cause Visual Java to exit
and unsaved changes would be lost.
If you choose the Constant from the menu, you can statically set the value using the provided editors, text fields, and so on.
If you choose Event Arg from the menu, the
event
arg
must be the same type
as the attribute that you have selected. For example,
checkboxes have Boolean event arguments. The
enabled
attribute defined for components is
also a Boolean. Therefore, you can legally choose the
event arg
option for the checkbox as long as
you select the enabled
attribute for the
target component. Defining an action in this way will
cause the checkbox to toggle the component between the
enabled and disabled states.
The code you enter in the Execute Code area is saved in the
.gui
file, and later generated into the
<ProjectName>Ops.java
file.
For a group named MyProg
:
MyProg group;
MyProgRoot gui;
Message msg;
Event evt;
The following is a code segment that shows the window "frame1" when a button is clicked:
gui.frame1.set("visible", Boolean.true);
The following is a code segment that shows or hides the window "frame1" depending on the state of a checkbox:
gui.frame1.set("visible", evt.arg);
import java.net.*; URL url = new URL(gui.urlTF.get("text")); URLConnection connection = url.openConnection();The following code is generated into the <ProjectName>
Ops.java
file.
Note the position of the import statement.
import java.io.net.*; private void handleCallback(int index, Message msg, Event evt) { switch (index) { case 1: { group.exit(); } break; case 2: { URL url = new URL(gui.urlTF.get("text")); URLConnection connection = url.openConnection(); } } }
getBody()
call allows you to access
methods of the classes on which shadow classes are based.
For example, if you want to determine which item is
selected in a ListShadow
object, enter:
String string_selected=((List) listShadow.getBody()).getSelectedItem();In general, it is better to use the shadow class for the
get()
and set()
methods rather
than getBody()
which accesses the AWT
component directly. The shadow class methods
utilize workarounds and optimizations. For example:
String string_selected=listShadow.get("selectedItem");
group
class provides a method for
accessing the applet. For example, if in your operation
you need to access a parameter supplied to the applet (in
this case the blink rate), enter:
Applet ap = getApplet(); String param = ap.getParameter("blinkrate");
See also: