Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 52 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
52
Dung lượng
780,11 KB
Nội dung
J2ME in a Nutshell 411 Font style Selects a style of the given font face. Legal values are STYLE_PLAIN, STYLE_ITALIC, STYLE_BOLD and STYLE_UNDERLINE. STYLE_ITALIC and STYLE_BOLD may be used together to request a bold, italic font. STYLE_UNDERLINE may be combined with any of the other styles. Font size The relative size of the font, chosen from SIZE_SMALL, SIZE_MEDIUM and SIZE_LARGE. Since the capabilities of MIDP devices vary widely, the application is only able to select a font based on this narrow set of logical attributes. The getFont() method returns the font from the set available to it that most closely matches the arguments supplied to it. Some devices may be able to closely match a wide range of requested fonts, while others might only be able to accurately represent a very small number. In order to minimize memory usage, the same Font instance will be returned by this method whenever the arguments supplied to it resolve to the same device font. This is possible because Font objects are immutable. The Font object has methods that allow certain font attributes to be retrieved, including isBold(), isItalic() and isUnderlined(), which return the component parts of the font style. Note that the values returned by these methods represent the font actually selected and may not match those supplied to getFont(). The selected font size and face can also be retrieved using the getSize() and getFace() methods. Several methods of the Font class perform functions that are supplied by the FontMetrics and LineMetrics classes in J2SE. The charWidth(), charsWidth(), stringWidth() and substringWidth() methods measure the horizontal size of a string or set of characters when rendered by the Font object on which they are called. The getHeight() method returns the height of a standard line in the font, including interline spacing, while getBaselinePosition() returns the distance from the top of the font to its baseline, both of these being measured in pixels. These methods can be used when manually placing text using the methods of the Graphics class. public final class Font { // No Constructor // Public Constants public static final int FACE_MONOSPACE; // =32 public static final int FACE_PROPORTIONAL; // =64 public static final int FACE_SYSTEM; // =0 public static final int SIZE_LARGE; // =16 public static final int SIZE_MEDIUM; // =0 public static final int SIZE_SMALL; // =8 public static final int STYLE_BOLD; // =1 public static final int STYLE_ITALIC; // =2 public static final int STYLE_PLAIN; // =0 public static final int STYLE_UNDERLINED; // =4 // Public Class Methods public static Font getDefaultFont(); public static Font getFont(int face, int style, int size); J2ME in a Nutshell 412 // Property Accessor Methods (by property name) public int getBaselinePosition(); public boolean isBold(); public int getFace(); public int getHeight(); public boolean isItalic(); public boolean isPlain(); public int getSize(); public int getStyle(); public boolean isUnderlined(); // Public Instance Methods public int charsWidth(char[] ch, int offset, // native int length); public int charWidth( char ch); // native public int stringWidth( String str); // native public int substringWidth(String str, int offset, // native int len); } Passed To Graphics.setFont() Returned By Font.{getDefaultFont(), getFont()}, Graphics.getFont() Form MIDP 1.0 javax.microedition.lcdui Form is a subclass of Screen that is used to build form-like screens using Items. It inherits from its superclass the ability to have a title, a ticker and to have associated Commands and a CommandListener. Items are usually added to a Form using the append(Item item) method, which adds the Item to the end of an internal list maintained by the Form. There are also two overloaded versions of this method that accept arguments of type String and Image. These methods are simply wrappers that add respectively a StringItem and an ImageItem to the form, with an empty label. It is also possible to insert an Item in between those already added by calling the insert() method, which requires the index of the Item before which the new one is to be added. The set() method can be used to replace an Item at a given index with a new one. Finally, the delete() method removes the Item at the supplied index. The total number of Items on a Form can be obtained from the size() method. When rendered on the screen, Items appear on the Form from top to bottom in the order in which they appear in the Form's internal list. With the exception of StringItem and ImageItem, each Item is rendered on a line of its own. When the Item is too wide to fit the screen, it may be shortened or, in the case of a StringItem, the text will overflow onto following lines as necessary. A Form is always as wide as the display area available to it, but its height may exceed the total viewable area of the screen. When this is the case, the J2ME in a Nutshell 413 implementation will provide some means (such as a scrollbar) to allow the user to move the viewable area over the entire vertical extent of the Form. Horizontal scrolling is not required and is never provided. When an Item has an associated label, it will normally be placed close to the rest of the Item and may be displayed in such as way as to distinguish itself. In the PalmOS implementation, for example, Items are arranged in two columns with the label in the left-hand column rendered in bold and the rest of the Item in the right-hand column. Successive StringItems and ImageItems that do not have associated labels are laid out horizontally whenever possible. If there is insufficient room, the text of a StringItem is broken at white space if possible and the balance appears on succeeding lines. An image that is too wide for the space allocated to its ImageItem is displayed on the next line and is truncated on the right if it is too wide for the device's screen. When these Items have labels, a line break will occur before the label in the usual way. The setItemStateListener() method allows application code to register a single ItemStateListener to receive notification of state changes in any of the Items on the Form. Calling this method when there is already a listener registered replaces that listener with the new one, while invoking it with a null argument completely removes any existing listener. public class Form extends Screen { // Public Constructors public Form( String title); public Form( String title, Item[] items); // Public Instance Methods public int append( String str); public int append( Image image); public int append( Item item); public void delete( int index); public Item get( int index); public void insert( int index, Item item); public void set( int index, Item item); public void setItemStateListener( ItemStateListener iListener); public int size(); } Gauge MIDP 1.0 javax.microedition.lcdui This class is an Item that can be used as either a progress bar or a slider. The Gauge displays a fixed range of integer values together with the current value. The maximum value of the range and the initial value are set when the Gauge is constructed and may subsequently be changed using the setMaxValue() and setValue() methods. The minimum value is always implicitly zero. In normal operation, the current value would probably start at zero and be updated by application code by calling the setValue() method to reflect the progress of an ongoing J2ME in a Nutshell 414 operation. In this mode, the Gauge operates as a progress bar and its value cannot be changed by the user. To prevent the user changing the value, the Gauge should be made non- interactive, which can be done by setting the interactive constructor argument to false. Note that this attribute cannot be changed once the Gauge has been constructed, although its value can be obtained by calling isInteractive(). To use the Gauge as a slider, it should be made interactive. In this mode, the user can change the current value within the permitted range using a device-dependent gesture. As the value changes, the Gauge notifies the ItemStateListener for the Form on which it is displayed, which can retrieve the new value using the getValue() method. Owing to display limitations, it may not be possible for every possible value in the allowed range to be displayed and therefore the user may have to adjust the Gauge value several times before a change in its appearance is seen. For this reason, it is recommended that the current value also be displayed in another control, such as a StringItem, so that the user can see the result of every adjustment. public class Gauge extends Item { // Public Constructors public Gauge(String label, boolean interactive, int maxValue, int initialValue); // Public Instance Methods public int getMaxValue(); public int getValue(); public boolean isInteractive(); public void setMaxValue( int maxValue); public void setValue( int value); // Public Methods Overriding Item public void setLabel( String label); } Graphics MIDP 1.0 javax.microedition.lcdui The Graphics class provides drawing and fill operations that can be used to paint the content of a Canvas or a mutable Image. A Graphics object for a Canvas is passed to its paint() method and is valid only within that method. A Graphics object for an Image can be obtained from its getGraphics() method and remains valid as long as the Image is referenced. All operations on a Graphics object use a coordinate reference system measured in pixels, in which the origin is initially at the top-left hand corner of the Canvas or Image. Values of the x coordinate increase when moving to the right, while y value increase downwards. The coordinate origin may be moved by calling the translate() method, supplying the coordinates of the new origin relative to the current origin. Negative coordinate values are valid and, depending on the location of the origin, may or may not correspond to points on the drawing surface. It is permissible to move the origin to a location that is outside the drawing area. J2ME in a Nutshell 415 A Graphics object has an associated clipping rectangle which bounds the area within which graphics operations will be performed. The clipping rectangle for an Image is initially set to cover the entire image, while that for a Canvas is set by the platform to cover the part of the Canvas that needs to be repainted. Operations performed on a Graphics object will not change pixels that lie outside clipping rectangle, even if their scope would include those pixels. Thus, setting the clipping rectangle can be used as a means of protecting areas that should not be changed. The bounds of the clipping rectangle, relative to the current origin, can be obtained from the getClipX(), getClipY(), getClipWidth() and getClipHeight() methods. The clipping rectangle can be changed using the setClip() method which sets an entirely new clip, and clipRect() intersect the current clip with the rectangular area specified by its arguments to produce smaller clipping area. All drawing and filling operations make use of the currently selected color. When a Graphics object is created, its drawing color is black. The drawing color can be changed by calling the setColor() or setGrayScale() methods. Colors are represented as 24-bit RGB values held in an integer where the least significant 8 bits encode the blue value, the next 8 bits hold the green value and the next 8 hold the red value. Using this scheme, the values 0xFF0000 and 0x7F0000 represent shades of red, whereas 0xFF represents blue. There are two variants of the setColor() method that allow the specification of the individual red, green and blue components, or of all of the components in a single integer. On devices that only support gray scale, the setGrayScale() method can be used to set a gray level in the range 0 to 255 inclusive, where 0 represents black and 255 is white. The drawArc(), drawLine(), drawRect() and drawRoundRect() methods draw outline shapes in the current color using coordinates that are specified by their arguments. The pixels that are affected by these methods depend on the stroke style, which can be set using the setStrokeStyle() method to DOTTED or SOLID. By default, solid lines are drawn. Each drawing primitive, apart from drawLine(), has a corresponding fill operation that fills the shape with the current drawing color instead of drawing the outline. The fillRect() method, for example, can be used to create a solid, filled rectangular shape. The stroke style is not relevant for fill operations. Text may be drawn onto a Canvas or an Image by using the drawChar(), drawChars(), drawString() and drawSubstring() methods, which specify the characters to be drawn and the location of an anchor point that determines where the text will be placed. To understand how the anchor point works, it is necessary to consider the text as being tightly wrapped in a rectangle. The anchor point specifies a point on the boundary of the rectangle and the drawing primitive gives the coordinates at which the anchor point will be placed, relative to the origin. For example, if the anchor point is specified as (TOP | LEFT) and the location is (40, 50), then the top-left of the bounding rectangle of the text will be placed at coordinates (40, 50) relative to the origin. On the other hand, if the anchor is (TOP | HCENTER), then the top of the bounding rectangle will be at y coordinate 50, and the text will be horizontally centered around x = 40. Use of the anchor point in this way makes it possible to center or right-align text without having to compute the width of the text using the text measurement methods of the Font class. Note, however, that vertical centering is not supported, even though there is a Graphics.VCENTER constant. This constant can, however, be used to vertically center an Image, as described below. J2ME in a Nutshell 416 Text is always drawn using the current font, which may be set using the setFont() method, using a font obtained from the Font getFont() or getDefaultFont() methods. When it is created, a Graphics object is initialized to use the system default font. An Image can be drawn onto the drawing surface of a Canvas or another Image by using the drawImage() method. By default, this method draws the whole image with its top left corner at a given coordinate location. However, it is possible to copy only a subset of the Image by setting the clipping rectangle of the Graphics object to bound the exact area of the target onto which the Image section should be copied. Neither the stroke style nor the drawing color is relevant to the drawImage method, since all pixels are copied from the source image. The coordinate location for the drawImage() method includes the specification of an anchor point, which is used in the same way as it is when drawing text, with the exception that vertical centering is also allowed. The bounding box used when determining the location of anchor points is the rectangle formed by the outer edge of the Image. public class Graphics { // No Constructor // Public Constants public static final int BASELINE; // =64 public static final int BOTTOM; // =32 public static final int DOTTED; // =1 public static final int HCENTER; // =1 public static final int LEFT; // =4 public static final int RIGHT; // =8 public static final int SOLID; // =0 public static final int TOP; // =16 public static final int VCENTER; // =2 // Property Accessor Methods (by property name) public int getBlueComponent(); public int getClipHeight(); public int getClipWidth(); public int getClipX(); public int getClipY(); public int getColor(); public void setColor( int RGB); public void setColor( int red, int green, int blue); public Font getFont(); public void setFont( Font font); public int getGrayScale(); public void setGrayScale( int value); public int getGreenComponent(); public int getRedComponent(); public int getStrokeStyle(); public void setStrokeStyle( int style); public int getTranslateX(); public int getTranslateY(); // Public Instance Methods public void clipRect(int x, int y, int width, int height); public void drawArc(int x, int y, int width, int height, // native int startAngle, int arcAngle); public void drawChar(char character, int x, int y, // native int anchor); public void drawChars(char[] data, int offset, // native int length, int x, int y, int anchor); public void drawImage(Image img, int x, int y, // native int anchor); public void drawLine( int x1, int y1, int x2, int y2); // native J2ME in a Nutshell 417 public void drawRect(int x, int y, int width, int height); // native public void drawRoundRect(int x, int y, int width, // native int height, int arcWidth, int arcHeight); public void drawString(String str, int x, int y, // native int anchor); public void drawSubstring(String str, int offset, int len, // native int x, int y, int anchor); public void fillArc(int x, int y, int width, int height, // native int startAngle, int arcAngle); public void fillRect(int x, int y, int width, int height); // native public void fillRoundRect(int x, int y, int width, // native int height, int arcWidth, int arcHeight); public void setClip( int x, int y, int width, int height); public void translate( int x, int y); } Passed To Canvas.paint() Returned By Image.getGraphics() Image MIDP 1.0 javax.microedition.lcdui A class that represents a memory-resident image that can be drawn onto the screen. Images are used in both the high- and low-level user interface APIs. In the high-level API, Images can be used with Alerts, ChoiceGroups, ImageItems and Lists. In the low-level API, an Image can be drawn onto any part of a Canvas object from within its paint() method. An Image may be either mutable or immutable. Images used in the high-level API must be immutable; either type may be used with the low-level API. Given an arbitrary Image, the isMutable() method can be used to determine whether it is mutable or not. The dimensions of an Image can be obtained by calling its getWidth() and getHeight() methods. There are are four static createImage() methods can be used to create an Image. The createImage(byte[] data, int offset, int length) method creates an immutable image from data held in a portion of a given byte array. The data must be encoded in a format that is supported by the implementation. The only format that the MIDP specification requires a device to support is Portable Network Graphics (PNG). The image data can be obtained from any source, such as over a network or from a record in a RecordStore on the device. The createImage(String fileName) method uses the content of a file addressable using the resource name fileName as the image data and creates an immutable image from it. fileName is usually the absolute path name of a file within the MIDlet suite's JAR file, such as /ora/ch4/resources/red.png. The createImage(int width, int height) method returns a blank, mutable image with the supplied dimensions, that the application can use as the target of drawing operations by obtaining a Graphics object using its getGraphics() J2ME in a Nutshell 418 method. Finally, the createImage(Image source) creates an immutable copy of an existing image. This method can be used, for example, to create an immutable copy of a mutable image so that it can be used with the high-level API. public class Image { // No Constructor // Public Class Methods public static Image createImage( String name) throws java.io.IOException; public static Image createImage( Image image); public static Image createImage( int width, int height); public static Image createImage(byte[] imagedata, int imageoffset, int imagelength); // Public Instance Methods public Graphics getGraphics(); public int getHeight(); public int getWidth(); public boolean isMutable(); // constant } Passed To Too many methods to list. Returned By Alert.getImage(), Choice.getImage(), ChoiceGroup.getImage(), Image.createImage(), ImageItem.getImage(), List.getImage() ImageItem MIDP 1.0 javax.microedition.lcdui This class is a subclass of Item that displays an Image as well as the optional label provided by Item. The image to be displayed is supplied as an instance of the Image class and must be immutable. It is also possible to supply an alternate text string that is displayed in place of the image if the platform does not support images. These attributes are usually set at construction time, but may be changed later using the setImage() and setAltText() methods. By default, an ImageItem that has a null or empty label is placed on the same line as any preceding StringItem or ImageItem, provided that there is room to accomodate the image. If there is insufficient room, then a line break will occur. The application may request that a different layout policy be applied by supplying an explicit layout argument to the constructor or using the setLayout() method. The layout value consists of an optional alignment value together with an optional request for line breaks. The alignment value must be one (and only one) of the following: J2ME in a Nutshell 419 LAYOUT_DEFAULT Applies the default layout policy described above LAYOUT_LEFT Left justifies the image within the space allocated to it. LAYOUT_RIGHT Right justifies the image within the space allocated to it. LAYOUT_CENTER Centers the image within the space allocated to it. A line break can be requested before and/or after the ImageItem by including the values LAYOUT_NEWLINE_BEFORE and LAYOUT_NEWLINE_AFTER in the layout value. The value (LAYOUT_CENTER | LAYOUT_NEWLINE_BEFORE | LAYOUT_NEWLINE_AFTER), for example, centers the image on a line of its own. LAYOUT_NEWLINE_BEFORE is redundant if the ImageItem includes a non-empty label, because a label always forces a line break. Similarly, LAYOUT_NEWLINE_AFTER is redundant if the next Item would force a line break. public class ImageItem extends Item { // Public Constructors public ImageItem(String label, Image img, int layout, String altText); // Public Constants public static final int LAYOUT_CENTER; // =3 public static final int LAYOUT_DEFAULT; // =0 public static final int LAYOUT_LEFT; // =1 public static final int LAYOUT_NEWLINE_AFTER; // =512 public static final int LAYOUT_NEWLINE_BEFORE; // =256 public static final int LAYOUT_RIGHT; // =2 // Public Instance Methods public String getAltText(); public Image getImage(); public int getLayout(); public void setAltText( String altText); public void setImage( Image img); public void setLayout( int layout); // Public Methods Overriding Item public void setLabel( String label); } Item MIDP 1.0 javax.microedition.lcdui This class is the base class for the high-level API user interface components that can be added to a Form. An Item has a label that is displayed near to and closely associated with the J2ME in a Nutshell 420 component itself. The label can be set using the setLabel() method and its value retrieved using getLabel(). The implementation is recommended to arrange for the label and the component to either both be visible or both be invisible when they are affected by the scrolling of the Form that they are part of. On some platforms, some components, such as TextFields, may display a full-screen editor that hides the original Form while the user is interacting with them. When this is the case, the label may be displayed as part of the editor as a reminder to the user of the meaning of the value being entered. Even though, in implementation terms, Item is very much like the AWT Component class, in MIDP 1.0 it is not possible to subclass it to create custom high-level components. public abstract class Item { // No Constructor // Public Instance Methods public String getLabel(); public void setLabel( String label); } Subclasses ChoiceGroup, DateField, Gauge, ImageItem, StringItem, TextField Passed To Form.{append(), Form(), insert(), set()}, ItemStateListener.itemStateChanged() Returned By Form.get() ItemStateListener MIDP 1.0 javax.microedition.lcdui An interface implemented by objects that want to be notified when the state of an Item is changed as the result of user action. Each Form can have a single ItemStateListener that is registered by calling its setItemStateListener() method. Programmatic changes to the state of an Item are never notified to the ItemStateListener. The ItemStateListener's itemStateChanged() method is called when the user makes a notifiable change in the state of any Items on the Form. The circumstances that result in notification depend on the nature of the Item. A text field, for example, will typically not notify every character entered or deleted, but will delay notification until the user moves the input focus elsewhere. A ChoiceGroup, on the other hand, will notify the Form's ItemStateListener whenever the user changes its selection state. [...]... javax.microedition.lcdui AM: Calendar AM_PM: Calendar ANY: TextField append(): Choice, ChoiceGroup, Form, List, StringBuffer APRIL: Calendar ArithmeticException: java.lang 444 J2ME in a Nutshell arraycopy(): System ArrayGlossOutOfBoundsException: java.lang ArrayStoreException: java.lang AUGUST: Calendar available(): ByteArrayInputStream, DataInputStream, InputStream B BACK: Command BASELINE: Graphics before(): Calendar... construct a filter that would include only records whose first field (assumed to be a String) starts with the letter S, first create a DataInputStream from the candidate: DataInputStream dis = new DataInputStream(new ByteArrayInputStream(candidate)); 436 J2ME in a Nutshell Then, extract the field to be compared using the DataInputStream readUTF() method and test its first character: return dis.readUTF().startsWith("S");... characters that are not permitted Constraints are applied both during editing and when the content of the field is changed programmatically The following constraints are defined by the MIDP specification; not all of these are implemented by all devices: ANY Represents the absence of any constraint, allowing the field to contain any characters EMAILADDR Constrains the input to be an e-mail address NUMERIC... String message); } Thrown By Too many methods to list 442 J2ME in a Nutshell Class, Method, and Field Index A abs(): Math acceptAndOpen(): StreamConnectionNotifier activeCount(): Thread addCommand(): Alert, Displayable addElement(): Vector addRecord(): RecordStore addRecordListener(): RecordStore after(): Calendar 443 J2ME in a Nutshell ALARM: AlertType Alert: javax.microedition.lcdui AlertType: javax.microedition.lcdui... DataInputStreams like this: DataInputStream dis1 = new DataInputStream(new ByteArrayInputStream(rec1)); DataInputStream dis2 = new DataInputStream(new ByteArrayInputStream(rec2)); At this point, the field to be compared is extracted from each record using the DataInputStream readUTF() method, and the comparison is performed: int res = dis1.readUTF().compareTo(dis2.readUTF()); The return value from the method... share data using static variables declared in their class implementations MIDlets can also share information by using RecordStores, which can be accessed using the APIs defined in the javax.microedition.rms package Partitioning MIDlets so that only those from the same suite execute in the same VM ensures that potentially malicious MIDlets from one suite cannot read or modify information belonging to another... implementation of this method wraps each of the records with a ByteArrayInputStream and a DataInputStream so that the contents of the records can be accessed as a set of fields To construct a filter that sorts based on the natural sorting order of 433 J2ME in a Nutshell the first field in the record, which is assumed to be a String, the record in the byte arrays rec1 and rec2 is converted to DataInputStreams... modified value can be retrieved at any time by calling getString() A TextField may initially appear as a single-line control in the user interface, but multi-line input is permitted and some devices may provide a separate full-screen editor that can be invoked by user action to make it easier for the user to edit the field content Two types of constraint may be applied to the string displayed by a TextField... that support the Mobile Information Device Profile (MIDP), under the control of device-dependent application management software (AMS) that creates, schedules, and destroys them MIDlets are grouped together into suites MIDlet suites are always installed, managed, and removed as a single unit All MIDlets from the same suite execute within a single Java virtual machine instance, enabling them to share... values to indicate their relative ordering: PRECEDES Indicates that rec1 should appear before rec2 EQUIVALENT Indicates that rec1 and rec2 are equivalent according to the sorting criterion applied by this comparator Note that this does not imply that the records are equal, although equal records would result in this value being returned FOLLOWS Indicates that rec1 should appear after rec2 A typical implementation . All MIDlets from the same suite execute within a single Java virtual machine instance, enabling them to share data using static variables declared in their class implementations. MIDlets can. operations that can be used to paint the content of a Canvas or a mutable Image. A Graphics object for a Canvas is passed to its paint() method and is valid only within that method. A Graphics. drawChar(char character, int x, int y, // native int anchor); public void drawChars(char[] data, int offset, // native int length, int x, int y, int anchor); public void drawImage(Image