2012-04-10 10 views
0

In meiner J2ME-App habe ich einige Formulare und einige Threads, die im Hintergrund laufen. Wenn ich in einem dieser Threads beschließe, ein Meldungsfeld oder eine Benachrichtigungsleiste oberhalb der App anzuzeigen, habe ich das Problem, nicht zu wissen, in welcher Form ich bin, daher weiß ich nicht, welches Formular nach der Nachrichtenbox oder Benachrichtigung angezeigt werden soll Bar ist versteckt.Anzeige eines Meldungsfelds oder einer Benachrichtigungsleiste in Java-Apps?

Hat jemand irgendwelche Vorschläge?

+0

können Sie zeige Codeschnipsel, die yo demonstrieren Dein Problem? vorzugsweise [SSCCE] (http://www.sscce.org/ "Kurz, eigenständig, korrekt (kompilierbar), Beispiel") – gnat

+0

verwenden müssen Leinwand .... nicht J2me Formular ... – Baba

Antwort

1

Sie können aktuelle Form erhalten, die bereits mit „Display.getCurrent()“ Zum Beispiel ist die Anzeige dieser Leinwand ist ein Splashscreen, die aktuelle Form vor Anzeigen im Fenster:

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

In diesem midlet Sie können zwei Formen mit einigen commands.When sehen Sie „Hilfe“ in jeder Form, Methode() Anrufe und Splashscreen diplays und nach 10 Sekunden drücken, können Sie das Formular sehen, dass sie wieder ins Leben gerufen:

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

Ein Ticker ist ein Objekt, das einen Bildlauf über den oberen Rand des Displays ermöglicht. Ein Ticker ist mit der Anzeige verknüpft, nicht mit dem Bildschirm. Sie platzieren einen Ticker auf einem Bildschirm mit der Screen.setTicker (Ticker t) -Methode, wie im folgenden Code gezeigt.

Sie können jedoch demselben Ticker-Objekt mehrere Bildschirme zuordnen. Die Implementierung rendert den Ticker auf einem konstanten Teil des Displays, in diesem Fall am oberen Rand des Displays. Ticker ist kein Item. Seine Ableitung direkt aus java.lang.Object gibt Ihnen einen Hinweis darauf, warum ein Ticker an die Anzeige und nicht an einen Bildschirm gebunden werden kann. Es muss nicht von Item abgeleitet werden, da es wirklich nicht in einem Formular platziert ist.

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

Hoffe, das wird Ihnen helfen. . Dank

Verwandte Themen