문제

Java ME 미들렛에서 사용할 수 있는 예/아니요 대화 상자에 대한 간단한 솔루션을 찾고 있습니다.이렇게 사용하고 싶지만 다른 방법도 괜찮습니다.

if (YesNoDialog.ask("Are you sure?") == true) {
  // yes was chosen
} else {
  // no was chosen
}
도움이 되었습니까?

해결책

당신은 알리다:

Alert는 사용자에게 데이터를 보여주고 다음 Displayable로 진행하기 전에 일정 시간 동안 기다리는 화면입니다.경고에는 텍스트 문자열과 이미지가 포함될 수 있습니다.경고의 용도는 사용자에게 오류 및 기타 예외 상황을 알리는 것입니다.

2개로 명령 (귀하의 경우에는 "예"/"아니요"):

경고에 두 개 이상의 명령이 있는 경우 자동으로 모달 경고로 전환되고 시간 초과 값은 항상 FOREVER입니다.경고는 명령이 호출될 때까지 디스플레이에 남아 있습니다.

이는 MIDP 1.0 이상에서 지원되는 내장 클래스입니다.또한 코드 조각이 작동하지 않습니다.이러한 API는 사용자가 선택하고 응답하기를 기다리는 호출 스레드를 차단해야 합니다.이는 콜백 및 위임을 기반으로 하는 MIDP의 UI 상호 작용 모델과 정확히 반대 방향으로 진행됩니다.자신만의 클래스를 제공하고 구현해야 합니다. CommandListener, 비동기 실행을 위한 코드를 준비합니다.

다음은 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.Component parentComponent, java.lang.Object >message, java.lang.String title, int optionType)

반환은 Joptionpane.yes_option, joptionpane.no_option, joptionpane.cancel_option 일 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top