7

在调查我的应用程序中的一些问题时,我发现了一些奇怪的事情。

基本上这个SSCCE应该证明这个问题:

public class MainFrame extends JFrame {
    public MainFrame() {
         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
         setExtendedState(JFrame.MAXIMIZED_BOTH);
         pack();
    }
}

public class Main {
    public static void main(String[] args) {
        MainFrame mf = new MainFrame();
        mf.setVisible(true);
        System.out.println(mf.getSize());
    }
}

不知何故,在我的 1280x1024 分辨率显示器上,这会导致:

java.awt.Dimension[宽度=1296,高度=1010]

有谁知道这是怎么回事?特别是宽度高于应该发生的事实。

问候。

4

2 回答 2

8

窗口边框大概是 8 像素宽。最大化时,Windows 会调整窗口大小,使客户区的宽度为 1280 像素。那么窗口的整个宽度就是 8+1280+8 像素 = 1296 像素。高度也是如此。

在多台显示器上使用扩展桌面时,有时会注意到当一个窗口在一个屏幕上最大化时,可以在相邻的屏幕上看到该窗口的边框。

于 2013-04-30T19:23:27.123 回答
2

不知道那里发生了什么。如果您只是想根据可用的屏幕空间将框架设置为最大尺寸,请尝试以下替代方法:

import java.awt.*;
import javax.swing.*;

public class JFrameExtended
{
  public static void main(String[] args)
  {
    SwingUtilities.invokeLater(new Runnable()
    {
      public void run()
      {
        GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
        Rectangle maxBounds = env.getMaximumWindowBounds();

        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setBounds(maxBounds);
        f.setVisible(true);
        System.out.println("Frame size: " + f.getSize());
      }
    });
  }
}
于 2013-04-30T17:52:40.453 回答