문제

간단한 질문 :

스윙 프레임이 완전히 모달이 될 수 있습니까 (다른 모든 Windows를 차단)?

다음을 시도했지만 여전히 다른 앱 Windows (이 브라우저와 같은)를 클릭 할 수 있습니다.

JDialog myDialog  = .... 
myDialog.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);

가능하면 몇 가지 코드를 붙여 넣으십시오.

도움이 되었습니까?

해결책

JFrame은 모달로 설계되지 않았습니다. JDialog를 사용하지만 JFRAME 기능을 잃게됩니다. 손실로 살 수 없다면, 이벤트 큐를 차단하고 차단에서만 이벤트 만 수락하기 위해 자신의 것으로 교체해야합니다.

보다 모달 내부 프레임 생성 JFrame에도 적용 할 수있는 내부 프레임을 사용하여 설명합니다.

편집 : OUPS, 내 대답은 약간 꺼져있는 것 같습니다. 코드 예제에서 이미 대화 상자 서브 클래스를 사용하고 있음을 보여주기 때문입니다.

다른 팁

대화는 전 세계적으로 모달이 아닙니다. 모든 현대의 OS는 그 히그의 글로벌 양식을 강력하게 낙담 시키며 (작동 할 수 없다는 사실에 의해 지적 된 바와 같이) 기능을 더 이상 사용하지 않았을 수도 있습니다. 앱이 있어야합니다 절대 전체 시스템에서 이벤트를 훔치십시오. 그것은 나쁜 디자인 일뿐 만 아니라 내 책에서 거의 범죄입니다.

대부분의 사람들이 여러 앱 사이의 멀티 태스킹을 좋아한다는 사실을 무시하면 전 세계 모달 대화 상자를 열고 응용 프로그램이 정지되는 시나리오는 어떻습니까? ctrl+alt+del은 앱을 죽이기 위해 Windows에서 작동하지만 전 세계 모달 대화 상자가있는 Mac에서 CMD+OPT+Escape에 대해 잘 모르겠습니다 (Cocoa조차도 가지다 글로벌 양식?). Linux 플랫폼 중 어느 것도 제안한 것처럼 UI를 완전히 제어 한 앱을 죽이는 멋진 방법이 없습니다 (X11을 완전히 죽이고 새로운 인스턴스를 처음부터 시작해야 함).

내 대답 : 다른 방법을 찾으십시오. 나는 당신의 의뢰인이 무엇을 요구하는지 상관하지 않습니다. 그들은 이것을 원하지 않습니다.

글로벌 모달에 대해 잘 모르겠지만 여기에 아이디어가 있습니다.

  1. 데스크탑의 스크린 샷을 찍으십시오.
  2. 전체 화면으로 가십시오.
  3. 대화 상자를 나타냅니다.

데스크탑은 가짜 스크린 샷이므로 클릭하려는 시도를 무시할 수 있습니다.

전체 화면 샘플:

private void toggleFullScreenWindow() {
  GraphicsEnvironment graphicsEnvironment
    = GraphicsEnvironment.getLocalGraphicsEnvironment();
  GraphicsDevice graphicsDevice
    = graphicsEnvironment.getDefaultScreenDevice();
  if(graphicsDevice.getFullScreenWindow()==null) {
    dialog.dispose(); //destroy the native resources
    dialog.setUndecorated(true);
    dialog.setVisible(true); //rebuilding the native resources
    graphicsDevice.setFullScreenWindow(dialog);
  }else{
    graphicsDevice.setFullScreenWindow(null);
    dialog.dispose();
    dialog.setUndecorated(false);
    dialog.setVisible(true);
    dialog.repaint();
  }
  requestFocusInWindow();
}

참고 : 전체 화면 독점 모드 API.

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