2008-09-16 6 views
2

암호 대화 상자를 표시하는 애플릿을 작성해야합니다. 문제는 대화 상자가 항상 맨 위에 있도록 설정되어 있지만 사용자가 IE 창 대화 상자를 클릭해도 IE 창 뒤에 숨겨집니다. 그리고 대화 상자가 모달이고 이후에 보유하고 있습니다. 모두 IE 스레드 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), 프레임, 애플릿) 부모의 창을 만들어야합니다. 부모를 initlialize하는 그래서 좋은 방법이었다 : (예에 대한 http://www.raditha.com/java/mayscript.php 참조)

parent = javax.swing.SwingUtilities.getWindowAncestor(theApplet); 

답변

1

부모에게 어떤 주장을하고 있습니까?

애플릿의 부모를 사용하는 것이 더 나을 것입니다. (애플릿을 반환합니다 getRoot (구성 요소)) 애플릿 부모를 생략 할 getWindowAncestor를 사용

javax.swing.SwingUtilities.getWindowAncestor(theApplet) 

. 적어도 Java의 일부 버전에는 IE 윈도우와 동일한 프레임이있었습니다. YMMV.

+0

그럼 JOptionPane.getRootFrame과 같은 것을했습니다. 나는 먼저 그것을 들여다 볼 것이다. –

+0

Worked - thanks. –

0

당신은 자바 스크립트 통합을 사용하여 자바 스크립트에서 모달를 시작하려고 할 수 있습니다.

당신이 뭔가처럼 될 필요가 자바 스크립트 :

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

는 불행하게도이 좋은 찾고 모달을 갖는 모든 희망을 포기 의미

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

그리고 자바가 될 것입니다. 행운을 빕니다!

1

Dialog에서 toFront를 2 초마다 호출하는 배경 스레드를 만듭니다. 우리가 사용하는 코드 (나는 모든 것을 얻었기를 바랍니다) : 내가 애플릿에 익숙하지 해요로이 어둠 속에서 샷을

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; 
} 
+0

저에게 무자비한 힘이 조금 있습니다. 그러나 가장 쉬운 선택입니다. –

1

을,하지만 당신은 IE의 window.showModalDialog 내장을 살펴 수 방법. 사용하기가 상당히 쉽습니다. 아마도 이것과 노아의 제안을 조합 한 것일까 요?