JFrame не принимает фактический размер экрана - PullRequest
0 голосов
/ 21 марта 2020

Я пытался установить размер моего JFrame на точно такой же размер моего экрана (2256x1504). Кажется, он также принимает этот размер, но когда я показываю что-то, результат всегда больше, чем предполагалось.

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

Ответы [ 2 ]

1 голос
/ 21 марта 2020
int width = 2256;
int height = 1504;

Предполагаю, что ваш экран 2556x1504. Вы даете рамке этот размер. Когда у нас полноэкранная программа (от кнопки по умолчанию ОС выдает в правом верхнем углу окна), она не получает размер экрана. Требуется размер экрана - высота панели задач ОС. Я не знаю, для других операционных систем, но если вы хотите сделать неокрашенный полноэкранный кадр в windows и задействовать панель задач, вы должны использовать это:

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


}
0 голосов
/ 21 марта 2020

Я пытался установить размер моего JFrame на точно такой же размер моего экрана (2256x1504).

Не используйте волшебные c числа. Каждый компьютер может использовать экран с разным разрешением. Пусть Swing определит размер. Используйте:

frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

Таким образом, базовая c структура кода будет:

JPanel panel = new JPanel();
add( panel );
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setAlwaysOnTop(true);
setUndecorated(true);
//setResizable(false); // not needed since the title bar is removed
setExtendedState(JFrame.MAXIMIZED_BOTH);
//pack(); // not needed since the frame will be the screen size
setVisible(true);
...