java全屏独占模式

全屏独占模式
   经常使用DirectX API的程序员可能对全屏独占模式已经很熟悉了 。它允许程序员通过悬挂操作系统来直接在屏幕上进行绘制。在传统的Java GUI 程序中, AWT 通过事件分派线程和在适当的时候调用组件的paint()方法来传送来自操作系统的paint事件。在全屏独占模式应用中你可以通过程序进行绘制。 另外, 传统的GUI应用程序用户对于位深和屏幕尺寸的控制是有限的, 在全屏独占应用程序中, 可以通过显示模式(displayMode)来控制位深、屏幕长宽、刷新率。

   全屏独占模式是通过java.awt.GraphicsDevice 对象控制的 。在单个或多监视器系统中你可以通过调用java.awt.GraphicsEnvironment的getScreenDevices()方法来获得可用的screen deviece列表 ; 在单屏单监视器系统中, 可以通过调用getDefaultScreenDevice来获得.

public boolean isFullScreenSupported() 判断是否支持全屏模式

public void setFullScreenWindow(Window w) 将w设置成全屏模式,如果全屏模式不支持,w会置到(0,0)位置,重新设置大小以适应屏幕。当传递的参数为NULL时将退出全屏模式。

使用全屏独占模式中需要注意的问题和一些技巧:
  • 在进入全屏独占模式前首先检查是否支持全屏,如果不被支持的话性能将有可能降低。 
  • 使用try...finally 将使程序更加健壮. 它将避免你的程序无法退出全屏独占模式:
    GraphicsDevice myDevice;
    Window myWindow;
    
    try {
        myDevice.setFullScreenWindow(myWindow);
        ...
    } finally {
        myDevice.setFullScreenWindow(null);
    }
  • 通过setUndecorated()方法去除修饰
  • setResizable(false),在全屏独占模式中改变大小将会引发不可预测甚至危险的结果。

示例:

public class ScreenManager {

  private GraphicsDevice device;
 
 /**
  * 创建屏幕管理器对象
  */
 public ScreenManager(){
  device=GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
 }
 
 /**
  * 设置全屏独占模式 ,该方法可以将window设置为全屏模式
  */
 public void setFullScreen(DisplayMode displayMode, JFrame window){
  window.setUndecorated(true);//取消window装饰
  window.setResizable(false);
  
  device.setFullScreenWindow(window);
  
  if(displayMode!=null&&device.isDisplayChangeSupported()){
   device.setDisplayMode(displayMode);
  }
 }
 
 /**
  * 返回当前window
  */
 public Window getFullScreen(){
  return device.getFullScreenWindow();
 }
 
 /**
  * 退出全屏独占模式
  */
 public void restoreScreen(){
  Window window=device.getFullScreenWindow();
  if(window!=null){
   window.dispose();
  }
  device.setFullScreenWindow(null);
 }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值