문제

암호 대화 상자를 표시하는 애플릿을 작성해야 합니다.문제는 대화 상자가 항상 맨 위에 표시되도록 설정되어 있지만 사용자가 IE 창을 클릭하면 대화 상자가 IE 창 뒤에 숨겨진다는 것입니다.그리고 대화 상자는 모달이고 유지되므로 모두 IE 스레드 IE 창이 새로 고쳐지지 않고 대화 상자 창이 여전히 IE 위에 그려집니다(새로 고쳐지지 않음).이 동작은 사용자를 혼란스럽게 합니다(그들은 보다 IE 상단에 대화 상자가 있지만 새로 고침되지 않아 정지된 것처럼 보입니다.

그래서 저는 그 대화를 모든 것 위에 유지하는 방법이 필요합니다.하지만 이 문제에 대한 다른 해결책이 있으면 좋을 것입니다.

코드는 다음과 같습니다.

        PassDialog dialog = new PassDialog(parent);
        /* do some non gui related initialization */
        dialog.pack();
        dialog.setLocationRelativeTo(null);
        dialog.setAlwaysOnTop(true);
        dialog.setVisible(true);

해결:@shemnon이 언급했듯이 모달 대화 상자의 (null, Frame, Applet) 부모 대신 창을 만들어야 합니다.부모를 초기화하는 좋은 방법은 다음과 같습니다.

parent = javax.swing.SwingUtilities.getWindowAncestor(theApplet);
도움이 되었습니까?

해결책

부모에 대해 어떤 인수를 사용하고 있습니까?

애플릿의 부모를 사용하면 더 나은 행운을 누릴 수 있습니다.

javax.swing.SwingUtilities.getWindowAncestor(theApplet)

getWindowAncestor를 사용하면 상위 애플릿을 건너뜁니다(getRoot(comComponent)는 애플릿을 반환합니다).적어도 일부 Java 버전에는 IE 창과 동일한 프레임이 있었습니다.YMMV.

다른 팁

2초마다 대화 상자에서 toFront를 호출하는 백그라운드 스레드를 만듭니다.우리가 사용하는 코드(모든 것을 얻었기를 바랍니다):

class TestClass {
protected void toFrontTimer(JFrame frame) {
    try {
        bringToFrontTimer = new java.util.Timer();
        bringToFrontTask = new BringToFrontTask(frame);
        bringToFrontTimer.schedule( bringToFrontTask, 300, 300);
    } catch (Throwable t) {
        t.printStackTrace();
    }
}

class BringToFrontTask extends TimerTask {
    private Frame frame;
    public BringToFrontTask(Frame frame) {
        this.frame = frame;
    }
    public void run()
    {
        if(count < 2) {
            frame.toFront();
        } else {
            cancel();
        }
        count ++;
    }
    private int count = 0;
}

public void cleanup() {
    if(bringToFrontTask != null) {
        bringToFrontTask.cancel();
        bringToFrontTask = null;
    }
    if(bringToFrontTimer != null) {
        bringToFrontTimer = null;
    }
}

java.util.Timer bringToFrontTimer = null;
java.util.TimerTask bringToFrontTask = null;
}

저는 애플릿에 익숙하지 않기 때문에 어둠 속에서 찍은 사진이지만 IE의 내장 window.showModalDialog 메소드를 살펴볼 수 있습니다.사용하기가 매우 쉽습니다.아마도 이것과 노아의 제안을 결합한 것이 아닐까요?

JavaScript 통합을 사용하여 JavaScript에서 모달을 시작해 볼 수도 있습니다(참조 http://www.raditha.com/java/mayscript.php 예를 들어).

필요한 JavaScript는 다음과 같습니다.

function getPassword() {
  return prompt("Enter Password");
}

그리고 Java는 다음과 같습니다.

password = jso.call("getPassword", new String[0]);

불행하게도 이는 멋진 모달을 갖겠다는 모든 희망을 포기하는 것을 의미합니다.행운을 빌어요!

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