首页 文章

如何在java中获得屏幕分辨率?

提问于
浏览
124

如何以像素为单位获得屏幕分辨率(宽x高)?

我正在使用JFrame和java swing方法 .

10 回答

  • 1

    此调用将为您提供所需的信息 .

    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    
  • 3

    您可以使用 Toolkit.getScreenSize() 方法获取屏幕大小 .

    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    double width = screenSize.getWidth();
    double height = screenSize.getHeight();
    

    在多显示器配置上,您应该使用:

    GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
    int width = gd.getDisplayMode().getWidth();
    int height = gd.getDisplayMode().getHeight();
    

    如果你想在DPI中获得屏幕分辨率,你必须在 Toolkit 上使用 getScreenResolution() 方法 .


    Resources :

  • 1

    此代码将枚举系统上的图形设备(如果安装了多个监视器),并且您可以使用该信息来确定监视器关联或自动放置(某些系统在应用程序运行时使用一个小侧监视器进行实时显示背景,这样的监视器可以通过大小,屏幕颜色等来识别 . ):

    // Test if each monitor will support my app's window
    // Iterate through each monitor and see what size each is
    GraphicsEnvironment ge      = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice[]    gs      = ge.getScreenDevices();
    Dimension           mySize  = new Dimension(myWidth, myHeight);
    Dimension           maxSize = new Dimension(minRequiredWidth, minRequiredHeight);
    for (int i = 0; i < gs.length; i++)
    {
        DisplayMode dm = gs[i].getDisplayMode();
        if (dm.getWidth() > maxSize.getWidth() && dm.getHeight() > maxSize.getHeight())
        {   // Update the max size found on this monitor
            maxSize.setSize(dm.getWidth(), dm.getHeight());
        }
    
        // Do test if it will work here
    }
    
  • 3

    这是当前分配给定组件的屏幕分辨率(类似于根窗口的大部分部分在该屏幕上可见) .

    public Rectangle getCurrentScreenBounds(Component component) {
        return component.getGraphicsConfiguration().getBounds();
    }
    

    用法:

    Rectangle currentScreen = getCurrentScreenBounds(frameOrWhateverComponent);
    int currentScreenWidth = currentScreen.width // current screen width
    int currentScreenHeight = currentScreen.height // current screen height
    // absolute coordinate of current screen > 0 if left of this screen are further screens
    int xOfCurrentScreen = currentScreen.x
    

    如果你想尊重工具栏等,你也需要用这个来计算:

    GraphicsConfiguration gc = component.getGraphicsConfiguration();
    Insets screenInsets = Toolkit.getDefaultToolkit().getScreenInsets(gc);
    
  • 11

    这是一些功能代码(Java 8),它返回最右边屏幕最右边的x位置 . 如果没有找到屏幕,则返回0 .

    GraphicsDevice devices[];
    
      devices = GraphicsEnvironment.
         getLocalGraphicsEnvironment().
         getScreenDevices();
    
      return Stream.
         of(devices).
         map(GraphicsDevice::getDefaultConfiguration).
         map(GraphicsConfiguration::getBounds).
         mapToInt(bounds -> bounds.x + bounds.width).
         max().
         orElse(0);
    

    以下是JavaDoc的链接 .

    GraphicsEnvironment.getLocalGraphicsEnvironment()
    GraphicsEnvironment.getScreenDevices()
    GraphicsDevice.getDefaultConfiguration()
    GraphicsConfiguration.getBounds()

  • 1
    int resolution =Toolkit.getDefaultToolkit().getScreenResolution();
    
    System.out.println(resolution);
    
  • 1
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    double width = screenSize.getWidth();
    double height = screenSize.getHeight();
    framemain.setSize((int)width,(int)height);
    framemain.setResizable(true);
    framemain.setExtendedState(JFrame.MAXIMIZED_BOTH);
    
  • 0

    这三个函数以Java格式返回屏幕大小 . 此代码考虑了多显示器设置和任务栏 . 包含的函数是: getScreenInsets()getScreenWorkingArea()getScreenTotalArea() .

    码:

    /**
     * getScreenInsets, This returns the insets of the screen, which are defined by any task bars
     * that have been set up by the user. This function accounts for multi-monitor setups. If a
     * window is supplied, then the the monitor that contains the window will be used. If a window
     * is not supplied, then the primary monitor will be used.
     */
    static public Insets getScreenInsets(Window windowOrNull) {
        Insets insets;
        if (windowOrNull == null) {
            insets = Toolkit.getDefaultToolkit().getScreenInsets(GraphicsEnvironment
                    .getLocalGraphicsEnvironment().getDefaultScreenDevice()
                    .getDefaultConfiguration());
        } else {
            insets = windowOrNull.getToolkit().getScreenInsets(
                    windowOrNull.getGraphicsConfiguration());
        }
        return insets;
    }
    
    /**
     * getScreenWorkingArea, This returns the working area of the screen. (The working area excludes
     * any task bars.) This function accounts for multi-monitor setups. If a window is supplied,
     * then the the monitor that contains the window will be used. If a window is not supplied, then
     * the primary monitor will be used.
     */
    static public Rectangle getScreenWorkingArea(Window windowOrNull) {
        Insets insets;
        Rectangle bounds;
        if (windowOrNull == null) {
            GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
            insets = Toolkit.getDefaultToolkit().getScreenInsets(ge.getDefaultScreenDevice()
                    .getDefaultConfiguration());
            bounds = ge.getDefaultScreenDevice().getDefaultConfiguration().getBounds();
        } else {
            GraphicsConfiguration gc = windowOrNull.getGraphicsConfiguration();
            insets = windowOrNull.getToolkit().getScreenInsets(gc);
            bounds = gc.getBounds();
        }
        bounds.x += insets.left;
        bounds.y += insets.top;
        bounds.width -= (insets.left + insets.right);
        bounds.height -= (insets.top + insets.bottom);
        return bounds;
    }
    
    /**
     * getScreenTotalArea, This returns the total area of the screen. (The total area includes any
     * task bars.) This function accounts for multi-monitor setups. If a window is supplied, then
     * the the monitor that contains the window will be used. If a window is not supplied, then the
     * primary monitor will be used.
     */
    static public Rectangle getScreenTotalArea(Window windowOrNull) {
        Rectangle bounds;
        if (windowOrNull == null) {
            GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
            bounds = ge.getDefaultScreenDevice().getDefaultConfiguration().getBounds();
        } else {
            GraphicsConfiguration gc = windowOrNull.getGraphicsConfiguration();
            bounds = gc.getBounds();
        }
        return bounds;
    }
    
  • 15

    这是我经常使用的代码片段 . 它返回完整的可用屏幕区域(即使在多显示器设置上),同时保留原生显示器位置 .

    public static Rectangle getMaximumScreenBounds() {
        int minx=0, miny=0, maxx=0, maxy=0;
        GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment();
        for(GraphicsDevice device : environment.getScreenDevices()){
            Rectangle bounds = device.getDefaultConfiguration().getBounds();
            minx = Math.min(minx, bounds.x);
            miny = Math.min(miny, bounds.y);
            maxx = Math.max(maxx,  bounds.x+bounds.width);
            maxy = Math.max(maxy, bounds.y+bounds.height);
        }
        return new Rectangle(minx, miny, maxx-minx, maxy-miny);
    }
    

    在具有两个全高清显示器的计算机上,其中左侧设置为主显示器(在Windows设置中),该功能返回

    java.awt.Rectangle[x=0,y=0,width=3840,height=1080]
    

    在相同的设置上,但将右侧监视器设置为主监视器,该函数返回

    java.awt.Rectangle[x=-1920,y=0,width=3840,height=1080]
    
  • 244
    int screenResolution = Toolkit.getDefaultToolkit().getScreenResolution();
    System.out.println(""+screenResolution);
    

相关问题