📄 customitem.java
字号:
* internal location. Initially, traversal is outside the item. The
* first call to the <code>traverse()</code> method indicates
* that traversal has
* entered the item. Subsequent calls to this method indicate that
* traversal is occurring within this item. Traversal remains within the
* item until the <code>traverseOut</code> method is called.
* The <code>CustomItem</code> must keep
* track of its traversal state so that it can distinguish traversal
* <em>entering</em> the item from traversal <em>within</em> the item.
* </p>
*
* <p>When traversal enters the item, the traversal code
* should initialize its internal traversal
* location to the "first" location appropriate
* for the item's structure and the traversal direction.
* As an example of the latter policy, if
* the traversal direction is <code>DOWN</code>, the initial
* location should be the
* topmost internal element of the item. Similarly, if the traversal
* direction is <code>UP</code>, the initial location should be the
* bottommost element of the item.
* The <code>CustomItem</code>
* should still choose the "first" location appropriately
* even if its primary axis is orthogonal to the
* axis of traversal. For example, suppose the traversal
* mode supported is <code>TRAVERSE_VERTICAL</code> but the
* <code>CustomItem</code> is structured as a horizontal row
* of elements. If the initial traversal direction is
* <code>DOWN</code>, the initial location might be the leftmost
* element, and if the initial traversal direction is
* <code>UP</code>, the initial location might be the rightmost
* element.</p>
*
* <p>Traversal may enter the item without any specific direction, in
* which case the traversal direction will be <code>NONE</code>. This may
* occur if the user selects the item directly (e.g., with a pointing
* device), or if the item gains the focus because its containing
* <code>Form</code> has become current. The <code>CustomItem</code>
* should choose a default traversal location. If the
* <code>CustomItem</code> had been traversed to previously, and if it is
* appropriate for the user interface of the <code>CustomItem</code>, the
* previous traversal location should be restored.</p>
*
* <p>When traversal occurs within
* the item, the internal traversal location must be moved to the next
* appropriate region in the direction of traversal. The item must report
* its updated internal traversal location in the
* <code>visRect_inout</code> return parameter as described below and
* return <code>true</code>. The item will typically provide a highlight
* to display the internal traversal location to the user. Thus, the item
* will typically also request repaints of the old and new traversal
* locations after each traversal event. There is no requirement that the
* area the item requests to be repainted is the same as the area returned
* in the <code>visRect_inout</code> rectangle. The system will combine
* any repaint requests with any additional repainting that may occur as a
* result of scrolling.</p>
*
* <p>The <code>traverse()</code> method may be called with a direction of
* <code>NONE</code> when the traversal is already within the
* <code>CustomItem</code>. This will occur in response to the
* <code>CustomItem</code> subclass code having called the
* <code>invalidate()</code> method. In this case, the
* <code>CustomItem</code> should simply return its current notion of the
* traversal location. This mechanism is useful if the
* <code>CustomItem</code> needs to update the traversal location
* spontaneously (that is, not in response to a traversal event), for
* example, because of a change in its contents.</p>
*
* <p>If the internal traversal location is such that the traversal event
* would logically cause traversal to proceed out of the item, the
* item should return <code>false</code> from the
* <code>traverse()</code> method. For
* example, if the current traversal location is the bottommost internal
* element of the item, and the traversal direction is
* <code>DOWN</code>, the
* <code>traverse()</code> method should simply return
* <code>false</code>. In this
* case the method need not update the values in the
* <code>visRect_inout</code> array. The item must leave its internal
* traversal location unchanged, and it should not request a repaint to
* update its highlighting. It should defer these actions until the
* <code>traverseOut()</code> method is called.
* The system will call the <code>traverseOut()</code>
* method when traversal actually leaves the item. The system might not
* call the <code>traverseOut()</code> method, even if
* <code>traverse()</code> has returned
* <code>false</code>, if this item is at the edge of the
* <code>Form</code> or there is
* no other item beyond to accept the traversal.
* Even if the <code>traverse()</code>
* method returns <code>false</code>, the traversal location is still
* within this item.
* It remains within this item until <code>traverseOut()</code> is
* called.</p>
*
* <p>Note the subtle distinction here between the initial
* <code>traverse()</code> call
* signifying <em>entry</em> into the item and subsequent calls signifying
* traversal <em>within</em> the item. A return value of
* <code>false</code> to the initial call indicates that this item
* performs no internal traversal at all, whereas a return of
* <code>false</code> to subsequent calls indicates that traversal is
* within this item and may now exit. </p>
*
* <p>The width and height of the rectangle returned in the
* <code>visRect_inout</code> array are used by the
* <code>Form</code> for scrolling
* and painting purposes. The <code>Form</code> must always
* position the item so that
* the upper left corner of this rectangle, as specified by
* the <code>(x,y)</code>
* position, is visible. In addition, the item may also specify a width
* and height, in which case the <code>Form</code> will
* attempt to position the item so
* that as much of this rectangle as possible is visible. If the width
* and height are larger than the size of the viewport, the bottom and
* right portions of this rectangle will most likely not be visible to the
* user. The rectangle thus returned will typically denote the size and
* location of one of the item's internal elements, and it will also
* typically (though not necessarily) correspond to where the element's
* highlight will be painted. Width and height values of zero are legal
* and are not treated specially. Negative values of width and height are
* treated as if they were zero.</p>
*
* <p>There is no requirement on the location of the rectangle returned in
* the <code>visRect_inout</code> array with respect to the traversal
* direction. For example, if the <code>CustomItem</code> implements
* internal scrolling, a traversal direction of <code>DOWN</code> may
* cause the item's contents to scroll upwards far enough so that the
* rectangle returned may be above its old location.
* <code>CustomItem</code> subclasses must ensure that continued traversal
* in one direction will eventually reach the edge of the item and then
* traverse out by returning <code>false</code> from this method.
* <code>CustomItems</code> must not implement "wraparound"
* behavior (for example, traversing downwards from the bottommost element
* moves the traversal location to the topmost element) because this will
* trap the traversal within the item.</p>
*
* <p>If the <code>CustomItem</code> consists of internal
* elements that are smaller
* than the container's viewport, the rectangle returned
* should be the
* same size as one of these elements. However, the
* <code>CustomItem</code> might have
* contents whose elements are larger than the viewport, or it might have
* contents having no internal structure. In either of these cases, the
* item should return a rectangle that best represents its idea of the
* content area that is important for the user to see. When traversal
* occurs, the item should move its traversal location by an amount based
* on the viewport size. For example, if the viewport is
* <code>80</code> pixels high,
* and traversal occurs downwards, the item might move its traversal
* location down by <code>70</code> pixels in order to display
* the next screenful of
* content, with <code>10</code> pixels overlap for context.</p>
*
* <p>All internal traversal locations must be reachable regardless of
* which traversal modes are provided by the implementation. This
* implies that,
* if the implementation provides one-dimensional traversal, the
* <code>CustomItem</code> must linearize its internal locations.
* For example, suppose the traversal mode is
* <code>TRAVERSE_VERTICAL</code> and the <code>CustomItem</code> consists
* of a horizontal row of elements. If the traversal direction is
* <code>DOWN</code> the internal traversal location should move to the
* right, and if the traversal direction is <code>UP</code> the internal
* traversal location should move to the left. (The foregoing convention
* is appropriate for languages that use left-to-right text. The opposite
* convention should be used for languages that use right-to-left text.)
* Consider a similar example where the traversal mode is
* <code>TRAVERSE_VERTICAL</code> and the <code>CustomItem</code> consists
* of a grid of elements. A traversal direction of <code>DOWN</code>
* might proceed leftwards across each row, moving to the next row
* downwards when the location reaches the rightmost element in a row.
* </p>
*
* <p>If the implementation provides two-dimensional traversal but the
* <code>CustomItem</code> is one-dimensional, a traversal direction
* along the item's
* axis should traverse within the item, and a traversal direction
* orthogonal to the item's axis should cause immediate traversal out of
* the item by returning <code>false</code> from this method. For
* example, suppose a <code>CustomItem</code> is implementing
* a vertical stack of
* elements and traversal is already inside the item. If a traverse event
* is received with direction <code>UP</code> or <code>DOWN</code>,
* the <code>traverse()</code> method should
* move to the next element and return <code>true</code>. On the other
* hand, if a traverse event is received with direction
* <code>RIGHT</code> or <code>LEFT</code>, the
* <code>traverse()</code> method should always return
* <code>false</code> so that
* traversal exits the item immediately. An item that implements internal
* traversal should always accept entry - that is, the initial call to
* <code>traverse()</code> should return <code>true</code> -
* regardless of the axis of the traversal direction.</p>
*
* <p>If the <code>traverse()</code> method returns
* <code>false</code> when traversal
* is entering the item, this indicates to the system that the item does
* not support internal traversal. In this case, the item should not
* perform any of its own highlighting, and the system will perform
* highlighting appropriate for the platform, external to the item.</p>
*
* <p>The default implementation of the <code>traverse()</code>
* method always returns <code>false</code>.</p>
*
* @param dir the direction of traversal, one of Canvas.UP, Canvas.DOWN, Canvas.LEFT, Canvas.RIGHT, or NONE.
* @param viewportWidth the width of the container's viewport
* @param viewportHeight the height of the container's viewport
* @param myVisRect_inout passes the visible rectangle into the method, and returns the updated traversal rectangle from the method
* @return true if internal traversal had occurred, false if traversal should proceed out
* @see #getInteractionModes()
* @see #traverseOut()
* @see #TRAVERSE_HORIZONTAL
* @see #TRAVERSE_VERTICAL
*/
protected boolean traverse(int dir, int viewportWidth, int viewportHeight, int[] myVisRect_inout)
{
return false;
}
/**
* Called by the system when traversal has occurred out of the item. This
* may occur in response to the <code>CustomItem</code> having returned
* <code>false</code> to a previous call to <code>traverse()</code>, if
* the user has begun interacting with another item, or if
* <code>Form</code> containing
* this item is no longer current. If the <code>CustomItem</code>
* is using highlighting to indicate internal traversal,
* the <code>CustomItem</code>
* should set its state to be unhighlighted and request a repaint. (Note
* that painting will not occur if the item is no longer visible.)
*
* @see #getInteractionModes()
* @see #traverse(int, int, int, int[])
* @see #TRAVERSE_HORIZONTAL
* @see #TRAVERSE_VERTICAL
*/
protected void traverseOut()
{
// the default implentation does nothing
}
/**
* Called by the system when a key is pressed. The implementation
* indicates support for delivery of key press events by setting the
* <code>KEY_PRESS</code> bit in the value returned by the
* <code>getInteractionModes</code> method.
* <p>J2ME Polish supports the KEY_PRESS interaction mode.</p>
*
* @param keyCode the key code of the key that has been pressed
* @see #getInteractionModes()
*/
protected void keyPressed(int keyCode)
{
// this method is called by J2ME Polish whenever a key has been pressed
}
/**
* Called by the system when a key is released. The implementation
* indicates support for delivery of key release events by setting the
* <code>KEY_RELEASE</code> bit in the value returned by the
* <code>getInteractionModes</code> method.
*
* <p>keyReleased() is suported by the J2ME Polish implementation when the native system forwards keyReleased events to Canvas classes.</p>
*
* @param keyCode - the key code of the key that has been released
* @see #getInteractionModes()
*/
protected void keyReleased(int keyCode)
{
//do nothing
}
/**
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -