2013-08-05 5 views
0

메인에 JFrame을 정의하고 버튼을 클릭하거나 F를 누르면 화면이 전체 화면으로 바뀝니다. 이 작업을 수행하는 방법을 이해하지만 setFullScreenWindow에 대한 JFrame 인스턴스를 main에서 벗어나는 방법을 이해하지 못합니다. getter를 사용하여 플레이어의 x를 얻는 방법과 같습니다.main에서 JFrame을 어떻게 전체 화면으로 만들 수 있습니까?

여기 내 코드의 샘플입니다 :

private boolean fullscreen = false; 

public static void main(String args[]){ 
    Game game = new Game(); 

    //Set size of game (not shown) 

    JFrame frame = new JFrame(game.TITLE); 
    frame.add(game); 
    //JFrame setup stuff (not shown) 

    game.start(); 
} 

public void setFullScreen(JFrame frame){ 
    if(isFullScreenSupported){ 
     if(!fullscreen){ 
      frame.setUndecorate(true); 
      gd.setFullScreenWindow(frame); 
      frame.validate; 
     } else{ 
      gd.setFullScreenWindow(null); 
     } 
    } 
} 

내가 BTW) (시작 매개 변수를 추가 할 수 없습니다. 그 사이에 복잡하고 필요한 단계가 잔뜩 있습니다.

답변

0

귀하의 질문은 다소 불분명하지만, 창 모드와 전체 화면 모드 사이에서 JFrame을 토글하려고하는 것처럼 들립니다. 다음과 같은 방법을 포함하는 자체 포함 된 예가 있습니다.

package example.stackoverflow; 

import java.awt.GraphicsDevice; 
import java.awt.GraphicsEnvironment; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.BoxLayout; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.SwingUtilities; 

public class FullScreenExample 
{  
    static class GameFrame extends JFrame 
    { 
     private static final long serialVersionUID = 5386744421065461862L; 
     private static final GraphicsDevice gd = (GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices())[0]; 
     private static final boolean FULLSCREEN_SUPPORTED = gd.isFullScreenSupported(); 
     private static final String MAKE_FULLSCREEN_TEXT = "Make Full Screen"; 
     private static final String MAKE_WINDOWED_TEXT = "Make Windowed"; 
     private static final int WINDOWED_WIDTH = 400; 
     private static final int WINDOWED_HEIGHT = 300; 

     private final JButton fsButton = new JButton(MAKE_FULLSCREEN_TEXT); 
     private boolean isFullscreen = false; 

     public GameFrame(String title) 
     { 
      super(title); 
      setSize(WINDOWED_WIDTH, WINDOWED_HEIGHT); 
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      initComponents(); 
     } 

     public void initComponents() 
     { 
      setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS)); 
      if(FULLSCREEN_SUPPORTED) 
      { 
       fsButton.addActionListener(new ActionListener() 
       {  
        @Override 
        public void actionPerformed(ActionEvent e) 
        { 
         toggleFullscreen(); 
        } 
       }); 
       add(fsButton); 
      } 
      else 
      { 
       add(new JLabel("Fullscreen mode is not supported on this device")); 
      } 
     } 

     public void toggleFullscreen() 
     { 
      isFullscreen = !isFullscreen; 
      setVisible(false); 
      dispose(); 
      setUndecorated(isFullscreen); 
      if(isFullscreen) 
      { 
       fsButton.setText(MAKE_WINDOWED_TEXT); 
       gd.setFullScreenWindow(this); 
       validate(); 
      } 
      else 
      { 
       fsButton.setText(MAKE_FULLSCREEN_TEXT); 
       gd.setFullScreenWindow(null); 
       setVisible(true); 
      } 
     } 
    } 

    static class Game 
    { 
     private GameFrame gameFrame; 

     public Game(String title) 
     { 
      gameFrame = new GameFrame(title); 
     } 

     public void start() 
     { 
      SwingUtilities.invokeLater(new Runnable() 
      { 
       public void run() 
       { 
        getGameFrame().setVisible(true); 
       } 
      }); 
     } 

     public GameFrame getGameFrame() 
     { 
      return gameFrame; 
     } 
    } 

    public static void main(String[] args) 
    { 
     Game g = new Game("Foo"); 
     g.start();   
    } 
} 
+0

감사합니다. 도움을 주셔서 감사합니다.하지만 JFrame을 전체 화면으로 만드는 방법을 알고 있습니다. 다른 클래스에서 getter 및 setter를 사용하는 방법과 같이 JFrame을 기본에서 벗어나는 방법을 알아야합니다. – user2653616

+0

@ user2653616 : 여기에서 성취하려고하는 것은 아직도 명확하지 않습니다. main() 외부에서 JFrame 객체에 액세스하려면 main(), Game (위의 편집 된 샘플에 표시된)을 포함하는 클래스를 포함하는 예제를 다른 곳의 참조로 저장해야합니다. 당신이 그것을 검색 할 수있는 다른 객체. 그냥 main()에서 인스턴스화 할 수없고, 참조를 전달/저장하지 않고 다른 범위에서 사용하려고합니다. –

+0

죄송합니다. 잘못된 말로 표현했습니다. JFrame을 밖에 선언하고 main() 내부의 game.frame을 사용하여 참조 할 필요가 있다는 것을 알아 냈습니다. 노력해 주셔서 감사합니다! – user2653616

관련 문제