1 回答

TA贡献1830条经验 获得超9个赞
问题是您setPreferredSize在 的构造函数中调用Component,因此它的大小调整请求应用于框架的内容。当JFrame创建装饰时,它会增加该维度。解决方案是将调用应用于setPreferredSize,JFrame例如在initWindow:
public void initWindow(String title, JComponent component)
{
JFrame jf = new JFrame(title);
Toolkit kit = this.getToolkit();
int width = (int) kit.getScreenSize().getWidth();
int height = (int) GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().getHeight();
jf.setPreferredSize(new Dimension(width, height));
// ...
}
这是一个演示程序,至少在我的系统上,它重现了问题并演示了解决方案。取消注释1并注释掉2会重现该问题。反转注释掉的行即可解决。
public class FitToScreenDemo {
public static void main(String[] args) {
JFrame frame = new JFrame();
JComponent component = new JComponent() {};
frame.add(component);
// component.setPreferredSize(getDimensionWithoutTaskBar()); // 1
frame.setPreferredSize(getDimensionWithoutTaskBar()); // 2
frame.pack();
frame.setVisible(true);
}
private static Dimension getDimensionWithoutTaskBar() {
return new Dimension((int) Toolkit.getDefaultToolkit().getScreenSize().getWidth(),
(int) GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().getHeight());
}
}
添加回答
举报