【问题标题】:Canvas switching in J2MEJ2ME 中的画布切换
【发布时间】:2012-03-03 14:08:09
【问题描述】:

我有一个扩展画布的类。我又创建了一个画布类。但我无法在它们之间切换。

是否可以在 J2ME 中的画布之间切换?

【问题讨论】:

  • 你试过什么?顺便说一下,是可能(并且非常容易)在画布之间切换
  • 谢谢。我解决了我的问题 :)

标签: java-me midp lcdui


【解决方案1】:
import ...
public class MyMIDlet extends MIDlet{
    ...
    final Canvas1 c1;
    final Canvas2 c2;
    ...
    public MyMIDlet(){
        c1 = new Canvas1(this);
        c2 = new Canvas2(this);
    }
    ...
}

import ...
public class Canvas1 extends Canvas implements CommandListener{
    MyMIDlet myMidlet;
    Display disp;
    Command switchDisp;
    ...
    /**
    *constructor
    */
    public Canvas1(MyMIDlet myMidlet){
        this.MyMIDlet = myMidlet;
        disp = myMidlet.getDisplay();
        switchDisp = new Command("switch", Command.SCREEN, 0);
        this.addCommand(switchDisp);
        this.setCommandListener(this);
    }
    ...
    public void paint(Graphics g){
        g.setColor(255,255,255);
        g.drawString("canvas1", 0, 0, 0);
    }
    ...
    public void commandAction(Command cmd, Displayable displayable){
        disp.setCurrent(myMidlet.c2);
    }
}

import ...
public class Canvas2 extends Canvas implements CommandListener{
    MyMIDlet myMidlet;
    Display disp;
    Command switchDisp;
    ...
    /**
    *constructor
    */
    public Canvas1(MyMIDlet myMidlet){
        this.MyMIDlet = myMidlet;
        disp = myMidlet.getDisplay();
        switchDisp = new Command("switch", Command.SCREEN, 0);
        this.addCommand(switchDisp);
        this.setCommandListener(this);
    }
    ...
    public void paint(Graphics g){
        g.setColor(255,255,255);
        g.drawString("canvas2", 0, 0, 0);
    }
    ...
    public void commandAction(Command cmd, Displayable displayable){
        disp.setCurrent(myMidlet.c1);
    }
}   

可显示对象是具有被放置在显示器上的能力的对象。 Displayable 类实现了 Displayable 接口。
Display 类是为每个活动的 MIDlet 实例化的显示管理器,并提供检索有关设备显示功能的信息的方法。通过调用 Display.setCurrent() 方法使画布可见。
画布实现了 Displayable 接口。
Displayable 类是可以在设备屏幕上显示的 UI 元素,而 Display 类抽象了实际设备屏幕的显示功能并提供给您。它提供了显示或更改要显示的当前 UI 元素的方法。因此,MIDlet 使用 Display 类的 setCurrent(Displayable element) 方法在 Display 上显示 Displayable UI 元素。

【讨论】:

  • 在您的代码示例中,画布实例中不需要有 MyMIDlet myMidlet 字段。在构造函数中使用midlet对象获取Didplay后,不再需要了。
  • @gnat:我的代码就是一个例子。如果我们想将 MyMIDlet 设置为 CommandListener 来处理画布的命令动作(例如拨入某些动作并在其他动作中切换显示),我们将需要一个参考它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-09
相关资源
最近更新 更多