0

私の J2ME アプリには、いくつかのフォームとバックグラウンドで実行されているいくつかのスレッドがあります。これらのスレッドのいずれかで、アプリの上にメッセージ ボックスまたは通知バーを表示することにした場合、自分がどのフォームにいるのかわからないという問題があるため、メッセージ ボックスまたは通知の後にどのフォームを表示すればよいかわかりません。バーが隠されています。

誰か提案はありますか?

4

2 に答える 2

1

「Display.getCurrent()」を使用して、既に表示されている現在のフォームを取得できます。たとえば、このキャンバスは、画面に表示する前に現在のフォームを取得する SplashScreen です。

import javax.microedition.lcdui.Canvas;
/*    */ import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
/*    */ import javax.microedition.lcdui.Graphics;
/*    */ import javax.microedition.lcdui.Image;

public class StaticSplashScreen extends Canvas
        implements Runnable {

    private HelloMIDlet mainMidlet;
    private boolean isSplashOver;
    private long currentTime;
    private long previousTime;
    private Form currentForm;


    public StaticSplashScreen(HelloMIDlet mid) {
        this.mainMidlet = mid;
        currentForm = (Form) this.mainMidlet.getDisplay().getCurrent();
        this.previousTime = System.currentTimeMillis();
        new Thread(this).start();
    }

    protected void paint(Graphics g) {
        g.setColor(255, 255, 255);
        g.fillRect(0, 0, getWidth(), getHeight());
        g.setColor(0, 0, 0);
        g.drawString("In the name of God", 40, 70, 0);
    }

    public void run() {
        while (!this.isSplashOver) {
            this.currentTime = System.currentTimeMillis();

            if (this.currentTime - this.previousTime >= 10000L) {
                this.isSplashOver = true;
            }
        }
        this.mainMidlet.getDisplay().setCurrent(currentForm);
    }
}     

この midlet には、いくつかのコマンドを含む 2 つのフォームが表示されます。各フォームで「ヘルプ」を押すと、method()呼び出しと SplashScreen が表示され、10 秒後にそれを再度起動したフォームが表示されます。

public class HelloMIDlet extends MIDlet implements CommandListener {

...

public void commandAction (Command command, Displayable displayable) {
    ...
if (command == helpCommand) {
method ();
}
    ...
}

public Form getForm () {
if (form == null) {
form = new Form ("Welcome");
form.addCommand (getHelpCommand());
form.setCommandListener (this);
}
return form;
}

public void method () {

if (true) {
    StaticSplashScreen sss = new StaticSplashScreen(this);
    this.getDisplay().setCurrent(sss);
} else {
}
}

public Form getForm1 () {
if (form1 == null) {
form1 = new Form ("form1");
form1.addCommand (getHelpCommand ());
form1.setCommandListener (this);
}
return form1;
}

}
于 2012-04-11T05:56:22.757 に答える
1

ティッカーは、ディスプレイの上部をスクロールするテキストを提供するオブジェクトです。ティッカーは、画面ではなくディスプレイに関連付けられています。次のコードに示すように、Screen.setTicker(Ticker t) メソッドを使用して画面にティッカーを配置します。

ただし、同じ Ticker オブジェクトを複数の画面に関連付けることはできます。この実装では、ティッカーをディスプレイの一定の部分 (この場合はディスプレイの上部) にレンダリングします。ティッカーはアイテムではありません。java.lang.Object から直接派生することで、ティッカーを画面ではなくディスプレイに関連付けることができる理由の手がかりが得られます。実際には Form に配置されるものではないため、Item から派生させる必要はありません。

import javax.microedition.lcdui.Command; 
import javax.microedition.lcdui.CommandListener; 
import javax.microedition.lcdui.Display; 
import javax.microedition.lcdui.Displayable; 
import javax.microedition.lcdui.Ticker; 
import javax.microedition.lcdui.Form; 
/** 
This class demonstrates use of the Ticker MIDP UI 
component class. 
@see javax.microedition.lcdui.Gauge 
*/ 
public class TickerDemo extends Form 
implements CommandListener 
{ 
private String str = 
"This text keeps scrolling until the demo stops..."; 
private Ticker ticker = new Ticker(str); 
private Command back = new Command("Back", Command.BACK, 1); 
private static Displayable instance; 
/** 
Constructor. 
*/ 
public TickerDemo() 
{ 
super("Ticker demo"); 
instance = this; 
addCommand(back); 
setTicker(ticker); 
setCommandListener(this); 
} 
... 
}

これがあなたを助けることを願っています。ありがとう

于 2012-04-11T04:47:17.983 に答える