2009-07-20 34 views
8

Tôi đã cố gắng và không sử dụng chế độ toàn màn hình java trên màn hình chính của hệ thống OSX. Bất cứ điều gì tôi đã cố gắng tôi dường như không thể thoát khỏi thanh menu "táo" từ phía trên cùng của màn hình. Tôi thực sự cần phải vẽ trên toàn bộ màn hình. Bất cứ ai có thể cho tôi biết làm thế nào để thoát khỏi menu?Làm thế nào tôi có thể làm toàn màn hình bằng Java trên OSX

Tôi đã đính kèm một lớp mẫu thể hiện sự cố - trên hệ thống của tôi, menu vẫn hiển thị ở nơi tôi mong đợi sẽ thấy màn hình hoàn toàn trống.

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

Tại sao cậu lại làm cho cửa sổ của bạn toàn màn hình và sau đó ngay lập tức gọi setFullScreenWindow (null)? –

+1

@mmyers: Đó là câu trả lời. Xin vui lòng thêm là như vậy, tôi không thể cưỡng lại sự cám dỗ – OscarRyz

Trả lời

12

Tôi nghĩ vấn đề của bạn là ở đây:

try { 
     gd.setFullScreenWindow(this); 
} 
finally { 
     gd.setFullScreenWindow(null); 
} 

finally khối luôn thực hiện, vì vậy những gì xảy ra ở đây là bạn cửa sổ trở nên đầy đủ màn hình cho một khoảnh khắc ngắn ngủi (nếu đó) và sau đó tuyên bố từ bỏ các ngay lập tức.

Ngoài ra, không cần thiết setVisible(true) khi trước đây bạn đã gọi setFullScreenWindow(this), theo số Javadocs.

Vì vậy, tôi sẽ thay đổi các nhà xây dựng như thế này:

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

Cảm ơn - điều đó hoạt động! Việc thử - cuối cùng xây dựng được lấy từ http://java.sun.com/docs/books/tutorial/extra/fullscreen/exclusivemode.html nơi nó gợi ý biểu mẫu này để ngăn ứng dụng giữ màn hình sau khi thoát - nhưng có vẻ như Tôi sẽ phải chủ động giữ khóa trên màn hình để ngăn chặn nó được phát hành quá sớm. Cảm ơn! –

+2

Lưu ý "..." trong đó? Đó là nơi mà một cái gì đó mà khối cho đến khi cửa sổ đóng cửa nên đi. Việc thử ... cuối cùng cũng chỉ đơn giản là bảo vệ chống lại các ngoại lệ có thể khiến cho ứng dụng của bạn không thể phát hành màn hình khi nó được thực hiện. (Oddly, mặc dù 'setFullScreenWindow' làm cho cửa sổ hiển thị, nó không chặn như' setVisible'. Tôi tự hỏi nếu đó là do thiết kế.) –

+0

Bây giờ thiết bị đồ họa hoạt động như một jframe tức là bạn có thể thêm jpannels vào nó ? – fftk4323

6

Trên OS X (10.7 trở lên), nó là tốt hơn để sử dụng chế độ toàn màn hình tự nhiên có sẵn. Bạn nên sử dụng:

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

nơi window là cửa sổ (JFrame, vv) mà bạn muốn chụp toàn màn hình

+0

Tuyệt vời! Tôi cần điều này bởi vì, ít nhất là trên OS X, trình tăng tốc menu không hoạt động ở chế độ toàn màn hình đồ họa thông thường. Đây là giải pháp OS X thực sự +1 –

+0

Bạn sẽ cần sự phản chiếu để kiểm tra các lớp đó và chạy mã phải không? –

+0

@UnitedStatesOfAmerica Phản ánh là một cách. Ngoài ra, bạn có thể sử dụng một cái cuống trên nền tảng không phải táo, như được cung cấp ở đây: http://stackoverflow.com/a/2639395 –

Các vấn đề liên quan