2012-04-10 105 views
0

在我的J2ME應用程序中,我有一些表單和一些在後臺運行的線程。如果在這些線程中的任何一箇中,我決定在應用程序的頂部顯示一個消息框或通知欄,我有問題不知道我是哪種表單,因此我不知道在消息框或通知之後要顯示哪種表單酒吧是隱藏的。在Java應用程序中顯示消息框或通知欄?

有沒有人有任何建議?

+0

你可以顯示代碼片段展示喲你的問題?最好是[SSCCE](http://www.sscce.org/「Short,Self Contained,Correct(Compilable),Example」) – gnat 2012-04-10 18:21:45

+0

使用需要使用Canvas ....不是J2me form ... – Baba 2012-04-10 22:25:14

回答

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

在這個MIDlet你可以看到兩種形式與一些commands.When按下「幫助」中的每個表單,()方法調用閃屏和和diplays 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; 
} 

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

希望這會對你有所幫助。謝謝

相關問題