在调查我的应用程序中的某些问题时,我发现了一些奇怪的事情。
基本上这个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]
任何人都知道这是怎么回事?特别是宽度高于应该发生的事实。
问候。
答案 0 :(得分:7)
窗口边框可能是8像素宽。最大化时,Windows会调整窗口大小,使客户端区域的宽度达到1280像素。窗口的整个宽度是8 + 1280 + 8像素= 1296像素。高度也是如此。
在多台显示器上使用扩展桌面时,有时可以注意到,当一个窗口在一个屏幕上最大化时,可以在相邻的屏幕上看到窗口的边框。
答案 1 :(得分: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());
}
});
}
}