本文介绍了JFrame没有实际的屏幕尺寸的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直试图将JFrame的大小设置为与屏幕完全相同的大小(2256x1504).它似乎也要占用这个大小,但是当我显示某些内容时,结果总是比预期的大.

I have been trying to set the size of my JFrame to the exact same size of my screen (2256x1504).It also seems to take that size but when I display something the outcome is always bigger than intended.

public class Frame extends JFrame {

    public Frame() {
        JPanel p = new JPanel();
        int width = 2256;
        int height = 1504;
        Dimension size = new Dimension(width,height);
        p.setPreferredSize(size);
        p.setMinimumSize(size);
        p.setMaximumSize(size);
        p.setSize(size);
        this.setUndecorated(true);
        this.setContentPane(p);
        this.pack();
        this.setResizable(false);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setAlwaysOnTop(true);
        this.setVisible(true);
    }
}

推荐答案

int width = 2256;
int height = 1504;

猜测屏幕为2556x1504.您给框架这个尺寸.当我们全屏显示一个程序时(从默认按钮OS在窗口的右上角给出),它不会获得屏幕的大小.它需要屏幕的大小-OS任务栏的高度.对于其他操作系统,我不知道,但是如果要在Windows中使未修饰的框架全屏显示并涉及任务栏,则必须使用以下方法:

Guessing your screen is 2556x1504. You give the frame this size. When we full screen a program (from default button OS gives in upper right corner of the window), it does not get screen's size. It takes screen's size - the height of the OS task bar. I do not know for other operating systems, but if you want to make an undecorated frame full screen in windows and involve the task bar, you have to use this:

public class Frame extends JFrame {

    public Frame() {
        JPanel p = new JPanel();
        int width = 2256;
        int height = 1504;
        Dimension size = getScreenDimensionWithoutTaskbar(this);
        p.setPreferredSize(size);
        p.setMinimumSize(size);
        p.setMaximumSize(size);
        p.setSize(size);
        this.setUndecorated(true);
        this.setContentPane(p);
        this.pack();
        this.setResizable(false);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setAlwaysOnTop(true);
        this.setVisible(true);
    }
    public static Dimension getScreenDimensionWithoutTaskbar(Frame frame) {
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        int width = screenSize.width;
        int height = screenSize.height;
        Insets screenInsets = Toolkit.getDefaultToolkit().getScreenInsets(frame.getGraphicsConfiguration());
        int taskBarSize = screenInsets.bottom;
        return new Dimension(width, height - taskBarSize);
    }
    public static void main(String[] args) {
        new Frame();
    }


}

这篇关于JFrame没有实际的屏幕尺寸的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-26 06:28