2009-07-20 3 views
8

OSX 시스템의 기본 디스플레이에서 Java 전체 화면 모드를 사용하려고 시도했지만 실패했습니다. 내가 시도한 것이 든간에 나는 디스플레이의 상단에서 '사과'메뉴 막대를 제거하는 것처럼 보이지 않습니다. 전체 화면에 페인트해야합니다. 아무도 메뉴를 제거하는 방법을 말해 줄 수 있습니까?OSX에서 Java로 전체 화면을 수행하는 방법

문제점을 보여주는 예제 클래스를 첨부했습니다. 시스템에서 완전히 빈 화면이 표시 될 것으로 보이는 메뉴가 계속 표시됩니다.

try { 
     gd.setFullScreenWindow(this); 
} 
finally { 
     gd.setFullScreenWindow(null); 
} 
이 이 finally 블록이 항상 실행

, 그래서 여기에서 발생하는 다음 창 (그 경우) 간단한 인스턴트에 대한 전체 화면이되고 있다는 것입니다 및이를 포기 :

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.JFrame; 

public class FullScreenFrame extends JFrame implements KeyListener { 

    public FullScreenFrame() { 
     addKeyListener(this); 
     setUndecorated(true); 
     GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); 

     if (gd.isFullScreenSupported()) { 
      try { 
       gd.setFullScreenWindow(this); 
      } 
      finally { 
       gd.setFullScreenWindow(null); 
      } 
     } 
     else { 
      System.err.println("Full screen not supported"); 
     } 

     setVisible(true); 
    } 

    public void keyTyped(KeyEvent e) {} 
    public void keyPressed(KeyEvent e) {} 
    public void keyReleased(KeyEvent e) { 
     setVisible(false); 
     dispose(); 
    } 

    public static void main (String [] args) { 
     new FullScreenFrame(); 
    } 
} 
+1

전체 화면 먹고 싶어하고 즉시 setFullScreenWindow (NULL)를 호출 창 (JFrame 등)이다? –

+1

@ mmyers : 그게 답입니다. 추가해주세요. 유혹에 저항 할 수 없습니다. – OscarRyz

답변

12

나는 당신의 문제에 대해 생각 즉시 화면.

Javadocs에 따라 이전에 setFullScreenWindow(this)을 호출 한 경우 setVisible(true)은 필요하지 않습니다.

그래서 나는이에 생성자를 변경합니다 : OS의 X (10.7 이상)에

public FullScreenFrame() { 
    addKeyListener(this); 

    GraphicsDevice gd = 
      GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); 

    if (gd.isFullScreenSupported()) { 
     setUndecorated(true); 
     gd.setFullScreenWindow(this); 
    } else { 
     System.err.println("Full screen not supported"); 
     setSize(100, 100); // just something to let you see the window 
     setVisible(true); 
    } 
} 
+0

감사합니다. try - finally 구조는 http://java.sun.com/docs/books/tutorial/extra/fullscreen/exclusivemode.html에서 가져온 것입니다. 여기서이 형식을 사용하면 응용 프로그램이 종료 된 후에도 화면을 유지하지 못하도록 방지 할 수 있습니다. 너무 일찍 출시되는 것을 방지하기 위해 화면 잠금을 적극적으로 유지해야합니다. 감사합니다. –

+2

거기에 "..."표시가 있습니까? 창문을 닫을 때까지 차단해야하는 부분이 있어야합니다. try ... finally 접근 방식은 예외가 발생했을 때 응용 프로그램이 화면을 해제하지 못하게하는 예외를 막습니다. (이상하게도,'setFullScreenWindow'가 윈도우를 보이더라도,'setVisible'처럼 차단하지 않습니다.) 디자인 상 의도적인지 궁금합니다. –

+0

이제 그래픽 장치가 jframe처럼 작동합니다. 즉 jpannels을 추가 할 수 있습니다. ? – fftk4323

6

는, 그것이 더 사용할 수있는 기본 전체 화면 모드를 사용 할 수 있습니다. 당신은 사용해야

com.apple.eawt.FullScreenUtilities.setWindowCanFullScreen(window,true); 
com.apple.eawt.Application.getApplication().requestToggleFullScreen(window); 

window 당신은 왜 당신이 당신의 창을 전체 화면으로하고 있습니다

+0

멋진! OS X에서 메뉴 가속기는 일반 그래픽 전체 화면 모드에서 작동하지 않기 때문에 필자는이 기능이 필요했습니다. 이것은 실제 OS X 솔루션입니다. +1 –

+0

이러한 클래스를 테스트하고 코드를 올바르게 실행하려면 리플렉션이 필요합니까? –

+0

@UnitedStatesOfAmerica 반사는 편도입니다. 또는 다음과 같이 비 사과 플랫폼에서 스텁 항아리를 사용할 수 있습니다. http://stackoverflow.com/a/2639395 –