|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
windows系统样,他们做了什么事或者留了一些后门程序,谁都不知道,二,java开发是跨平台,任何系统上都可以运行,对于保密型系统和大型系统开发这是必要的菜单 我们晓得MIDP的图形用户界面分为两类,分离是初级图形用户界面和初级用户界面。一样平常来说初级图形用户界面类利用起来对照便利,可移植性强,可是程序员对他的把持才能也很低,由于它们的界面体现是由底层把持的,而不是我们把持的。比拟初级UI类,初级UI类则利用起来更难一些,可是把持才能更强,能够做出本人必要的界面。
Canvas和Graphics是我们必需纯熟利用的两个类,分离代表了画布和画笔(现实上更丰厚,临时这么比方)。而我们则是画画的人,而引导我们怎样下笔的就是javadoc了,再加上勤劳勉力必定能够画出不错的界面。好比tabbed菜单,二级菜单等。这里我们报告一个复杂菜单的制造体例。
在画菜单的时分,必要思索两面的成绩,第一是盘算绝对地位,让菜单可以尽量顺应更多的机型,只管少利用相对值。比方画上面的菜单的时分
我们应当盘算菜单的每一个条目标高度,这些能够有Font的高度算出,固然你能够给条目留一些padding的间隔。还应当盘算条目标最宽值,究竟每一个条目标字数纷歧样。如许基础晓得了全部菜单占的空间。最初还必要盘算菜单在屏幕的地位。菜单的绘制以下所示:
publicvoidpaint(Graphicsg){
//扫除屏幕
intcolor=g.getColor();
g.setColor(0xFFFFFF);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(color);
//盘算全部菜单的高度,宽度和(x,y)
intrectWidth=preferWidth;
intrectHeight=preferHeight*LABELS.length;
intx=(getWidth()-rectWidth)/2;
inty=(getHeight()-rectHeight)/2;
//画矩形
g.drawRect(x,y,rectWidth,rectHeight);
for(inti=1;i<LABELS.length;i++){
g.drawLine(x,y+preferHeight*i,x+rectWidth,y+preferHeight*i);
}
//画菜单选项,并依据selected的值判别核心
for(intj=0;j<LABELS.length;j++){
if(selected==j){
g.setColor(0x6699cc);
g.fillRect(x+1,y+j*preferHeight+1,rectWidth-1,preferHeight-1);
g.setColor(color);
}
g.drawString(LABELS[j],x+8,y+j*preferHeight+4,Graphics.LEFT|Graphics.TOP);
}
}
第二个主要的成绩是:核心的切换,在初级UI类中,这是不必要我们处置的。可是利用Canvas制造菜单必要本人来处置核心的挪动,这里我们界说一个int范例变量selected,来纪录核心地点的菜单条目地位,也就是选择的索引。当用户按键的时分,我们在keyPressed()办法中判别用户的挪动偏向,对selected举行相干的加减运算,然后repaint()全部屏幕便可。
publicvoidkeyPressed(intkeyCode){
//依据用户输出更新selected的值,偏重新绘制屏幕
intaction=this.getGameAction(keyCode);
switch(action){
caseCanvas.FIRE:
printLabel(selected);
break;
caseCanvas.DOWN:
selected=(selected+1)%4;
break;
caseCanvas.UP:{
if(--selected<0){
selected+=4;
}
break;
}
default:
break;
}
repaint();
serviceRepaints();
}
如许我们就制造出了一个基础的菜单,你还能够发扬设想给被选中的菜单增添动画效果。MenuCanvas的代码以下所示:
packagecom.j2medev.chapter3;
importjavax.microedition.lcdui.*;
publicclassMenuCanvasextendsCanvas{
//selected变量标志了核心地位
privateintselected=0;
privateintpreferWidth=-1;
privateintpreferHeight=-1;
publicstaticfinalint[]OPTIONS={0,1,2,3};
publicstaticfinalString[]LABELS={"NewGame","Setttings","HighScores","Exit"};
publicMenuCanvas(){
selected=OPTIONS[0];
//盘算菜单选项的长度和高度值
Fontf=Font.getDefaultFont();
for(inti=0;i<LABELS.length;i++){
inttemp=f.stringWidth(LABELS[i]);
if(temp>preferWidth){
preferWidth=temp;
}
}
preferWidth=preferWidth+2*8;
preferHeight=f.getHeight()+2*4;
}
publicvoidpaint(Graphicsg){
//扫除屏幕
intcolor=g.getColor();
g.setColor(0xFFFFFF);
g.fillRect(0,0,getWidth(),getHeight());
g.setColor(color);
//盘算全部菜单的高度,宽度和(x,y)
intrectWidth=preferWidth;
intrectHeight=preferHeight*LABELS.length;
intx=(getWidth()-rectWidth)/2;
inty=(getHeight()-rectHeight)/2;
//画矩形
g.drawRect(x,y,rectWidth,rectHeight);
for(inti=1;i<LABELS.length;i++){
g.drawLine(x,y+preferHeight*i,x+rectWidth,y+preferHeight*i);
}
//画菜单选项,并依据selected的值判别核心
for(intj=0;j<LABELS.length;j++){
if(selected==j){
g.setColor(0x6699cc);
g.fillRect(x+1,y+j*preferHeight+1,rectWidth-1,preferHeight-1);
g.setColor(color);
}
g.drawString(LABELS[j],x+8,y+j*preferHeight+4,Graphics.LEFT|Graphics.TOP);
}
}
publicvoidkeyPressed(intkeyCode){
//依据用户输出更新selected的值,偏重新绘制屏幕
intaction=this.getGameAction(keyCode);
switch(action){
caseCanvas.FIRE:
printLabel(selected);
break;
caseCanvas.DOWN:
selected=(selected+1)%4;
break;
caseCanvas.UP:{
if(--selected<0){
selected+=4;
}
break;
}
default:
break;
}
repaint();
serviceRepaints();
}
//showNotify()在paint()之前被挪用
publicvoidshowNotify(){
System.out.println("showNotify()iscalled");
}
privatevoidprintLabel(intselected){
System.out.println(LABELS[selected]);
}
}
Java编译的是字节码,跟C++相反,启动不够快,效率不够高,难以精确控制内存,但是优点是编程比C++容易,代码比较安全但是容易留下性能隐患,跨平台靠字节码在各个平台复制(一处编译到处调试) |
|