我已经编写了一个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显示它也不能按需工作。
非常感谢任何解决此问题的想法。
答案 0 :(得分:1)
你根本不应该以像素为单位指定绝对尺寸。
在许多情况下,控件的大小由其内容决定。通常,要显示的字符的尺寸给出了良好的基础测量单位。下面的代码段可以用作模板来确定字符串的大小。
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这样的上层也增加了对不同图像分辨率的支持。
另见:
答案 1 :(得分:0)
为遇到同样问题的人解决我的问题的代码:
static double screenWidth= screen.getWidth();
static double screenHeight=screen.getHeight();
int pixelPerInch=java.awt.Toolkit.getDefaultToolkit().getScreenResolution();
static double scalingFactorheight=(screenWidth/screenHeight)/1.25;
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*scalingFactorheight);
return height;
}