问一个简单的问题,有关进度条,不知道怎么用

octopusfish 2005-09-30 01:35:10
怎么由这个进度条切换到一个form,不会用,麻烦给讲解一下


import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class xpsroll extends Canvas
implements Runnable,CommandListener
{

 int x = 51;
 int y = 51;
 int w2 =1 ;
 int r = 0;
 Command st = new Command("Began",Command.OK,1);
 Command op = new Command("Stop",Command.STOP,1);
 public xpsroll()
 {

 addCommand(st);

 setCommandListener(this);
 }
 public void paint(Graphics g)
 {
 clear(g);
 g.setColor(0,0,0);
 g.drawRect(50,50,102,12);
 drawRt2(g,x,y,w2,10);
 }
 public void clear(Graphics m)
 {
 m.setColor(255,255,255);
 m.fillRect(0,0,getHeight(),getWidth());
 }


 public void drawRt2(Graphics n,int x2,int y2,int w,int h)
 {
 n.setColor(0,0,255);
 n.drawRect(x2,y2,w,h);
 n.fillRect(x2,y2,w,h);
 }
 boolean con;

 public void commandAction(Command o,Displayable s)
 {
 if(o == st)
 {
 con = true;
 removeCommand(st);
 addCommand(op);
 Thread t = new Thread(this);
 t.start();

 }else if(o == op)
 {
 con = false;
 }


 }
 int d = 50;
 public void run()
 {
 long a = 0;
 long b = 0;
 long c = 0;
 while(con)
 {
 a = System.currentTimeMillis();
 w2 += 1;
 r ++;
 if(r > 100)
 {
 r = 0;
 }else if(w2 == 100)
 {
 con = false;
 }
 b = System.currentTimeMillis();
 c = b - a;
 if(c < d)
 {
 try
 {
 Thread.sleep(d - c);
 }catch(Exception e){}
 }
 repaint();
 }
 }
}
...全文
313 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
octopusfish 2005-10-24
  • 打赏
  • 举报
回复
把断点置于display.setCurrent(x);如果单步跟踪的话,就会显示login,但是直接运行就不能够显示login
tequlia_pop 2005-10-22
  • 打赏
  • 举报
回复
单步的时候是什么,而直接运行又指的什么?
octopusfish 2005-10-18
  • 打赏
  • 举报
回复
单步的时候可以显示login界面,而直接运行就停在x的显示上了
octopusfish 2005-10-18
  • 打赏
  • 举报
回复
明白一些了,可是为什么单步可以,而直接运行不行呢?我是这样用的,login为一个form。
xpsroll x = new xpsroll()
protected void startApp() throws MIDletStateChangeException {
display.setCurrent(x);
if (x.w2 == 100)
{
Display.getDisplay(this).setCurrent(login);
}
贝壳鱼 2005-10-17
  • 打赏
  • 举报
回复
在一个线程中,实现程序的等待进度指示,就是一边画进度条,一边处理数据。数据处理一点。进度条的宽度就加一些。

loadData1();
len+=5;
loadData2();
len+=5;
......
octopusfish 2005-10-17
  • 打赏
  • 举报
回复
我用了这种方法,可是不知道为什么单步走的话就可以显示,但是要使直接运行就不显示,不知道为什么阿?难道和线程有关系?对线程不熟悉,请帮忙看看
octopusfish 2005-10-08
  • 打赏
  • 举报
回复
然后呢,form如何显示呢,在Canvas里面不能显示form啊
homesos 2005-10-08
  • 打赏
  • 举报
回复
Canvas与form可以说是同等等级,当然不能相互置于内显示使用。

使用
Display.getDisplay(this).setCurrent(...);//自己查下看看
设置显示窗口,具体怎么用楼主自定吧。
homesos 2005-09-30
  • 打赏
  • 举报
回复
public void paint(Graphics g)
 {
 clear(g);
 g.setColor(0,0,0);
 g.drawRect(50,50,102,12);
 drawRt2(g,50,50,w2,10);
if (w2 >= 102) //w2长度为多少时,表示进度满可自定,这里是根据现有rect的宽度
{
//表明进度已满
}
 }
homesos 2005-09-30
  • 打赏
  • 举报
回复
主要的是进行两个长度的比较,你分份的时候是根据哪个长度为标准的,判断是否进度到头时,就要判断现画的长度是否与这个判断时的依据长度一致,
homesos 2005-09-30
  • 打赏
  • 举报
回复
举个例子吧

进度条是自己画吧?
长度比较重要,设长度为len,
高为hight 起始点为x,y
将其为分为100份(totalValue)

◆设置进度条对相应值的显示
设置一个方法来专门设置其值,比如public/private void setValue(int value)//参数现值

在这个方法,(value/totalValue) * len,得到应画的长度,
fillRect(x, y, (value/totalValue) * len, hight);

◆进度值满时,自动切换界面
可根据上面的已有的进度值进行判断,也可对坐标进行判断
因为进度条(已经画出)的长度是已知的,所以可以判断现在填充的长度与进度条的长度是否一致就行了(可能会有些误差)
octopusfish 2005-09-30
  • 打赏
  • 举报
回复
我也是这么想的,可是不会写,呵呵,能不能知道一下
homesos 2005-09-30
  • 打赏
  • 举报
回复
不知有没有误解楼主的意思,
进度条一有变动就会重绘repaint
那就在绘画方法(paint)中进行判断坐标值不就行了吗?
octopusfish 2005-09-30
  • 打赏
  • 举报
回复
进度条满后自动切换到form
layueer 2005-09-30
  • 打赏
  • 举报
回复
up

13,100

社区成员

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

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