2010-06-08 5 views
6

내 스윙 앱이 실행되는 동안 화면 크기가 변경됩니다 (예 : 1024x768에서 800x600).스윙 앱이 화면 크기 변경을 인식하도록 만드는 방법은 무엇입니까?

이 사실을 알리기 위해 내가들을 수있는 이벤트가 있습니까?

또는 두 초마다 화면 크기를 확인할 수 있지만 Toolkit.getScreenSize()는 계속 이전 값을 알려줍니다.
변경 후 화면 크기를 어떻게 얻을 수 있습니까?

환경 : 리눅스

(수세 ES (11)와 우분투 9.04에서 테스트가) 나는 당신의 도움을 주셔서 감사합니다. 그런 다음 widthvirtualBoundsheight를 조회 할 수 있습니다

Rectangle virtualBounds = new Rectangle(); 
    GraphicsEnvironment ge = GraphicsEnvironment. 
      getLocalGraphicsEnvironment(); 
    GraphicsDevice[] gs = 
      ge.getScreenDevices(); 
    for (int j = 0; j < gs.length; j++) { 
     GraphicsDevice gd = gs[j]; 
     GraphicsConfiguration[] gc = 
      gd.getConfigurations(); 
     for (int i=0; i < gc.length; i++) { 
      virtualBounds = 
       virtualBounds.union(gc[i].getBounds()); 
     } 
    } 


마튼

답변

2

:

System.out.println(GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDisplayMode().getWidth() + "x" + GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDisplayMode().getHeight()); 

//Ignore this block, it was simply to give me a chance to change my resolution 
Scanner readUserInput=new Scanner(System.in); 
System.out.println("Waiting on input, go change your resolution"); 
String myName=readUserInput.nextLine(); 

System.out.println(GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDisplayMode().getWidth() + "x" + GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getDisplayMode().getHeight()); 

출력 (ㅋ ㅋ가 입력 실제로)로했다 다음과 같습니다.

1440x900 
Waiting on input, go change your resolution 
blah 
1280x960 

분명히 여러 대의 스크린 장치가있는 경우 더 큰주의가 필요합니다.

1

은 (GraphicsConfiguration의 javadoc에서 촬영) 사용할 수있는, 표시 크기를 계산합니다.

멀티 모니터 설정에서도 작동합니다.

내가 아는 한 변경 사항을 감지하는 JDK 지원 방법이 없으므로 폴링 만 사용하거나 JNA 및 기본 코드를 사용하십시오. 최상위 창을 최대화 한 경우 디스플레이 크기를 조정하면 최대화 된 창 크기가 조정되므로 변경 사항도 수신 할 수 있습니다. 구성 요소 수신기 작성의 예는 sun tutorial을 참조하십시오.

최상위 창을 최대화하지 않은 경우 숨겨진 최대화 된 창을 만들어 동일한 효과를 얻을 수도 있습니다. 나는 이것이 확실하게 작동하는지는 말할 수 없지만, 시도해 볼만한 가치가있다. 나를 위해 일한,하지만 난 그게 리눅스에서 작동 할 것이라고 확실히 말할 수 있도록 나는 맥에있어 다음과 같은

+0

빠른 답변 감사합니다. 불행히도 위의 스 니펫은 우분투 9.04에서 이전 크기 (1024x768)를 계속 표시합니다. 감사합니다. Marton –

+0

본질적으로 수용된 답변과 동일한 API를 사용하기 때문에 이상합니다. – mdma

+0

예, 이상합니다. GraphicsConfiguration.getBounds()가 부적절한 값을 반환하는 반면, GraphicsDevice.getDisplayMode()는 좋은 값을 반환합니다. 반면에 GraphicsDevice.getDisplayMode()는 헤비급으로 보이므로 몇 초마다 그것을 수행하는 것이 가장 좋은 아이디어는 아닙니다. 대신 기본 전화를 선택해야 할 수도 있습니다. –

-1

Dimension screenSize = Toolkit.getDefaultToolkit(). getScreenSize();

f.setSize (screenSize.width, screenSize.height);

+0

이것은 질문에 대답하지 않습니다. – vektor

관련 문제