【问题标题】:Windows taskbar height/widthWindows 任务栏高度/宽度
【发布时间】:2011-07-27 13:20:00
【问题描述】:

我不知道如何动态获取 Windows 任务栏高度来设置我的应用程序全屏。
如您所知,任务栏可以位于四个位置:底部、顶部、左侧或右侧,所以我想知道是否也可以知道当前位置来设置窗口边界。

编辑: 使用 Lukas 链接我尝试了这个:

GraphicsDevice myDevice;
Window myWindow;

try {
    myDevice.setFullScreenWindow(myWindow);
    ...
} finally {
    myDevice.setFullScreenWindow(null);
}

但我收到了NullPointerException

【问题讨论】:

  • 是的,抱歉,我使用的是 JFrame

标签: java taskbar


【解决方案1】:

如果需要,可以获取Windows任务栏高度:

Dimension scrnSize = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle winSize = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds();

int taskBarHeight = scrnSize.height - winSize.height;

【讨论】:

    【解决方案2】:

    当您创建JFrame 时。调用 JFrame API 中的setExtendedState() 方法

    jFrame = new JFrame("TESTER");
    jFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
    

    MAXIMIZED_BOTH 设置会将您的窗口设置为全屏并自动考虑任务栏的位置。

    【讨论】:

    • 这可能是一个解决方案,但我希望有一个切换方法来设置 JFrame 全屏并返回“正常”大小。
    • 您可以设置一个默认大小,例如jFrame.setSize(450,450),然后当您按下窗口顶部的最大化按钮时调用jFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);,它将在两种大小之间切换。
    • 有没有办法通过按钮在最大和正常之间切换?
    • 注意:这在使用“LookAndFeel”装饰的摇摆窗时不起作用。它将覆盖任务栏,因此在这种情况下,作为解决 Java 中的错误的一种解决方法,必须知道任务栏在哪里来相应地调整窗口大小。真烦人!!!
    • @peterk 这是差不多一年前的事了
    【解决方案3】:

    你可以使用:

    int taskbarheight = Toolkit.getDefaultToolkit().getScreenSize().height 
        - GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().height();
    

    或者你也可以使用:

    JFrame frame = new JFrame();
    frame.setSize(GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().getSize();
    

    【讨论】:

      【解决方案4】:

      如果您希望您的应用程序以全屏模式运行,您可以通过获取合适的GraphicsDevice 并使用setFullScreenWindow(Window)-method 来输入它:

      GraphicsDevice myDevice = GraphicsEnvironment.
         getLocalGraphicsEnvironment().getDefaultScreenDevice();
      Window myWindow;
      
      try {
          myDevice.setFullScreenWindow(myWindow);
          ...
      } finally {
          myDevice.setFullScreenWindow(null);
      }
      

      更多(和更完整)信息。见Docs)

      【讨论】:

        【解决方案5】:

        这是我编写的程序的一部分:

        public enum Location {
            TOP, RIGHT, BOTTOM, LEFT;
        }
        
        private static final class Taskbar {
            public final Location location;
            public final int width, height;
        
            private Taskbar(Location location, int width, int height) {
                this.location = location;
                this.width = width;
                this.height = height;
            }
        
            public static Taskbar getTaskbar() {
                Rectangle other = GraphicsEnvironment.getLocalGraphicsEnvironment()
                        .getMaximumWindowBounds();
                return new Taskbar(other.x != 0 ? Location.TOP
                        : (other.y != 0 ? Location.LEFT
                                : (other.width == IFrame.width ? Location.BOTTOM
                                        : Location.RIGHT)), IFrame.width
                        - other.width, IFrame.height - other.height);
            }
        }
        

        本质上,调用Taskbar.getTaskbar() 将提供一个任务栏,其中包含有关其位置(TOPRIGHTBOTTOMLEFT)、其宽度和高度的信息。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-18
          • 1970-01-01
          • 2021-06-07
          • 2013-07-10
          • 1970-01-01
          • 2016-02-27
          相关资源
          最近更新 更多