StringItempublic class StringItem extends Item An item that can contain a string. A StringItem is
display-only; the user
cannot edit the contents. Both the label and the textual content of a
StringItem may be modified by the application. The
visual representation
of the label may differ from that of the textual contents. |
Fields Summary |
---|
private String | strThe text of this StringItem | private Font | fontThe Font to render this StringItem's text in | private int | appearanceModeThe appearance hint | private int | originalAppearanceModeThe original appearance hint before switching | private int | minimumLineHeightMinimum height for one line | private boolean | skipTraverseAn internal flag. True if Form should not traverse
to this StringItem |
Constructors Summary |
---|
public StringItem(String label, String text)Creates a new StringItem object. Calling this
constructor is equivalent to calling
StringItem(label, text, PLAIN);
|
this(label, text, Item.PLAIN);
| public StringItem(String label, String text, int appearanceMode)Creates a new StringItem object with the given label,
textual content, and appearance mode.
Either label or text may be present or null .
The appearanceMode parameter
(see Appearance Modes)
is a hint to the platform of the application's intended use
for this StringItem . To provide hyperlink- or
button-like behavior,
the application should associate a default Command with this
StringItem and add an
ItemCommandListener to this
StringItem .
Here is an example showing the use of a
StringItem as a button:
StringItem strItem =
new StringItem("Default: ", "Set",
Item.BUTTON);
strItem.setDefaultCommand(
new Command("Set", Command.ITEM, 1);
// icl is ItemCommandListener
strItem.setItemCommandListener(icl);
|
super(label);
synchronized (Display.LCDUILock) {
switch (appearanceMode) {
case Item.PLAIN:
case Item.HYPERLINK:
case Item.BUTTON:
this.appearanceMode = appearanceMode;
break;
default:
throw new IllegalArgumentException();
}
this.str = text;
this.font = Screen.CONTENT_FONT;
int labelFontHeight = LABEL_FONT.getHeight();
minimumLineHeight = Screen.CONTENT_HEIGHT;
if (minimumLineHeight < labelFontHeight) {
minimumLineHeight = labelFontHeight;
}
checkTraverse();
}
|
Methods Summary |
---|
void | addCommandImpl(Command cmd)Adds a context sensitive Command to the item.
synchronized (Display.LCDUILock) {
// The super class will update the command set of the Form
super.addCommandImpl(cmd);
if ((numCommands >= 1) && (appearanceMode == Item.PLAIN)) {
// restore the value of the original appearanceMode
// if it is a button
// otherwise simple change the appearanceMode
// to hyperlink
this.appearanceMode =
originalAppearanceMode == Item.BUTTON ?
Item.BUTTON : Item.HYPERLINK;
}
checkTraverse();
invalidate();
} // synchronized
| void | callKeyPressed(int keyCode)Called by the system to signal a key press
if (keyCode != Display.KEYCODE_SELECT) {
return;
}
// StringItem takes focus only if there are one or more Item Commands
// attached to it
if (!(getCommandCount() > 0) || commandListener == null) {
return;
}
ItemCommandListener cl = null;
Command defaultCmd = null;
synchronized (Display.LCDUILock) {
cl = commandListener;
defaultCmd = defaultCommand;
} // synchronized
// SYNC NOTE: The call to the listener must occur outside
// of the lock
if (cl != null) {
try {
// SYNC NOTE: We lock on calloutLock around any calls
// into application code
synchronized (Display.calloutLock) {
if (defaultCmd != null) {
cl.commandAction(defaultCmd, this);
} else {
// REMINDER : Needs HI decision
// either call the first command
// from the command list or
// invoke the menu
}
}
} catch (Throwable thr) {
Display.handleThrowable(thr);
}
}
| int | callMinimumHeight()Get the minimum height of this Item
// IF we decide to have minHeight as one line
// we need to change the way painting is done
// (to divide allocated space between label and string)
return callPreferredHeight(-1);
| int | callMinimumWidth()Get the minimum width of this Item
int pW = callPreferredWidth(-1);
// FIX ME: paint() does not know to paint in a width which is less
// than preferred
int w = font.charWidth('W") * 8 + 6 * font.charWidth('.");
if (w > pW) {
w = pW;
}
if (isButton()) {
w += 2 * (BUTTON_BORDER + BUTTON_PAD);
}
return w;
| void | callPaint(Graphics g, int width, int height)Paint this StringItem
int w = width;
int h = height;
int translateY = 0;
int translateX = 0;
if (isButton()) {
translateX = translateY = BUTTON_BORDER + BUTTON_PAD;
w -= 2*translateX;
h -= 2*translateY;
g.translate(translateX, translateY);
}
Font lFont = (LABEL_BOLD_ON_TRAVERSE && !hasFocus) ?
Screen.CONTENT_FONT : LABEL_FONT;
int labelHeight = getLabelHeight(w);
int offset = Text.paint(label, lFont,
g, w, labelHeight, 0, Text.NORMAL, null);
if (offset > 0) {
offset += LABEL_PAD;
}
int mode = Text.NORMAL;
if (numCommands > 0 && appearanceMode == Item.HYPERLINK) {
mode = hasFocus ? (Text.INVERT | Text.HYPERLINK) :
(Text.NORMAL | Text.HYPERLINK);
}
int yOffset = labelHeight;
if (labelHeight > 0) {
yOffset -= (lFont.getHeight() < font.getHeight() ?
lFont.getHeight() : font.getHeight());
}
g.translate(0, yOffset);
translateY += yOffset;
Text.paint(str, font, g, w, h - yOffset, offset, mode, null);
g.translate(-translateX, -translateY);
if (isButton()) {
drawButtonBorder(g, 0, 0, width, height, hasFocus);
}
| int | callPreferredHeight(int w)Get the preferred height of this Item
if (w == -1) {
w = DEFAULT_WIDTH;
}
if (isButton()) {
int buttonPad = 2 * (BUTTON_BORDER + BUTTON_PAD);
int prefH = Text.getTwoStringsHeight(label, str,
LABEL_FONT, font,
w - buttonPad,
LABEL_PAD);
return (prefH > 0 ? prefH + buttonPad : 0);
}
return Text.getTwoStringsHeight(label, str, LABEL_FONT, font,
w, LABEL_PAD);
| int | callPreferredWidth(int h)Get the preferred width of this Item
// FIX ME: we ignore the 'h' value and just return
// a basic width based on our contents. That is, this
// StringItem's preferred width is always based on
// being one line high
if (isButton()) {
int buttonPad = 2 * (BUTTON_BORDER + BUTTON_PAD);
int prefW = Text.getTwoStringsWidth(label, str, LABEL_FONT,
font,
DEFAULT_WIDTH - buttonPad,
LABEL_PAD);
return (prefW > 0 ? prefW + buttonPad : 0);
}
return Text.getTwoStringsWidth(label, str, LABEL_FONT, font,
DEFAULT_WIDTH, LABEL_PAD);
| private void | checkTraverse()Check that given the label, text, and commands, Form
should traverse this StringItem. Updates the internal
'skipTraverse' variable.
if (str == null && label == null) {
skipTraverse = true;
} else if (str == null && label.trim().equals("")) {
skipTraverse = true;
} else if (label == null && str.trim().equals("")) {
skipTraverse = true;
} else {
skipTraverse = false;
}
| boolean | equateNLA()Determine if this Item should have a newline after it
// If content ends with a \n,
// there is a newline after this StringItem no matter what
if (str != null && str.length() > 0) {
if (str.charAt(str.length() - 1) == '\n") {
return true;
}
} else if (label != null && label.length() > 0) {
// If there is no content and our label ends with a \n,
// there is a newline after this StringItem
if (label.charAt(label.length() - 1) == '\n") {
return true;
}
} else {
// empty StringItem
return false;
}
if ((layout & Item.LAYOUT_2) == Item.LAYOUT_2) {
return ((layout & Item.LAYOUT_NEWLINE_AFTER)
== Item.LAYOUT_NEWLINE_AFTER);
}
return false;
| boolean | equateNLB()Determine if this Item should have a newline before it
// If label starts with a\n,
// put this StringItem on a newline no matter what
if (label != null && label.length() > 0) {
if (label.charAt(0) == '\n") {
return true;
}
} else if (str != null && str.length() > 0) {
// If there is no label and our content starts with a \n,
// this StringItem starts on a newline
if (str.charAt(0) == '\n") {
return true;
}
} else {
// empty StringItem
return false;
}
if ((layout & Item.LAYOUT_2) == Item.LAYOUT_2) {
return ((layout & Item.LAYOUT_NEWLINE_BEFORE)
== Item.LAYOUT_NEWLINE_BEFORE);
}
// in MIDP1.0 new any StringItem with a non-null label would
// go on a new line
return label != null && label.length() > 0;
| public int | getAppearanceMode()Returns the appearance mode of the StringItem .
See Appearance Modes.
// SYNC NOTE: return of atomic value, no locking necessary
return appearanceMode;
| public Font | getFont()Gets the application's preferred font for
rendering this StringItem . The
value returned is the font that had been set by the application,
even if that value had been disregarded by the implementation.
If no font had been set by the application, or if the application
explicitly set the font to null , the value is the default
font chosen by the implementation.
// SYNC NOTE: return of atomic value, no locking necessary
return font;
| public java.lang.String | getText()Gets the text contents of the StringItem , or
null if the StringItem is
empty.
// SYNC NOTE: return of atomic value, no locking necessary
return str;
| private boolean | isButton()Determines if this StringItem should be rendered with the button border.
return (numCommands > 0 && appearanceMode == Item.BUTTON);
| void | removeCommandImpl(Command cmd)Removes the context sensitive command from item.
synchronized (Display.LCDUILock) {
// The super class will update the command set of the Form
super.removeCommandImpl(cmd);
if ((numCommands < 1) && (appearanceMode != Item.PLAIN)) {
// store value of the original appearanceMode
originalAppearanceMode = this.appearanceMode;
// change the appearanceMode to plain
this.appearanceMode = Item.PLAIN;
}
checkTraverse();
invalidate();
} // synchronized
| public void | setFont(Font font)Sets the application's preferred font for
rendering this StringItem .
The font is a hint, and the implementation may disregard
the application's preferred font.
The font parameter must be a valid Font
object or null . If the font parameter is
null , the implementation must use its default font
to render the StringItem .
this.font = font;
| public void | setPreferredSize(int width, int height)Sets the preferred width and height for this Item .
Values for width and height less than -1 are illegal.
If the width is between zero and the minimum width, inclusive,
the minimum width is used instead.
If the height is between zero and the minimum height, inclusive,
the minimum height is used instead.
Supplying a width or height value greater than the minimum width or
height locks that dimension to the supplied
value. The implementation may silently enforce a maximum dimension for
an Item based on factors such as the screen size.
Supplying a value of
-1 for the width or height unlocks that dimension.
See Item Sizes for a complete discussion.
It is illegal to call this method if this Item
is contained within an Alert .
super.setPreferredSize(width, height);
| public void | setText(java.lang.String text)Sets the text contents of the StringItem . If text
is null ,
the StringItem
is set to be empty.
synchronized (Display.LCDUILock) {
this.str = text;
checkTraverse();
invalidate();
}
| boolean | shouldSkipTraverse()Determine if Form should not traverse to this StringItem
if ((label == null || label.length() == 0) &&
(str == null || str.length() == 0)) {
return true;
}
return skipTraverse;
|
|