Wie kommt es, dass JFRame -Fenstergröße in Java nicht die Größe des angegebenen Fensters erzeugt?

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

  •  20-09-2019
  •  | 
  •  

Frage

Ich versuche gerade herumzuspielen, um gerade ein Spiel zu machen, aber ich hatte dieses Problem auch schon einmal. Wenn ich eine bestimmte Fenstergröße (z. B. 1024 x 768) angibt, ist das erzeugte Fenster nur etwas größer als das, was ich angegeben habe. Sehr nervig. Gibt es einen Grund dafür? Wie korrigiere ich es, damit das erstellte Fenster tatsächlich die gewünschte Größe hat, anstatt nur ein bisschen größer zu sein? Bis jetzt bin ich immer zurückgegangen und habe die Größe ein paar Pixel auf einmal manuell angepasst, bis ich das Ergebnis erzielte, das ich wollte, aber das wird alt. Wenn es einmal eine Formel gäbe, die ich verwenden könnte, die mir sagen würde, wie viele Pixel ich von meiner Variablen hinzufügen/subtrahieren musste, wäre das ausgezeichnet!

PS Ich weiß nicht, ob mein Betriebssystem ein Faktor dafür sein könnte, aber ich verwende 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);
}
War es hilfreich?

Lösung

Ich möchte, dass der Gesamtrahmen, den Windows erstellt, die genaue Größe ist, die ich angeben kann

Ich verstehe dein Problem nicht. Poste deine SSCCE Das zeigt das Problem.

Wenn ich Code ausführe wie:

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

Es zeigt java.awt.dimension [width = 1024, Höhe = 768]. Ist das nicht das, was Sie erwarten?

Wenn es einmal eine Formel gäbe, die ich verwenden könnte, die mir sagen würde, wie viele Pixel ich von meiner Variablen hinzufügen/subtrahieren musste, wäre das ausgezeichnet!

Vielleicht beziehen Sie sich auf den Raum, der von der Titelleiste und der Grenzen besetzt ist?

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

Andere Tipps

Wenn Sie sagen, dass die erhaltene Fenstergröße nicht die gefragt ist, sprechen Sie mit seinen Dekorationen über das Fenster?

In der Tat wird die Fenstergröße ohne osspezifische Fensterdekoration definiert.

Versuchen Sie hinzuzufügen

this.setUndecorated(true);

Vor dem

this.setVisible(true);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top