【问题标题】:Problems With Creating a Fullscreen Mode Choosing Class创建全屏模式选择类的问题
【发布时间】:2016-03-28 18:42:12
【问题描述】:

我正在尝试创建一个类,该类允许我选择我想要一个全屏窗口还是一个我选择大小的普通 JFrame 窗口。代码如下:

public class Frame extends JFrame {

boolean fse = false;
int fsm = 0;
GraphicsDevice device = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[1];

public Frame(String title, int width, int height) {
    setTitle(title);
    setSize(width, height);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setResizable(false);
}

private void checkFullscreenMode() {
    switch(fsm) {
    case 0:
        setUndecorated(false);
        System.out.println("No Fullscreen");
        break;
    case 1:
        setUndecorated(true);
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        break;
    case 2:
        setUndecorated(true);
        device.setFullScreenWindow(this);
        break;
    }
}

public void setFullscreenMode(int fsnm) {
    fse = true;
    if(fsm <= 2) {
        this.fsm = fsnm;
    }
    else {
        System.err.println("Error: Mode " + fsnm + " is not Supported!");
    }
}

}

当我尝试调用 setFullscreenMode 方法时,它不起作用。无论我选择哪种模式,它都只给了我 1280 x 720 帧。我是这样称呼它的:

public class Main {
    public static void main(String[] args) {
        Frame frame = new Frame("TheDlooter", 1280, 720);
        frame.setFullscreenMode(1);
        frame.setVisible(true);
    }
}

【问题讨论】:

    标签: java swing graphics jframe


    【解决方案1】:

    我意识到你没有打电话给checkFullscreenMode()。但实际上这种方法使你的框架全屏。所以覆盖Frame中的setVisible方法并在此处调用checkFullscreenMode()

    这是工作代码:

    import java.awt.GraphicsDevice;
    import java.awt.GraphicsEnvironment;
    
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    
    public class Main {
        public static void main(String[] args) {
            Frame frame = new Frame("TheDlooter");
            frame.setFullscreenMode(1);
            frame.setVisible(true);
        }
    }
    
    class Frame extends JFrame {
    
        boolean fse = false;
        int fsm = 0;
        GraphicsDevice device =
        GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[1];
    
        public Frame(String title) {
            setTitle(title);
    
            add(new JLabel("ads"));
    
            setLocationRelativeTo(null);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setResizable(false);
        }
    
        @Override
        public void setVisible(boolean b) {
            checkFullscreenMode();
            super.setVisible(b);
        }
    
        public void checkFullscreenMode() {
            switch (fsm) {
            case 0:
                setUndecorated(false);
                System.out.println("No Fullscreen");
                break;
            case 1:
                setUndecorated(true);
                setExtendedState(JFrame.MAXIMIZED_BOTH);
                break;
            case 2:
                setUndecorated(true);
                device.setFullScreenWindow(this);
                break;
            }
        }
    
        public void setFullscreenMode(int fsnm) {
            fse = true;
            if (fsm <= 2) {
                this.fsm = fsnm;
            } else {
                System.err.println("Error: Mode " + fsnm + " is not Supported!");
            }
        }
    }
    

    【讨论】:

    • 它不起作用。没有这两个尺寸参数会产生错误。
    • 将构造函数标识符更改为public Frame(String title) {
    • 我在答案中添加了构造函数。
    • 但是它会创建一个没有大小的窗口
    • 我改变了答案。请检查一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 2014-11-25
    • 1970-01-01
    相关资源
    最近更新 更多