如何确定屏幕几何形状



我有以下代码:

import java.awt.*;
public class ShowScreenSize {
public static void main(String[] args) {
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gd = ge.getDefaultScreenDevice();
System.out.println("Default mode : " + gd.getDisplayMode());
System.out.println("Default size : " + gd.getDefaultConfiguration().getBounds());
System.out.println("Default width : " + gd.getDisplayMode().getWidth());
System.out.println("Default height : " + gd.getDisplayMode().getHeight());
System.exit(0);
}
}

在我的linux桌面上,它打印

Default mode : 1680x1050x[Multi depth]@50Hz
Default size : java.awt.Rectangle[x=0,y=0,width=1680,height=1050]
Default width : 1680
Default height : 1050

在我的linux upmc上,它打印

Default mode : 720x1280x[Multi depth]@60Hz
Default size : java.awt.Rectangle[x=0,y=0,width=1280,height=720]
Default width : 720
Default height : 1280

umpc上的屏幕是为纵向模式制作的,但系统配置为在横向模式下使用它。似乎我看过的所有关于确定屏幕几何形状的正确方法的帖子都会在umpc上得到错误的结果。是否有正确的方法来获得方向?(右旋转vs左旋转)getDefaultConfiguration().getBounds()是更好的方法吗?

对于奖励点,是否有一些我可以设置(env var, property, ???),这将使第三方程序看到正确的几何图形(1280x720)在umpc上而不改变它的代码?

有意思。在我的Windows 10机器上,我得到以下结果:

Default mode   : 3840x2160x32bpp@60Hz
Default size   : java.awt.Rectangle[x=0,y=0,width=2560,height=1440]
Default width  : 3840
Default height : 2160

我的getDefaultConfiguration().getBounds()返回一个较小的值。我认为这与Windows 10的缩放有关。

您可以尝试这个方法,它能够返回连接到系统的几个屏幕的屏幕尺寸。如果系统只有一个屏幕,那么屏幕分辨率将保持在索引0。但是,我没有Linux机器在那个特定的操作系统上测试:

/**
* Returns the Multi Screen resolutions within a Dimension Array.
*
* @return (java.awt.Dimension[] Array)
*/
public java.awt.Dimension[] getAllScreenResolutions() {
final java.awt.GraphicsEnvironment environment = java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment();
final java.awt.GraphicsDevice[] devices = environment.getScreenDevices();
java.awt.Dimension[] dims = new java.awt.Dimension[devices.length];
for (int i = 0; i < devices.length; i++) {
java.awt.GraphicsConfiguration gc = devices[i].getDefaultConfiguration();
java.awt.Rectangle screenBounds = gc.getBounds();
dims[i] = new java.awt.Dimension(screenBounds.width, screenBounds.height);
}
return dims;
}

最新更新