2012-04-10 11 views
0

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

誰にも提案はありますか?

+0

することができますヨーヨーを示すコードスニペットを表示するウルの問題?好ましくは[SSCCE](http://www.sscce.org/ "ショート、自己包含、正しい(コンパイル可能)、サンプル") – gnat

+0

キャンバスを使用する必要があります.... – Baba

答えて

1

あなたはすでに「Display.getCurrent()」と表示している現在のフォームを得ることができます。たとえば、このキャンバスは、画面に表示する前に、現在のフォームを取得スプラッシュ画面である。このミッドレットで

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); 
    } 
}  

あなたは、各形式の「ヘルプ」、方法()コールとスプラッシュ画面のdiplaysを押すと、10秒後にあなたがそれを再度立ち上げたのフォームを見ることができ、いくつかのcommands.Whenを持つ2つのフォームを見ることができます:

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; 
} 

} 
1

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

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

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); 
} 
... 
} 

希望すると、これが役立ちます。 。おかげで

関連する問題