Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
184 views
in Technique[技术] by (71.8m points)

jframe - In JAVA, changing resolution with setDisplayMode for fullscreen application

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

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.

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.

Here are my main class:

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);
    }

}

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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

From the docs for setDisplayMode

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...