java - 根据显示分辨率调整 SWT UI 元素

标签 java user-interface resize swt display

我编写了一个 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,则 widthHintheightHint 可以设置为 trim 的相应字段.

这是设计用户界面以适应多种屏幕分辨率的简单方法。

自 Eclipse 4.6 版本以来,SWT 还提供了用于加载高分辨率监视器图像的 API。如果您提供不同屏幕分辨率的图像,SWT 将选择合适的图像。 JFace 和 Eclipse Platform/UI 等上层也添加了对不同图像分辨率的支持。

另请参阅:

关于java - 根据显示分辨率调整 SWT UI 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41185468/

相关文章:

java图形窗口仅在调整大小时更新

iOS UI - 类似于 iPhoto 底栏 UI

html - 如何使元素与溢出保持在同一行

java - 不兼容的类型 - double 到 int?

java - 如何使用 selenium webdriver 在同一浏览器的另一个选项卡上打开 url?

c++ - 用于管理 C/C++ 嵌入式设备中的菜单的库

javascript - Three.js – 如何在不调整渲染器大小或缩放内容的情况下调整 Canvas 大小?

c++ - 当内容的大小发生变化时,QTextEdit 会触发什么事件(如果有的话)?

java - 为什么未登录异常堆栈跟踪?

java - 如何将 onSaveInstance 方法与 Recyclerview 一起使用