Como é que o tamanho da janela JFrame em Java não produz o tamanho da janela especificada?
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);
}
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);