为了账号安全,请及时绑定邮箱和手机立即绑定

尝试考虑 Java 中的任务栏会导致窗口大小不准确

尝试考虑 Java 中的任务栏会导致窗口大小不准确

Smart猫小萌 2023-03-17 10:35:22
当我尝试运行这段代码时,它会导致 JFrame 出于某种原因稍微向右移动大约 10 个像素,并且窗口的高度也超出了任务栏,而所需的效果是使其完成 AT任务栏。我试过将 jframe 设置为未装饰,这解决了整个问题,一切都在它应该在的地方结束。但是当我将 undecorated 设置为 false 时,它似乎取代并破坏了窗口的位置。import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.GraphicsEnvironment;import java.awt.Toolkit;import javax.swing.JComponent;import javax.swing.JFrame;public class Component extends JComponent{/** *  */private static final long serialVersionUID = 1L;public int width, height;public int tps;private Game game;public Component(){    Toolkit kit = this.getToolkit();    width = (int) kit.getScreenSize().getWidth();    height = (int) GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().getHeight();    setLayout(new BorderLayout());    setPreferredSize(new Dimension(width, height));    game = new Game(this);    add(game);    initWindow("Test", this);}public void initWindow(String title, JComponent component){    JFrame jf = new JFrame(title);    jf.setResizable(false);    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    jf.add(component);    jf.pack();    jf.setLocationRelativeTo(null);    jf.setVisible(true);}}
查看完整描述

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());

    }

}


查看完整回答
反对 回复 2023-03-17
  • 1 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号