كيف تأتي حجم نافذة JFrame في Java لا ينتج حجم النافذة المحدد؟

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

  •  20-09-2019
  •  | 
  •  

سؤال

أنا فقط العبث في محاولة لجعل لعبة الآن، لكنني تعاني من هذه المشكلة من قبل أيضا. عندما أحدد حجم نافذة محددة (1024 × 768 على سبيل المثال) تكون النافذة المنتجة أكبر قليلا مما حددته. مزعج جدا. هل هناك سبب لذلك؟ كيف يمكنني تصحيحه حتى النافذة التي تم إنشاؤها هي في الواقع الحجم الذي أريده بدلا من أن أكون أكبر قليلا؟ حتى الآن لقد عدت دائما عدت فقط وضبط الحجم يدويا بضع بكسل في كل مرة حتى حصلت على النتيجة التي أردتها، ولكن هذا هو القديم. إذا كان هناك حتى صيغة يمكنني استخدامها من شأنها أن تخبرني عن عدد البكسلات التي أحتاجها لإضافة / طرح من متغيري الذي سيكون ممتازا!

ملاحظة: لا أعرف إذا كان نظام التشغيل الخاص بي قد يكون عاملا في هذا، لكنني أستخدم 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);
}
هل كانت مفيدة؟

المحلول

أريد الإطار الكلي الذي ينشئ Windows أن يكون بالحجم الدقيق الذي حددته

أنا لا أفهم مشكلتك. نشر الخاص بك SSCCE. هذا يدل على المشكلة.

إذا قمت بتشغيل رمز مثل:

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

يعرض java.awt.dimension [العرض = 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() );
     }
}

نصائح أخرى

عندما تقول أن حجم النافذة الذي تم الحصول عليه ليس هو سؤال واحد، هل تتحدث عن النافذة، مع زخارفها؟

في الواقع، يتم تعريف حجم النافذة دون زخرفة نافذة نظام التشغيل الخاصة.

محاولة لإضافة

this.setUndecorated(true);

قبل

this.setVisible(true);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top