未装饰的 JDialog / JFrame 比装饰的大

Undecorated JDialog / JFrame bigger than a decorated one

我发现在放置 2 个相似的 JFrames 时 在同一位置:

import java.awt.Color;
import java.awt.Point;
import javax.swing.JFrame;

public class Test{

  public static void main(String[] args) throws InterruptedException {

        JFrame jFrame = new JFrame();
        jFrame.setSize(400,200);
        jFrame.setUndecorated(true);
        jFrame.setLocation(new Point(200,200));
        jFrame.getContentPane().setBackground(Color.RED);
        jFrame.setVisible( true );

        JFrame jFrame2 = new JFrame();
        jFrame2.setSize(400,200);
        jFrame2.setUndecorated(false);
        jFrame2.setLocation(new Point(200,200));
        jFrame2.getContentPane().setBackground(Color.GREEN);
        jFrame2.setVisible( true );
  }
}

如果一个 JFrame 被装饰,另一个没有装饰,则生成一个装饰框架(绿色),它比未装饰框架(红色)小:

两个帧的边界相同,符合预期:

JFrame 1 bounds java.awt.Rectangle[x=200,y=200,width=400,height=200]
JFrame 2 bounds java.awt.Rectangle[x=200,y=200,width=400,height=200]

我没有找到导致它的原因。

我发现是什么导致装饰和未装饰的 JFrameJDialog 具有不同的显示尺寸。
这是由于插图。未装饰的 window 的插图大小(可以使用 jFrame.getInsets() 检查)为 0,而装饰的 window 的大小 > 0.