Comment se JFrame taille de la fenêtre en Java ne produit pas la taille de la fenêtre spécifiée?
Question
Je suis en train de déconner essayer de faire un jeu en ce moment, mais je l'ai eu ce problème avant aussi. Lorsque je spécifie une taille de fenêtre spécifique (1 024 x 768, par exemple), la fenêtre produite est juste un peu plus grand que ce que je spécifié. Très ennuyant. Y a-t-il une raison à cela? Comment puis-je corriger si la fenêtre créée est en fait la taille que je veux au lieu d'être juste un peu plus grand? Jusqu'à présent, je suis toujours juste retourné et ajustée manuellement la taille de quelques pixels à la fois jusqu'à ce que je suis arrivé le résultat que je voulais, mais vieillit. S'il y avait même une formule que je pourrais utiliser cela me dire combien de pixels je besoin d'ajouter / soustraire de ma ma variable qui serait excellent!
P.S. Je ne sais pas si mon système d'exploitation pourrait être un facteur dans ce domaine, mais je me sers 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);
}
La solution
Je veux que le cadre totale que Windows crée à la taille exacte je précise
Je ne comprends pas votre problème. Diffusez votre SSCCE qui montre le problème.
Si je lance code comme:
frame.setResizable(false);
frame.setSize(1024, 768);
frame.setVisible(true);
System.out.println(frame.getSize());
Il affiche java.awt.Dimension [width = 1024, height = 768], est-ce pas ce que vous attendez?
S'il y avait même une formule pourrait qui aggraveraient me dire combien de pixels Je avais besoin d'ajouter / soustraire de mon mon variable qui serait excellent!
Peut-être que vous faites référence à l'espace occupé par la barre de titre et les frontières?
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() );
}
}
Autres conseils
Quand vous dites la taille de la fenêtre obtenue est pas demandé à l'un, vous parlez de la fenêtre, avec ses décorations?
En effet, la taille de la fenêtre est définie sans décoration de fenêtre spécifique OS.
Essayez d'ajouter
this.setUndecorated(true);
avant la balise
this.setVisible(true);