2016-12-16 11 views
0

Я написал приложение GUI, каждая оболочка использует GridLayout. После записи его на 1280 * 1024 экрана я понял, что должен сделать его пригодным для использования на каждом дисплее, так что я добавил способ преобразования высоту и ширину каждого элемента в соответствии с разрешением дисплея:Адаптировать элементы интерфейса SWT в соответствии с разрешением дисплея

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

Как сказал я использую GridLayout для всех оболочек. – Fabian83

+0

Если вы чувствуете, что ответ решил проблему, отметьте ее как «принятую», нажав зеленую галочку. Это помогает сосредоточиться на старых постах, у которых до сих пор нет ответов. –

+0

Извините, но не было ответа, который решил мою проблему. Спасибо за вашу помощь. Между тем я сам это понял: – Fabian83

ответ

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; 
} 
+0

От пользователя Neon пользователь не должен беспокоиться о масштабирующем коэффициенте. SWT позаботится об этом. Размеры, указанные в SWT/eclipse api, указаны в точках (размер в пикселях/scalefactor). Должен быть указан вышеуказанный код. Вы получите размер aboulutes в пикселях, только если вы используете 100% scalefactor. все остальные времена его относительно коэффициента масштабирования монитора – Sravan

0

Вы не должны указывать абсолютные размеры в пикселях вообще.

Во многих случаях размер элемента управления определяется его содержимым. Часто размер отображаемых символов дает хороший базовый измерительный блок. Ниже приведен фрагмент кода, который можно использовать в качестве шаблона для определения размера строк в пикселях.

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, также добавили поддержку различных разрешений изображений.

Смотрите также: