在JAVA中,使用setDisplayMode更改分辨率以进行全屏应用 [英] In JAVA, changing resolution with setDisplayMode for fullscreen application

查看:161
本文介绍了在JAVA中,使用setDisplayMode更改分辨率以进行全屏应用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是JAVA语言的初学者,正在尝试学习如何创建全屏应用程序。

I am a beginner int the JAVA language and is trying to learn how to create full screen applications.

我正在尝试创建一个简单的应用程序,在运行时,在屏幕中央显示带有蓝色背景和简单文本行的全屏(从位置400x300开始)。应用程序的分辨率设置为800x600。

I am trying to create a simple application where when run, displays a full screen with blue back ground and a simple line of text in the center of the screen( it starts at position 400x300). The resolution of the application is set to 800x600.

我在运行OSX Lion的MacbookAir上运行代码,屏幕分辨率为1440x900。问题是,尽管获得了我预期的蓝色背景,但文本仅显示在屏幕的左上角。当我增加它的位置时,文本的位置将继续向下移动,直到它消失时超过1440x900。我猜测屏幕分辨率仍然设置为1440x900,而不是800x600。

I am running the code on a MacbookAir, running OSX Lion, with a screen resolution of 1440x900. The problem is, despite getting a blue background as I had expected, the text only appears on around upper left of the screen. The position of the text would continue to move down and right as I increase it's position until it reaches beyond 1440x900 when it disappears. I am guessing that the screen resolution is still set at 1440x900 as oppose to 800x600.

这是我的主要课程:

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

public class bucky extends JFrame {
    public static void main(String[] args){

        DisplayMode dm = new DisplayMode(800, 600, 16, DisplayMode.REFRESH_RATE_UNKNOWN);
        bucky b = new bucky();
        b.run(dm);
    }

    public void run(DisplayMode dm){
        setBackground(Color.BLUE); // Setting background color
        setForeground(Color.WHITE);
        setFont(new Font("Arial", Font.PLAIN, 24));

        //The Screen variable is going to be a screen object
        Screen s = new Screen();
        try{
            s.setFullScreen(dm, this); //this refers to whatever object we are working on, ie 's'
            try{
                //Once it is set to full screen, and wait for 5 second
                Thread.sleep(5000);
            }catch(Exception ex){};
        }
        finally{
            s.restoreScreen();
        }
    }

    public void paint(Graphics g){
        g.drawString("Test", 400, 300);
    }

}

这里是构造函数Screen类的Screen类和方法,将应用程序设置为全屏

And here is the the constructor for the Screen class and method from Screen class which sets the application to full screen

private GraphicsDevice vc; // Gives an interface to graphics card/video card.

public Screen(){
    //env is environment variable, containing all graphics manipulation objects
    GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();

    //When we get environment and getDegaultScreen Device, we get access to the entire monitor, not just a window
    vc = env.getDefaultScreenDevice();

}

public void setFullScreen(DisplayMode dm, JFrame window){ 

        window.setUndecorated(true); 
        window.setResizable(false); 
        vc.setFullScreenWindow(window); 


        if(dm != null && vc.isDisplayChangeSupported()) {
            try{
                vc.setDisplayMode(dm); 
            }catch(Exception ex){}
        }

    }

如果有人能指出我为什么没有正确设置分辨率,那将非常感激。

If anyone could point me out to why the resolution is not being set properly, it would be much appreciated.

推荐答案

来自 setDisplayMode


显示模式必须是
getDisplayModes()返回的显示模式之一,除了一个例外:使用
DisplayMode.REFRESH_RATE_UNKNOWN刷新率传递显示模式将导致从可用显示模式列表中选择
a显示模式,并且匹配
宽度,高度和位深度。

The display mode must be one of the display modes returned by getDisplayModes(), with one exception: passing a display mode with DisplayMode.REFRESH_RATE_UNKNOWN refresh rate will result in selecting a display mode from the list of available display modes with matching width, height and bit depth.

因此,您需要确保将显示模式设置为其中之一。

So you'll need to make sure that you set the display mode to one of those.

这篇关于在JAVA中,使用setDisplayMode更改分辨率以进行全屏应用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆