高级界面和低级界面的跳转

sailor7724 2010-06-29 05:34:00
我从高级界面跳到了低级界面,可以跳过来,但是不知道怎么回事,跳不回去了。
canvas中这样写的 Display.getDisplay(midlet).setCurrent(this.browserScreen);
跪求
...全文
302 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
gcpEmma 2010-07-05
  • 打赏
  • 举报
回复
看看,学习学习啊!
mochhk 2010-07-01
  • 打赏
  • 举报
回复
学习中~~~
重名率太高 2010-06-30
  • 打赏
  • 举报
回复
这是我的一个垃圾小程序,从高级到低级,再从低级到高级的。希望可以给LZ点帮助,代码如下:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

/**
* @author Administrator
*/
public class Yundong extends MIDlet implements CommandListener{
static Display dis;
Yundong1 yd;
String[] str = {"直线运动","斜线运动","圆周运动","椭圆运动","抛物线运动","波浪线运动"};
static List list;
Command select;

public Yundong(){
list = new List("运动大全",Choice.EXCLUSIVE,str,null);
select = new Command("select",Command.OK,1);
list.addCommand(select);
list.setCommandListener(this);

dis = Display.getDisplay(this);
}

public void startApp() {
dis.setCurrent(list);
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
}

public void commandAction(Command c, Displayable d) {
int index = list.getSelectedIndex(); // 获得选中的LIST的INDEX下标
yd = new Yundong1();
yd.setIndex(index);
dis.setCurrent(yd); //显示切换
}
}


import java.io.IOException;
import javax.microedition.lcdui.Canvas;

/*
* JUST FOR FAN --JED
*/
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

/**
*
* @author Administrator
*/
public class Yundong1 extends Canvas implements Runnable, CommandListener {

private int width, height;
private boolean flag;
private int index;
private Image ship;
private int shipx, shipy;
private int v = 10; // 速度
private int[] sin = new int[360];
private int[] cos = new int[360];
private int jiaodu = 0; // 初始角度
Command back;

public Yundong1() {
try {
width = this.getWidth();
height = this.getHeight();
flag = true;
shipx = shipy = 10;
ship = Image.createImage("/myship.png");

//初始化SIN COS数组
for (int i = 0; i < sin.length; i++) {
sin[i] = (int) (Math.sin(Math.PI / 180 * i) * 10000);
cos[i] = (int) (Math.cos(Math.PI / 180 * i) * 10000);
System.out.println(sin[i]);
}

//当选择的是波浪线的时候 重新初始化Y坐标
if (index == 5) {
shipy = height / 2;
}

back = new Command("back", Command.BACK, 1);

new Thread(this).start();
} catch (IOException ex) {
ex.printStackTrace();
}
}

public void setIndex(int index) {
this.index = index;
}

protected void paint(Graphics g) {
g.setColor(255, 255, 255);
g.fillRect(0, 0, width, height);

g.drawImage(ship, shipx, shipy, 20);

//判断显示什么运动
switch (index) {
case 0: //直线运动
shipx += 10; // 横向运动
//shipy+=10; //纵向运动
break;
case 1: // 斜线运动
shipx = shipx + v * cos[30] / 10000;
shipy = shipy + v * sin[60] / 10000;
//等同于 shipx += x方向上的速度分量 shipy += y方向上的速度分量
break;
case 2: //圆周运动
g.setColor(255, 0, 0);
g.drawArc(width / 2 - 50, height / 2 - 50, 100, 100, 0, 360);
//假定圆心为(width/2,height/2),半径为50
shipx = width / 2 + 50 * cos[jiaodu] / 10000; //对X坐标更新
shipy = height / 2 - 50 * sin[jiaodu] / 10000; //对Y坐标更新
jiaodu += 5; //角度改变并做一个越界的判断
if (jiaodu > 360) {
jiaodu = 0;
}
break;
case 3: //椭圆运动
g.setColor(255, 0, 0);
g.drawArc(width / 2 - 80, height / 2 - 50, 160, 100, 0, 360);
//同上,不过椭圆的a = 80,b=50
shipx = width / 2 + 80 * cos[jiaodu] / 10000;//对X坐标更新
shipy = height / 2 - 50 * sin[jiaodu] / 10000;//对Y坐标更新
jiaodu += 5;//角度改变并做一个越界的判断
if (jiaodu > 360) {
jiaodu = 0;
}
break;
case 4: //抛物线运动
//假定向下抛物线运动 p = 20
shipy += 5;
shipx = shipy * shipy / (40);
break;
case 5: //波浪线运动
//将波浪线画出来
g.setColor(255, 0, 0);
int n = 0;
for (int i = 0; i < sin.length; i++) {
n += 10;
if (n > 359) {
n = 0;
}
g.drawLine(10 + i, height / 2 + 50 * sin[n] / 10000, 10 + i, height / 2 + 50 * sin[n] / 10000);
}
// 画出中轴
g.drawLine(10, height / 2, width, height / 2);
//这里假设沿X轴方向运动,以height/2左右震动
shipx += 1; //X方向上均匀增加
shipy = height / 2 + 50 * sin[jiaodu] / 10000;//Y方向上以中轴为中心上下摆动
jiaodu += 10;//角度改变并做一个越界的判断
if (jiaodu > 359) {
jiaodu = 0;
}
break;
}
this.addCommand(back);
this.setCommandListener(this);
}

public void run() {
while (flag) {
try {
repaint();
Thread.sleep(500);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}

public void commandAction(Command arg0, Displayable arg1) {
Yundong.dis.setCurrent(Yundong.list);
}
}
hujie2048 2010-06-30
  • 打赏
  • 举报
回复
你这个地方是怎么回事?

canvas中这样写的 Display.getDisplay(midlet).setCurrent(this.browserScreen);

this.browserScreen
?? 你是在MIDlet中写的这句话还是在Canvas类里面?
你的Canvas类是不是MIDlet的内部类呢?
还有这个this,你到底是用在什么地方呢?
总之看得问题和疑惑很多的。
若能贴出源码的话 ,问题就好解决了。
gg0619 2010-06-30
  • 打赏
  • 举报
回复
你写错了额
我写过额
但是高低界面跳转会出现闪屏
至今不知为何
重名率太高 2010-06-30
  • 打赏
  • 举报
回复
想跳回去的话,简单一点的办法就是在主程序中把Display的对象设为static的,然后在低级界面中要跳转回高级界面的时候可以通过 主程序.Display的对象名.setCurrent(Displayable name); 跳转回高级界面去。或者你在从高级界面跳转到低级界面的时候不是要实例化继承CANVAS的那个类吗?在实例化的时候直接把主程序MIDLET中的DISPLAY对象传递过去,在继承CANVAS的那个类里用构造函数接受一下就可以,用的时候就可以直接用了。不知道我表达的LZ能看明白不?不能的话可以发个测试的代码上来。
麦田捕手 2010-06-29
  • 打赏
  • 举报
回复
不太明白,我通常的做法是在MIDlet类中写上一个控制高级界面和低级等界面跳转的方法,

public void changeInterface(String strName) {
if(strName=="MainCanvas") {
display.setCurrent(mc);
else if(strName=="Form") {
display.setcurrent(frm);
}
}
}
softice_ 2010-06-29
  • 打赏
  • 举报
回复
分2句试试,我以前也遇到过类似这样诡异的事情,或许是我学艺不精吧
网络咖啡 2010-06-29
  • 打赏
  • 举报
回复
看看是不是出异常了,代码逻辑是对的

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧