|
CSP for Java (JCSP) 1.0-rc7 |
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--jcsp.awt.ActiveTextEnterField
A specialisation of ActiveTextField
that writes text to
the event channel only when ENTER or ESCAPE is pressed.
______________________________________ | | | ___________________ | | | | ______ | | | |-<-| | |event
| | |->-| anon |---|----->----- | | |->-|______| | (java.lang.String) | | | | | | | |componentEvent
| | |--------------|----->----- | | | | (java.awt.event.ComponentEvent) | | | | | | | |focusEvent
| | |--------------|----->-----configure
| | | | (java.awt.event.FocusEvent) ----->-----|---|ActiveTextField
| | (java.lang.String) | | | |keyEvent
(java.lang.Boolean) | | |--------------|----->----- (ActiveTextField.Configure
) | | | | (java.awt.event.KeyEvent) (java.lang.Object) | | | | | | | |mouseEvent
| | |--------------|----->----- | | | | (java.awt.event.MouseEvent) | | | | | | | |mouseMotionEvent
| | |--------------|----->----- | | | | (java.awt.event.MouseEvent) | |___________________| | | | | ActiveTextEnterField | |______________________________________|
ActiveTextField
,
configured with channels for event notification and configuration. The event channels
should be connected to one or more application-specific server processes (instead
of registering a passive object as a Listener to this component).
All channels are optional. The configure and event channels are settable from a constructor.
The difference between this class and ActiveTextField is that text is only written to the event channel when ENTER or ESCAPE is pressed on the text field (not on every keystroke). When this happens, the text field is temporarilly disabled for (by default) half a second; this is to give feedback to the user. The disable period can be changed by calling the setDisableTime method before the process is run.
The internal ActiveTextField can be extracted with the getActiveTextField method. Channels can then be added to notify the occurrence of any other type of Event the ActiveFrame generates. This is done by calling its appropriate addXXXEventChannel method (before the process is run). As many channels can be added as are needed.
Messages can be sent down the configure channel at any time to configure the component. See the table below for details.
All channels are managed by independent internal handler processes. It is, therefore, safe for a serial application process both to service an event channel and configure the component -- no deadlock can occur.
IMPORTANT: it is essential that the output channels from this process are always serviced -- otherwise the Java Event Thread will be blocked and the GUI will stop responding. The simplest way to guarantee this is to use channels configured with overwriting buffers. For example:
final One2OneChannel myTextFieldEvent = One2OneChannel.create (new OverWriteOldestBuffer (n)); final ActiveTextEnterField myTextEnterField = new ActiveTextEnterField (null, myTextFieldEvent, "Edit Me");This will ensure that the Java Event Thread will never be blocked. Slow or inattentive readers may miss rapidly generated events, but the n most recent events will always be available.
Input Channels | ||
---|---|---|
configure | String | Set the text in this ActiveTextEnterField to the value of the String |
Boolean |
|
|
ActiveTextField.Configure | Invoke the user-defined Configure.configure method on the textField. | |
otherwise | Append the toString form of the object to the text in this ActiveTextField. | |
Output Channels | ||
event | String | The text in the ActiveTextEnterField (whenever ENTER or ESCAPE is pressed) |
componentEvent | ComponentEvent | See the
getActiveTextField .addComponentEventChannel method. |
focusEvent | FocusEvent | See the
getActiveTextField .addFocusEventChannel method. |
keyEvent | KeyEvent | See the
getActiveTextField .addKeyEventChannel method. |
mouseEvent | MouseEvent | See the
getActiveTextField .addMouseEventChannel method. |
mouseMotionEvent | MouseEvent | See the
getActiveTextField .addMouseMotionEventChannel method. |
import jcsp.lang.*; import jcsp.util.*; import jcsp.awt.*; import java.awt.*; public class ActiveTextEnterFieldExample { public static void main (String argv[]) { final ActiveClosureFrame frame = new ActiveClosureFrame ("ActiveTextEnterField Example"); final Any2OneChannel event = Any2OneChannel.create (new OverWriteOldestBuffer (10)); final String[] string = {"Entia Non Sunt Multiplicanda Praeter Necessitatem", "Less is More ... More or Less", "Everything we do, we do it to you", "Race Hazards - What Rice Hozzers?", "Cogito Ergo Occam"}; final String goodbye = "Goodbye World"; final ActiveTextEnterField[] activeText = new ActiveTextEnterField[string.length]; for (int i = 0; i < string.length; i++) { activeText[i] = new ActiveTextEnterField (null, event, string[i]); } Panel panel = new Panel (new GridLayout (string.length, 1)); for (int i = 0; i < string.length; i++) { panel.add (activeText[i].getActiveTextField ()); } final Frame realFrame = frame.getActiveFrame (); realFrame.setBackground (Color.green); realFrame.add (panel); realFrame.pack (); realFrame.setVisible (true); new Parallel ( new CSProcess[] { frame, new Parallel (activeText), new CSProcess () { public void run () { boolean running = true; while (running) { String s = (String) event.read (); System.out.println (s); running = (! s.equals (goodbye)); } realFrame.setVisible (false); System.exit (0); } } } ).run (); } }
ActiveTextField
,
TextField
,
ComponentEvent
,
FocusEvent
,
KeyEvent
,
MouseEvent
,
OverWriteOldestBuffer
Constructor Summary | |
ActiveTextEnterField(AltingChannelInput configure,
ChannelOutput event)
Constructs a new ActiveTextEnterField with configuration and event channels, but no initial text. |
|
ActiveTextEnterField(AltingChannelInput configure,
ChannelOutput event,
String s)
Constructs a new ActiveTextEnterField with configuration and event channels, initial text and default width. |
|
ActiveTextEnterField(AltingChannelInput configure,
ChannelOutput event,
String s,
int columns)
Constructs a new ActiveTextEnterField with configuration and event channels, initial text and width. |
Method Summary | |
ActiveTextField |
getActiveTextField()
This is used to get the ActiveTextField within this component so that it can be configured (using TextField or
ActiveTextField methods) or added to some container. |
void |
run()
The main body of this process. |
void |
setConfigureChannel(AltingChannelInput configure)
Sets the configuration channel for this ActiveTextEnterField. |
void |
setDisableTime(long disableTime)
This is used to set the time during which the text field is disabled after an ENTER or ESCAPE has been entered. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
public ActiveTextEnterField(AltingChannelInput configure, ChannelOutput event)
configure
- the AltingChannelInput for configuration events
-- can be null if no configuration is required.event
- the current text will be output when the ENTER or ESCAPE key is pressed
-- can be null if no notification is required.public ActiveTextEnterField(AltingChannelInput configure, ChannelOutput event, String s)
configure
- the AltingChannelInput for configuration events
-- can be null if no configuration is required.event
- the current text will be output when the ENTER or ESCAPE key is pressed
-- can be null if no notification is required.s
- the initial text displayed in the field.public ActiveTextEnterField(AltingChannelInput configure, ChannelOutput event, String s, int columns)
configure
- the AltingChannelInput for configuration events
-- can be null if no configuration is required.event
- the current text will be output when the ENTER or ESCAPE key is pressed
-- can be null if no notification is required.s
- the initial text displayed in the field.columns
- the width of the field.Method Detail |
public void setConfigureChannel(AltingChannelInput configure)
configure
- the channel for configuration events
-- can be null if no configuration is required.public void setDisableTime(long disableTime)
NOTE: This may only be called before this process is run.
disableTime
- the disable time after an ENTER or ESCAPE.public ActiveTextField getActiveTextField()
TextField
or
ActiveTextField
methods) or added to some container.
For example, event channels can be added by invoking
getActiveTextField().addXXXEventChannel(...).
NOTE: such configuration must be finished before this process is run.
NOTE: do not use this method to set a configure channel - use an appropriate
constructor or setConfigureChannel
.
public void run()
run
in interface CSProcess
|
CSP for Java (JCSP) 1.0-rc7 |
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |