Почему размер окна JFrame в Java не дает размер указанного окна? - PullRequest
4 голосов
/ 15 марта 2010

Я просто бездельничаю, пытаясь сделать игру прямо сейчас, но у меня и раньше была эта проблема. Когда я указываю определенный размер окна (например, 1024 x 768), полученное окно становится немного больше, чем я указал. Очень надоедливый. Для этого есть причина? Как мне исправить это так, чтобы созданное окно на самом деле было размером, который я хочу, а не просто немного больше? До сих пор я всегда возвращался назад и вручную настраивал размер по несколько пикселей за раз, пока не получил желаемый результат, но он стареет. Если бы была даже формула, которую я мог бы использовать, она бы указала, сколько пикселей мне нужно было бы добавить / вычесть из моей переменной, что было бы отлично!

P.S. Я не знаю, может ли моя ОС быть фактором в этом, но я использую W7X64.

private int windowWidth = 1024;
private int windowHeight = 768;

public SomeWindow() {
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setSize(windowWidth, windowHeight);
    this.setResizable(false);
    this.setLocation(0,0);
    this.setVisible(true);
}

Ответы [ 2 ]

5 голосов
/ 15 марта 2010

Я хочу общий кадр, который Windows создает точный размер, который я указываю

Я не понимаю твою проблему. Отправьте свой SSCCE , который показывает проблему.

Если я запускаю код вроде:

frame.setResizable(false);
frame.setSize(1024, 768);
frame.setVisible(true);
System.out.println(frame.getSize());

Показывает java.awt. Размер [ширина = 1024, высота = 768], это не то, что вы ожидаете?

Если бы была даже формула, я мог бы использовать, что бы сказать мне, сколько пикселей Мне нужно было добавить / вычесть из моего моего переменная, которая была бы превосходной!

Может быть, вы имеете в виду пространство, занимаемое строкой заголовка и границами?

import java.awt.*;
import javax.swing.*;

public class FrameInfo
{
    public static void main(String[] args)
    {
        GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
        Rectangle bounds = env.getMaximumWindowBounds();
        System.out.println("Screen Bounds: " + bounds );

        GraphicsDevice screen = env.getDefaultScreenDevice();
        GraphicsConfiguration config = screen.getDefaultConfiguration();
        System.out.println("Screen Size  : " + config.getBounds());

        JFrame frame = new JFrame("Frame Info");
        System.out.println("Frame Insets : " + frame.getInsets() );

        frame.setSize(200, 200);
        System.out.println("Frame Insets : " + frame.getInsets() );
        frame.setVisible( true );

        System.out.println("Frame Size   : " + frame.getSize() );
        System.out.println("Frame Insets : " + frame.getInsets() );
        System.out.println("Content Size : " + frame.getContentPane().getSize() );
     }
}
0 голосов
/ 15 марта 2010

Когда вы говорите, что полученный размер окна не является запрашиваемым, вы говорите об окне с его украшениями?

Действительно, размер окна определяется без специального оформления окна ОС.

Попробуйте добавить

this.setUndecorated(true);

до

this.setVisible(true);
...