📄 chap5gramid.java
字号:
//Chap5GraMID.java file
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import javax.microedition.midlet.*;
import java.io.*;
public class Chap5GraMID extends MIDlet implements CommandListener
{
//添加多几个Command 对象
private Command exitCommand;
private Command aCommand0, aCommand1, aCommand2, aCommand3, aCommand4, aCommand5;
private Command aCommand6, aCommand7, aCommand8, aCommand9, aCommand10, aCommand11;
private DemoCanvas myCanvas;
public Chap5GraMID()
{//在构造函数中创建Command 对象
exitCommand =new Command("EXIT",Command.EXIT,2);
aCommand0 =new Command("坐标移动演示",Command.SCREEN,3);
aCommand1 =new Command("对齐演示",Command.SCREEN,3);
aCommand2 =new Command("字体演示",Command.SCREEN,3);
aCommand3 =new Command("字体演示v2",Command.SCREEN,3);
aCommand4 =new Command("弧线与填充",Command.SCREEN,3);
aCommand5 =new Command("扇形图",Command.SCREEN,3);
aCommand6 =new Command("线条演示",Command.SCREEN,3);
aCommand7 =new Command("图片显示",Command.SCREEN,3);
aCommand8 =new Command("脱机图像绘制",Command.SCREEN,3);
aCommand9 =new Command("图像旋转",Command.SCREEN,3);
aCommand10=new Command("裁剪区演示",Command.SCREEN,3);
aCommand11=new Command("Alpha混合演示",Command.SCREEN,3);
myCanvas =new DemoCanvas();
myCanvas.addCommand(exitCommand);
myCanvas.addCommand(aCommand0);
myCanvas.addCommand(aCommand1);
myCanvas.addCommand(aCommand2);
myCanvas.addCommand(aCommand3);
myCanvas.addCommand(aCommand4);
myCanvas.addCommand(aCommand5);
myCanvas.addCommand(aCommand6);
myCanvas.addCommand(aCommand7);
myCanvas.addCommand(aCommand8);
myCanvas.addCommand(aCommand9);
myCanvas.addCommand(aCommand10);
myCanvas.addCommand(aCommand11);
myCanvas.setCommandListener(this);
}
protected void startApp( ) throws MIDletStateChangeException
{
Display.getDisplay(this).setCurrent(myCanvas);
}
protected void pauseApp( )
{
}
protected void destroyApp( boolean p1 )
{
}
public void commandAction(Command c,Displayable d)
{//处理命令事件
if (c ==exitCommand)
{
destroyApp(false);
notifyDestroyed();
}
else if(c ==aCommand0)
{
myCanvas.demoType=0;
myCanvas.textShow = "坐标移动演示";
myCanvas.repaint();
}
else if(c ==aCommand1)
{
myCanvas.demoType=1;
myCanvas.textShow = "对齐演示";
myCanvas.repaint();
}
else if(c ==aCommand2)
{
myCanvas.demoType=2;
myCanvas.textShow = "字体演示";
myCanvas.repaint();
}
else if(c ==aCommand3)
{
myCanvas.demoType=3;
myCanvas.textShow = "字体演示MIDPv2.0";
myCanvas.repaint();
}
else if(c ==aCommand4)
{
myCanvas.demoType=4;
myCanvas.textShow = "弧线与填充";
myCanvas.repaint();
}
else if(c ==aCommand5)
{
myCanvas.demoType=5;
myCanvas.textShow = "扇形图";
myCanvas.repaint();
}
else if(c ==aCommand6)
{
myCanvas.demoType=6;
myCanvas.textShow = "线条演示";
myCanvas.repaint();
}
else if(c ==aCommand7)
{
myCanvas.demoType=7;
myCanvas.textShow = "图片显示";
myCanvas.repaint();
}
else if(c ==aCommand8)
{
myCanvas.demoType=8;
myCanvas.textShow = "脱机图像绘制";
myCanvas.repaint();
}
else if(c ==aCommand9)
{
myCanvas.demoType=9;
myCanvas.textShow = "图像旋转";
myCanvas.repaint();
}
else if(c ==aCommand10)
{
myCanvas.demoType=10;
myCanvas.textShow = "裁剪区演示";
myCanvas.repaint();
}
else if(c ==aCommand11)
{
myCanvas.demoType=11;
myCanvas.textShow = "Alpha混合演示";
myCanvas.repaint();
}
}
//internal class DemoCanvas
public class DemoCanvas extends Canvas
{
//把对象修改为public类型
public String textShow="坐标移动演示";
public int demoType=0;
Font font1,font2,font3,font4;
Font font_20_1,font_20_2;
Image imageLogo,imageOffline;
Image imageTrans1, imageTrans2;
private int[] bRGB={
0xFFFF0000, 0x0000FF00, 0x0000FF00, 0x0000FF00,
0x0000FF00, 0xFFFF0000, 0x0000FF00, 0x0000FF00,
0x0000FF00, 0x0000FF00, 0xFFFF0000, 0x0000FF00,
0x0000FF00, 0x0000FF00, 0x0000FF00, 0xFFFF0000,
};
public DemoCanvas()
{
font1 = Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD, Font.SIZE_LARGE);
font2 = Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_ITALIC, Font.SIZE_MEDIUM);
font3 = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_MEDIUM );
font4 = Font.getDefaultFont();
font_20_1 = Font.getFont(Font.FONT_STATIC_TEXT);
font_20_2 = Font.getFont(Font.FONT_INPUT_TEXT);
loadImage();
transImage();
}
public void loadImage()
{
try
{
//装入png图片文件
imageLogo = Image.createImage("/pic/logo.png");
}
catch (IOException e)
{//需要import java.io.*;
System.out.println("load png resource error " + e.getMessage());
imageLogo = null;
}
//创建脱机的图像对象,高度比画布的高度少20个象素
imageOffline = Image.createImage(getWidth(), getHeight()-20);
Graphics g= imageOffline.getGraphics();
g.setColor(0x0000FF); //绘制坐标线
g.drawLine(0,0,imageOffline.getWidth(), imageOffline.getHeight());
g.drawLine(0, imageOffline.getHeight(), imageOffline.getWidth(), 0);
g.setColor(0x000000);
g.drawString("Offline Image",0,0,Graphics.TOP|Graphics.LEFT);
g=null;
}
public void transImage()
{//通过原有图像旋转创建新的图像对象
//需要import javax.microedition.lcdui.game.* 仅MIDP v2.0支持
if(null != imageLogo)
{
imageTrans1 = Image.createImage(imageLogo, 0, 0,
imageLogo.getWidth(), imageLogo.getHeight(), Sprite.TRANS_ROT90);
imageTrans2 = Image.createImage(imageLogo, 0, 0,
imageLogo.getWidth(), imageLogo.getHeight(), Sprite.TRANS_MIRROR_ROT180);
}
else
{
imageTrans1 =null;
imageTrans2 =null;
}
}
public void paint(Graphics g)
{
g.setColor(0xffffff);
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0x000000);
g.drawString(textShow,0,0,Graphics.TOP|Graphics.LEFT);
if(0 == demoType)
drawType0(g);
else if(1 == demoType)
drawType1(g);
else if(2 == demoType)
drawType2(g);
else if(3 == demoType)
drawType3(g);
else if(4 == demoType)
drawType4(g);
else if(5 == demoType)
drawType5(g);
else if(6 == demoType)
drawType6(g);
else if(7 == demoType)
drawType7(g);
else if(8 == demoType)
drawType8(g);
else if(9 == demoType)
drawType9(g);
else if(10 == demoType)
drawType10(g);
else if(11 == demoType)
drawType11(g);
}
public void drawType0(Graphics g)
{//演示坐标移动
for(int i=0;i<4;i++)
{
g.translate(20, 20);
g.drawString("坐标(0,0)", 0, 0, Graphics.TOP|Graphics.LEFT);
System.out.println("coordinate = " + g.getTranslateX() + "," + g.getTranslateY());
}
}
public void drawType1(Graphics g)
{//演示上下对齐
g.setColor(0x0000FF); //绘制坐标线
g.drawLine(getWidth()/2 ,0 ,getWidth()/2, getHeight());
g.drawLine(0 ,getHeight()/2 ,getWidth(), getHeight()/2);
g.setColor(0x000000);
g.drawString("TOP_LEFT",getWidth()/2,getHeight()/2,Graphics.TOP|Graphics.LEFT);
g.drawString("BOTTOM_LEFT",getWidth()/2,getHeight()/2,Graphics.BOTTOM|Graphics.LEFT);
g.drawString("TOP_RIGHT",getWidth()/2,getHeight()/2,Graphics.TOP|Graphics.RIGHT);
g.drawString("BOTTOM_RIGHT",getWidth()/2,getHeight()/2,Graphics.BOTTOM|Graphics.RIGHT);
}
public void drawType2(Graphics g)
{//演示字体
g.setFont(font1);
g.drawString("大号等宽加粗aMc",0,40,Graphics.TOP|Graphics.LEFT);
g.setFont(font2);
g.drawString("中号非等宽斜体aMc",0,70,Graphics.TOP|Graphics.LEFT);
g.setFont(font3);
g.drawString("中号系统字体",0,100,Graphics.TOP|Graphics.LEFT);
g.setFont(font4);
g.drawString("默认字体Default",0,130,Graphics.TOP|Graphics.LEFT);
}
public void drawType3(Graphics g)
{//演示MIDP v2.0字体
g.setFont(font_20_1);
g.drawString("字体FONT_STATIC_TEXT",0,40,Graphics.TOP|Graphics.LEFT);
g.setFont(font_20_2);
g.drawString("字体FONT_INPUT_TEXT",0,70,Graphics.TOP|Graphics.LEFT);
}
public void drawType4(Graphics g)
{//演示弧线与填充
g.setColor(0x00FF0000);//线条设置为红色
g.drawArc(20,30,30,30,0,90);
g.drawArc(55,30,30,30,0,-180);
g.drawArc(90,30,30,30,0,360);
g.setColor(0x0000FF00);//填充设置为绿色
g.fillArc(20,65,30,30,0,90);
g.fillArc(55,65,30,30,0,-180);
g.fillArc(90,65,30,30,0,360);
}
public void drawType5(Graphics g)
{//扇形图
g.setColor(0x00FF0000);//填充设置为红色
g.fillArc(40,40,110,110,0,130);
g.setColor(0x0000FF00);//填充设置为绿色
g.fillArc(40,40,110,110,130,90);
g.setColor(0x000000FF);//填充设置为蓝色
g.fillArc(40,40,110,110,220,140);
}
public void drawType6(Graphics g)
{//线条演示
g.setStrokeStyle(Graphics.SOLID);//线条设置实线
g.setColor(0x00000000);//线条设置为黑色
g.drawLine( 2,20,20,40);
g.drawLine(20,40,50,30);
g.drawLine(50,30,80,70);
g.drawLine(80,70,110,60);
g.setStrokeStyle(Graphics.DOTTED);//线条设置虚线
g.setColor(0x00FF0000);//线条设置为红色
g.drawLine( 2,40,20,30);
g.drawLine(20,30,50,50);
g.drawLine(50,50,80,10);
g.drawLine(80,10,110,40);
}
public void drawType7(Graphics g)
{//图片显示演示
if(null != imageLogo)
g.drawImage(imageLogo, 0, 20, Graphics.TOP|Graphics.LEFT);
}
public void drawType8(Graphics g)
{//脱机图像绘制演示
if(null != imageOffline)
g.drawImage(imageOffline, 0, 20, Graphics.TOP|Graphics.LEFT);
}
public void drawType9(Graphics g)
{//图像旋转绘制演示
//先绘制原始图像
if(null != imageLogo)
g.drawImage(imageLogo, 0, 20, Graphics.TOP|Graphics.LEFT);
//直接旋转并且绘制
if(null != imageLogo)
g.drawRegion(imageLogo,
0, 0, imageLogo.getWidth(), imageLogo.getHeight(),
Sprite.TRANS_MIRROR_ROT180, 0, 80,
Graphics.TOP|Graphics.LEFT);
//绘制经过翻转的图像
if(null != imageTrans1)
g.drawImage(imageTrans1, 60, 20, Graphics.TOP|Graphics.LEFT);
if(null != imageTrans1)
g.drawImage(imageTrans2, 60, 80, Graphics.TOP|Graphics.LEFT);
}
public void drawType10(Graphics g)
{//裁剪区演示
g.setClip(0,20,100,60);
g.setColor(0x0000FF00);//填充设置为绿色,
//填充圆形,但实际只能影响到剪裁区
g.fillArc(0,0,100,100,0,360);
g.setFont(font1);
g.setClip(0,120,60,20);
g.setColor(0x00000000);//字体设置为黑色
g.drawString("裁减区演示",60,120,Graphics.TOP|Graphics.HCENTER);
g.setClip(60,120,60,20);
g.setColor(0x0000FF00);//字体设置为绿色
g.drawString("裁减区演示",60,120,Graphics.TOP|Graphics.HCENTER);
}
public void drawType11(Graphics g)
{//Alpha效果演示
for(int i=0;i<20;i++)//不处理透明效果
g.drawRGB(bRGB,0, 4,i*4,i*4+20, 4,4, false);
for(int i=0;i<20;i++)//处理透明效果
g.drawRGB(bRGB,0, 4,i*4,i*4+16+20, 4,4, true);
}
protected void keyPressed(int keyCode)
{
}
protected void keyReleased(int keyCode)
{
}
protected void keyRepeated(int keyCode)
{
}
protected void pointerDragged(int x, int y)
{
}
protected void pointerPressed(int x, int y)
{
}
protected void pointerReleased(int x, int y)
{
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -