6

私は今ゲームを作ろうとしていじっているだけですが、以前にもこの問題がありました。特定のウィンドウ サイズ (たとえば 1024 x 768) を指定すると、生成されるウィンドウは指定したサイズよりも少しだけ大きくなります。とてもうるさい。これには理由がありますか?作成されたウィンドウが実際に少し大きくなるのではなく、実際に必要なサイズになるように修正するにはどうすればよいですか? 今までは、自分が望む結果が得られるまで、一度に数ピクセルずつ手動でサイズを調整していましたが、それは古くなりつつあります。使用できる数式さえあれば、変数に加算/減算するために必要なピクセル数がわかります。

PS私のOSがこれの要因になるかどうかはわかりませんが、私は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);
}
4

2 に答える 2

7

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() );
     }
}
于 2010-03-15T16:07:12.377 に答える
1

取得したウィンドウのサイズが要求されたものではないという場合、それはウィンドウとその装飾について話しているのですか?

実際、ウィンドウ サイズは OS 固有のウィンドウ装飾なしで定義されます。

追加してみる

this.setUndecorated(true);

の前に

this.setVisible(true);
于 2010-03-15T09:16:05.837 に答える