전체화면으로 동작하는 Java 어플리케이션

캡스톤 프로젝트로 TV 어플리케이션을 개발하던 중 현재 OpenMHP를 이용해서 TV 어플리케이션을 시험하고 있는데 데모를 위해 전체화면으로 동작해야 하는 필요성이 생기게 되었다. 따라서 OpenMHP의 소스 코드를 수정해야 했다.

일반적으로 자바 프로그램은 하나의 Frame위에서 여러 작업을 수행하게 된다. 하지만 Frame의 테두리가 없이 전체화면으로 동작하는 프로그램을 개발해야 하는 경우가 있다. 보통 영화를 감상할때 플레이어에서 'Enter키'를 누르게 되면 현재 윈도우 사이즈에 맞는 전체화면으로 동작하는 것을 생각하면 될 것이다.

다음은 전체화면으로 동작하는 Viewer를 작성한 것이다. 전체화면으로 동작시키기는 생각보다 쉽다. 그래픽 장치를 얻어와서 전체모드로 바꿔주는 자바 API가 존재한다.
import java.awt.Graphics;
import java.awt.GraphicsEnvironment;
import java.awt.Image;
import java.awt.Frame;
import java.awt.Toolkit;
import java.awt.MediaTracker;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.net.MalformedURLException;
import java.net.URL;
public class FullModeViewer extends Frame {

     private Image image;
 
     // Class constructor 
     public FullModeViewer(String source) throws MalformedURLException {
          // loading image
          if (source.startsWith("http://"))   // http:// URL was specified
               image = Toolkit.getDefaultToolkit().getImage(new URL(source));
          else
               image = Toolkit.getDefaultToolkit().getImage(source); // otherwise - file

          MediaTracker mediaTracker = new MediaTracker(this);
          mediaTracker.addImage(image, 0);
          try {
               mediaTracker.waitForID(0);
          } catch (InterruptedException ie) {
               System.err.println(ie);
               System.exit(1);
          }
          // Exiting program on window close
          addWindowListener(new WindowAdapter() {
               public void windowClosing(WindowEvent e) {
                    System.exit(0);
          }
          });
          // Exitig program on mouse click
          addMouseListener(new MouseListener() {
               public void mouseClicked(MouseEvent e) { System.exit(0); }
               public void mousePressed(MouseEvent e) {}
               public void mouseReleased(MouseEvent e) {}
               public void mouseEntered(MouseEvent e) {}
               public void mouseExited(MouseEvent e) {}
          });
          // remove window frame
          this.setUndecorated(true);
 
          // window should be visible
          this.setVisible(true);
          // switching to fullscreen mode
          GraphicsEnvironment.getLocalGraphicsEnvironment().
          getDefaultScreenDevice().setFullScreenWindow(this);
     }
 
     public void paint (Graphics g) {
          if (image != null)                              // if screenImage is not null (image loaded and ready)
               g.drawImage(image, 0, 0, null);
      }
     // Program entry
     public static void main(String[] args) throws Exception {
          if (args.length < 1)                         // by default program will load AnyExample logo
               new FullModeViewer(http://image_path);
          else
               new FullModeViewer(args[0]);  // or first command-line argument
      }
}
신고
Posted by Proneer

댓글을 달아 주세요

  1. 아니... 글작성하는 시간보다 키워드 색깔 넣는데 더 많은 시간을 소비했다. 쩝...
    언제쯤 소스코드를 삽입할 수 있는 기능이 추가될지....

    2007.09.10 12:37 신고 [ ADDR : EDIT/ DEL : REPLY ]


티스토리 툴바