J2ME字体的设置
J2ME字体专题
<o:p>?</o:p>
1,Font类的特点:
①没有构造函数
②是final类型的类
③没有color属性,只有三性:.
2,特点决定用法:不能被继承,不能被实例化.
<o:p>?</o:p>
3,关于字体的知识:字体的形状-----face,字体的风格----Style,字体的大小---size
4,J2ME提供的字体:
形状: FACE_MONOSPACE---等宽字体
???? FACE_PROPORTIONAL----均衡字体
??? ?FACE_SYSTEM----系统字体
风格: STYLE_BOLD-----粗体
?????? ?STYLE_ITALIC---斜体
???? STYLE_PLAIN----普通
?????? ?STYLE_UNDERLINED----下画线
??注意:风格可以组合.如: STYLE_BOLD| STYLE_ITALIC 两两组合,或者三者组合STYLE_UNDERLINED |STYLE_BOLD| STYLE_ITALIC
大小: SIZE_LARGE--- 16
????? ?SIZE_MEDIUM----0
?????? ?SIZE_SMALL-----8
<o:p>?</o:p>
5,color: 由于J2ME技术比较简单,所以没有实现专门的颜色类,而只是使用RGB的概念来代表颜色。这里简单介绍一下RGB的概念,颜色是由红(Red)、绿(Green)、蓝(Blue)三原色组成的,所以可以使用这三个颜色的组合来代表一种具体的颜色,其中R、G、B的每个数值都位于0-255之间。在表达颜色的时候,即可以使用三个数字来表达,也可以使用一个格式如0X00RRGGBB这样格式的十六进制来表达,下面是常见颜色的表达形式:<o:p></o:p>
红色:(255,0,0)或0x00FF0000??
绿色:(0,255,0)或0x0000FF00??
蓝色:(255,255,255)或0x00FFFFFF<o:p></o:p>
可以使用setColor(int red,int green,int blue)或者setColor(int RGB)来设置字体的颜色,用getColor()来获取字体的颜色
<o:p>?</o:p>
6.用法:
①在Graphics类中的运用:
package datuu.srk.demo.font;
<o:p>?</o:p>
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Display;
<o:p>?</o:p>
public class GraphicsTest extends MIDlet {
??? private? GraphicsTestCanvas showCanvas;
??? public GraphicsTest() {
??????? showCanvas = new GraphicsTestCanvas();
??? }
??? protected void startApp() throws MIDletStateChangeException {
??????? Display.getDisplay(this).setCurrent(showCanvas);
? ??}
<o:p>?</o:p>
??? protected void pauseApp() {
??? }
<o:p>?</o:p>
??? protected void destroyApp(boolean _boolean) throws
??????????? MIDletStateChangeException {
??? }
<o:p>?</o:p>
<o:p>?</o:p>
??? class GraphicsTestCanvas extends Canvas {
??????? private Font myFont;
??????? public GraphicsTestCanvas() {
??????????? myFont = Font.getFont(Font.FACE_SYSTEM,Font.STYLE_UNDERLINED|Font.STYLE_BOLD|Font.STYLE_ITALIC,Font.SIZE_LARGE);//设置字体
??????? }
??????? private final String showMessage = "kuikui,你好!";
??????? protected void paint(Graphics g) {
??????????? g.setFont(myFont);
??????????? g.drawString(showMessage,this.getWidth()/2,this.getHeight()/2,Graphics.TOP|Graphics.LEFT);
??????? }
??? }
}
<o:p>?</o:p>
②绘制会动的字体:
package datuu.srk.demo.font;
<o:p>?</o:p>
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
<o:p>?</o:p>
public class DrawCanvas extends MIDlet implements CommandListener {
??? private Command exitCommand;
??? private HCanvas sg;
??? public DrawCanvas() {
??????? exitCommand = new Command("Exit", Command.EXIT, 1);
??????? sg = new HCanvas();
??????? sg.addCommand(exitCommand);
??????? sg.setCommandListener(this);
??????? Display.getDisplay(this).setCurrent(sg);
<o:p>?</o:p>
??? }
<o:p>?</o:p>
??? protected void startApp() {
??? }
<o:p>?</o:p>
??? protected void pauseApp() {
??? }
<o:p>?</o:p>
??? protected void destroyApp(boolean unconditional) {
??? }
<o:p>?</o:p>
??? public void commandAction(Command c, Displayable d) {
??????? if (c == exitCommand) {
??????????? destroyApp(false);
??????????? notifyDestroyed();
??????? }
??? }
}
<o:p>?</o:p>
<o:p>?</o:p>
class HCanvas extends Canvas implements Runnable {
<o:p>?</o:p>
??? private String str = new String("Hello,LinuxFans!");
??? private int[] adjustHight = new int[] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
??????????????????????????????? 0, 0, 0, 0, 0, 1, 2, 3, 4, 4, 3, 2, 1, 1, 2, 3,
?????????????????? ?????????????3, 4, 4, 3, 2, 1,};
??? boolean bStart = true;
??? private int k = str.length();
<o:p>?</o:p>
??? public HCanvas() {
??????? new Thread(this).start();
??? }
<o:p>?</o:p>
??? protected void paint(Graphics g) {
??????? g.setColor(0x00ffffff);
??????? g.fillRect(0, 0, getWidth(), getHeight());
??????? g.setColor(0x00000000);
??????? for (int i = 0; i < str.length(); i++) {
??????????? g.drawString(str.substring(i, i + 1), 20 + i * 7,
???????????????????????? 10 - adjustHight[k - i], 0);
??????????? g.drawString(str.substring(i, i + 1), 21 + i * 7,
????????????????? ???????11 - adjustHight[k - i], 0); //加重字体7是字体宽度
??????? }
??? }
<o:p>?</o:p>
??? public void run() {
??????? while (bStart) {
??????????? try {
??????????????? repaint();
??????????????? Thread.sleep(70);
??????????????? k++;
??????????????? if (k > (adjustHight.length - 1)) {
??????????????????? k = str.length();
??????????????? }
??????????? } catch (InterruptedException e) {}
??????? }
??? }
<o:p>?</o:p>
}
<o:p>?</o:p>
③List中的运用很简单,有List.setFont(int index,Font font)方法,可以把预设定好的字体.
<o:p>?</o:p>
小结一下:字体在J2ME中是很重要的一部分,因为我们做出来的软件美观也是很重的义部分,字体有很多种,要设置跟更美观的字体可以使用德国开源包polish,j使用也很简单,就像css样式列表一样使用,通过它可以设置跟网页一样美观的字体,当我们要绘制动态字体的时候,其实就是坐标的变换,左右滚动变换x坐标,上下滚动,变换y坐标.
<o:p>?</o:p>
<o:p>?</o:p>