Вопрос по java – В JAVA изменение разрешения с помощью setDisplayMode для полноэкранного приложения

0

Я новичок в языке JAVA и пытаюсь научиться создавать полноэкранные приложения.

Я пытаюсь создать простое приложение, в котором при запуске отображается полный экран с синим фоном и простой строкой текста в центре экрана (начинается с позиции 400x300). Разрешение приложения установлено на 800x600.

Я использую код на MacbookAir под OSX Lion с разрешением экрана 1440x900. Проблема в том, что, несмотря на то, что я получил синий фон, как я и ожидал, текст появляется только в верхней левой части экрана. Положение текста будет продолжать двигаться вниз и вправо по мере того, как я буду увеличивать его положение, пока оно не превысит 1440x900, когда оно исчезнет. Я предполагаю, что разрешение экрана все еще установлено на 1440x900 в отличие от 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, который устанавливает приложение в полноэкранный режим

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

    }

Если бы кто-нибудь мог указать мне на то, почему разрешение не устанавливается должным образом, это было бы очень ценно.

Вы можете получить некоторую полезную информацию, если прекратите глотать исключения. Добавить ex.printStackTrace (); на ваши блоки поймать по крайней мере. Ricky Clarkson
@RickyClarkson Спасибо за идею, и как вы уже догадались, я действительно получил ошибку в своем классе Screen, в методе setFullScreen, в vc.setDisplayMode (dm). Ошибка говорит "Недопустимый режим отображения". Не могли бы вы сказать мне, что это значит? Synia

Ваш Ответ

2   ответа
2

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.

Поэтому вам необходимо убедиться, что вы установили режим отображения на один из них.

Единственной проблемой, с которой я столкнулся, было изменение режима отображения, которую я решил с помощьюDisplayMode.BIT_DEPTH_MULTI а такжеDisplayMode.REFRESH_RATE_UNKNOWN одновременно. Использование Kubuntu 15.10 с Java 8.
Спасибо, я вижу, где я запутался сейчас. Хотя я дважды проверил разрешение, я не обращал особого внимания на глубину цвета, оказалось, что аппарат поддерживает только 32-битный цвет и выше. Спасибо за вашу помощь. Synia
Как вы можете видеть из моего кода, я использовал DisplayMode.REFRESH_RATE_UNKNOWN. Я пытаюсь установить режим отображения:DisplayMode dm = new DisplayMode(800, 600, 16, DisplayMode.REFRESH_RATE_UNKNOWN); Synia
Считаете ли вы, что getDisplayModes () предоставляет вам любые режимы отображения, которые были 800x600 с 16-битным цветом? Параметр REFRESH_RATE_UNKNOWN, по-видимому, позволяет просто не указывать частоту обновления, а не заставляет метод автоматически выбирать ближайшее подходящее разрешение и т. Д.
0

Я думаю, что ответ в JavadocGraphicsDevice.setDisplayMode (...). You should first check if (gd.isFullScreenSupported()) а затем позвонитеsetFullScreenWindow(frame) или имитировать полноэкранный режим, используяframe.setSize(...) метод.

Похожие вопросы