如何实现JFrame最大化时不隐藏系统任务栏?
解决JFrame最大化时隐藏系统任务栏的问题
以下几种方案可以实现JFrame最大化且不覆盖系统任务栏:
方案一:获取屏幕可用区域手动设置窗口尺寸
通过GraphicsEnvironment和Toolkit获取排除任务栏后的屏幕可用区域,直接设置窗口的位置和大小:// 获取屏幕整体边界与系统Insets(包含任务栏等系统元素的占位) GraphicsConfiguration gc = GraphicsEnvironment.getLocalGraphicsEnvironment() .getDefaultScreenDevice().getDefaultConfiguration(); Rectangle screenBounds = gc.getBounds(); Insets insets = Toolkit.getDefaultToolkit().getScreenInsets(gc); // 计算可用区域的宽高与起始位置 int usableX = insets.left; int usableY = insets.top; int usableWidth = screenBounds.width - insets.left - insets.right; int usableHeight = screenBounds.height - insets.top - insets.bottom; // 应用到窗口 this.setBounds(usableX, usableY, usableWidth, usableHeight);方案二:先最大化再调整边界
先调用默认最大化方法,再通过屏幕Insets调整窗口,保留最大化状态的同时避开任务栏:this.setExtendedState(JFrame.MAXIMIZED_BOTH); Insets insets = Toolkit.getDefaultToolkit().getScreenInsets(this.getGraphicsConfiguration()); // 修正窗口大小与位置 this.setSize(this.getWidth() - insets.left - insets.right, this.getHeight() - insets.top - insets.bottom); this.setLocation(insets.left, insets.top);方案三:组合水平与垂直最大化状态
尝试单独设置水平和垂直最大化,部分系统下可自动避开任务栏:this.setExtendedState(JFrame.MAXIMIZED_HORIZ | JFrame.MAXIMIZED_VERT);注意:该方案兼容性略差,建议优先测试前两种方案。
内容的提问来源于stack exchange,提问作者FireGoose's Empire
相关产品推荐
相关产品推荐

