我编写了一个 GUI 应用程序,每个 shell 都使用 GridLayout
。在为 1280*1024 屏幕编写之后,我意识到我应该使其在每个显示器上都可用,因此我添加了一个根据显示分辨率转换每个元素的高度和宽度的方法:
public static int widthconverter(double x){
int width = 0;
width=(int) ((x/1280.0)*screenWidth);
return width;
}
public static int heightconverter(double x){
int height = 0;
height=(int) ((x/1024.0)*screenHeight);
return height;
}
这并不像我想要的那样工作。例如,使用 800*600 分辨率,外壳会调整大小,但宽度和高度有点太小,无法覆盖所有包含的元素。转到 4K 显示器时,它也无法按需要工作。
任何解决此问题的想法都将受到高度赞赏。
最佳答案
您根本不应该以像素为单位指定绝对大小。
在许多情况下,控件的大小由其内容决定。通常,要显示的字符的尺寸给出了良好的基本测量单位。下面的代码片段可以用作模板来确定字符串的大小(以像素为单位)。
Control control = ...
FontData[] fontData = control.getFont().getFontData();
GC gc = new GC( control );
Point size = gc.stringExtent( "Abc" );
// or
int height = gc.getFontMetrics().getHeight();
int avgWidth = gc.getFontMetrics().getAverageCharWidth();
gc.dispose();
要确定控件将占用多少像素来显示给定文本,需要添加控件的修剪。例如
Rectangle trim = control.computeTrim( 0, 0, size.x, size.y );
如果使用 GridLayout
,则 widthHint
和 heightHint
可以设置为 trim
的相应字段.
这是设计用户界面以适应多种屏幕分辨率的简单方法。
自 Eclipse 4.6 版本以来,SWT 还提供了用于加载高分辨率监视器图像的 API。如果您提供不同屏幕分辨率的图像,SWT 将选择合适的图像。 JFace 和 Eclipse Platform/UI 等上层也添加了对不同图像分辨率的支持。
另请参阅:
- 高分辨率显示器支持:https://www.eclipse.org/eclipse/news/4.6/platform_isv.php#high-dpi-api
- 了解 SWT 布局:https://www.eclipse.org/articles/article.php?file=Article-Understanding-Layouts/index.html (忽略弃用警告,其中解释的概念和 API 仍然有效)
- 计算首选尺寸:http://www.codeaffine.com/2016/03/01/swt-scrolledcomposite/ (向下滚动到计算首选尺寸...)
关于java - 根据显示分辨率调整 SWT UI 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41185468/