为什么Java中的JFrame窗口大小不会产生指定窗口的大小?

时间:2010-03-15 09:05:18

标签: java jframe pixel

我现在正忙着尝试制作游戏,但我之前也遇到过这个问题。当我指定特定的窗口大小(例如1024 x 768)时,生成的窗口比我指定的大一点。很烦人。是否有一个原因?我如何纠正它所以创建的窗口实际上是我想要的大小而不是更大一点?到目前为止,我总是回去,一次手动调整大小几个像素,直到我得到我想要的结果,但那已经老了。如果有一个公式,我可以使用它会告诉我需要从我的变量中添加/减去多少像素,这将是非常好的!

P.S。我不知道我的操作系统是否可能是其中的一个因素,但我使用的是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);
}

2 个答案:

答案 0 :(得分:5)

  

我想要Windows的总框架   创建为我指定的确切大小

我不明白你的问题。发布显示问题的SSCCE

如果我运行如下代码:

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

它显示java.awt.Dimension [width = 1024,height = 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() );
     }
}

答案 1 :(得分:0)

当你说获得的窗口大小不是被问到的窗口大小时,你是在谈论窗口及其装饰吗?

实际上,窗口大小是在没有特定于OS的窗口装饰的情况下定义的。

尝试添加

this.setUndecorated(true);

之前的

this.setVisible(true);