Java ME の「はい/いいえ」ダイアログ
-
09-06-2019 - |
質問
Java ME ミッドレットで使用する Yes/No ダイアログの簡単なソリューションを探しています。このように使いたいのですが、他の方法でも大丈夫です。
if (YesNoDialog.ask("Are you sure?") == true) {
// yes was chosen
} else {
// no was chosen
}
解決
必要なのは、 アラート:
アラートはユーザーにデータを表示し、次の表示可能な項目に進む前に一定時間待機する画面です。アラートにはテキスト文字列と画像を含めることができます。アラートの使用目的は、エラーやその他の例外的な状況をユーザーに通知することです。
2個付き コマンド (あなたの場合は「はい」/「いいえ」):
アラートに 2 つ以上のコマンドが存在する場合、アラートは自動的にモーダル アラートに変わり、タイムアウト値は常に永久になります。アラートは、コマンドが呼び出されるまでディスプレイに表示され続けます。
これらは、MIDP 1.0 以降でサポートされる組み込みクラスです。また、コードスニペットは決して機能しません。このような API は、ユーザーが選択して応答するのを待っている呼び出しスレッドをブロックする必要があります。これは、コールバックと委任に基づく MIDP の UI インタラクション モデルとはまったく逆の方向に進みます。独自のクラスを提供し、実装する必要があります。 コマンドリスナー, 、非同期実行用にコードを準備します。
以下は、Alert に基づく (未テスト!) クラスの例です。
public class MyPrompter implements CommandListener {
private Alert yesNoAlert;
private Command softKey1;
private Command softKey2;
private boolean status;
public MyPrompter() {
yesNoAlert = new Alert("Attention");
yesNoAlert.setString("Are you sure?");
softKey1 = new Command("No", Command.BACK, 1);
softKey2 = new Command("Yes", Command.OK, 1);
yesNoAlert.addCommand(softKey1);
yesNoAlert.addCommand(softKey2);
yesNoAlert.setCommandListener(this);
status = false;
}
public Displayable getDisplayable() {
return yesNoAlert;
}
public boolean getStatus() {
return status;
}
public void commandAction(Command c, Displayable d) {
status = c.getCommandType() == Command.OK;
// maybe do other stuff here. remember this is asynchronous
}
};
それを使用するには(繰り返しになりますが、テストされておらず、私の頭の上で):
MyPrompter prompt = new MyPrompter();
Display.getDisplay(YOUR_MIDLET_INSTANCE).setCurrent(prompt.getDisplayable());
このコードはプロンプトをアプリ内で現在表示されているフォームにしますが、 あなたのスレッドをブロックしません あなたが投稿した例のように。実行を継続し、commandAction の呼び出しを待つ必要があります。
他のヒント
私は Java ME でプログラムしたことはありませんが、オプションのパッケージのリファレンスで見つけました。高度なグラフィックスおよびユーザー インターフェイス API, 、これらのダイアログを作成するために Java SE API のように使用されます。 JOptionPane クラス
int JOptionPane.showconfirmDialog(java.awt.ComponentparentComponent, java.lang.Object >message, java.lang.String title, int optionType)
returnはjoptionpane.yes_option、joptionpane.no_option、joptionpane.cancel_optionです。