Como é que o tamanho da janela JFrame em Java não produz o tamanho da janela especificada?

StackOverflow https://stackoverflow.com/questions/2445971

  •  20-09-2019
  •  | 
  •  

Pergunta

Estou apenas brincando tentando fazer um jogo agora, mas já tive esse problema antes. Quando especificar um tamanho de janela específico (1024 x 768, por exemplo), a janela produzida é um pouco maior do que o que eu especifiquei. Muito irritante. Existe uma razão para isso? Como corrigi -lo para que a janela criada seja realmente o tamanho que eu quero, em vez de ser um pouco maior? Até agora, eu sempre voltei e ajustei manualmente o tamanho de alguns pixels de cada vez até obter o resultado que queria, mas isso está ficando velho. Se houvesse até uma fórmula que eu pudesse usar que me diria quantos pixels eu precisava adicionar/subtrair da minha variável, isso seria excelente!

PS Eu não sei se meu sistema operacional pode ser um fator nisso, mas estou usando o 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);
}
Foi útil?

Solução

Eu quero o quadro total que o Windows cria para ser o tamanho exato que eu especificar

Eu não entendo seu problema. Publique o seu Sscce Isso mostra o problema.

Se eu executar código como:

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

Ele exibe java.awt.dimension [largura = 1024, altura = 768], não é isso que você espera?

Se houvesse até uma fórmula que eu pudesse usar que me diria quantos pixels eu precisava adicionar/subtrair da minha variável, isso seria excelente!

Talvez você esteja se referindo ao espaço ocupado pela barra de título e pelas fronteiras?

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

Outras dicas

Quando você diz que o tamanho da janela obtido não é o perguntado, você está falando sobre a janela, com suas decorações?

De fato, o tamanho da janela é definido sem decoração de janela específica do sistema operacional.

Tente adicionar

this.setUndecorated(true);

antes de o

this.setVisible(true);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top