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

如何在java中获得屏幕分辨率?,java,swing,screen,resolution,Java,Swing,Screen,Resolution,如何获得以像素为单位的屏幕分辨率(宽度x高度) 我正在使用JFrame和java swing方法。此调用将为您提供所需的信息 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 您可以使用Toolkit.getScreenSize()方法获取屏幕大小 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); double width

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


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

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

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

您可以使用
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
上的
getscreensolution()
方法


资源:


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

//测试每个监视器是否支持我的应用程序窗口
//遍历每个监视器,查看每个监视器的大小
GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[]gs=ge.getScreenDevices();
维度mySize=新维度(myWidth、myHeight);
尺寸maxSize=新尺寸(minRequiredWidth、minRequiredHeight);
对于(int i=0;imaxSize.getWidth()&&dm.getHeight()>maxSize.getHeight())
{//更新此监视器上找到的最大大小
setSize(dm.getWidth(),dm.getHeight());
}
//在这里测试一下它是否有效
}

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

用法:

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

下面是一些函数代码(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的链接





这三个函数返回Java中的屏幕大小。这段代码说明了多监视器设置和任务栏。包含的函数有:getScreenInsets()getScreenWorkingArea()getScreenTotalArea()

代码:


下面是我经常使用的一段代码。它返回完整的可用屏幕区域(即使在多显示器设置中),同时保留本机显示器位置

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]
在相同的设置中,但将右监视器设置为主监视器时,函数返回

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

你能提供一些关于你的问题的更多细节吗?一行可以引出上百种不同的方式。我想你不关心多个监视器设置。似乎许多应用程序开发人员忽略了这些。每个人在我工作的地方都使用多个监视器,所以我们总是要考虑它们。我们探测所有监视器并将它们设置为屏幕对象,以便我们可以在打开新框架时将其作为目标。如果您真的不需要此功能,那么我想您提出这样一个开放式问题并如此迅速地接受了答案是可以的。欢迎使用Stack Overflow!虽然此代码片段可以解决此问题,但确实有助于提高您文章的质量。请记住您将在将来为读者回答这个问题,而这些人可能不知道您的代码建议的原因。还请尝试不要用解释性注释挤满您的代码,这会降低代码和解释的可读性!这对我不起作用。我有一个3840x2160显示器,但是
getScreenSize
re旋转1920x1080。这将仅给出多监视器系统上主显示器的尺寸。请参阅
int screenResolution = Toolkit.getDefaultToolkit().getScreenResolution();
System.out.println(""+screenResolution);
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);
}
java.awt.Rectangle[x=0,y=0,width=3840,height=1080]
java.awt.Rectangle[x=-1920,y=0,width=3840,height=1080]