2016-04-14 2 views
1

У меня есть приложение Java, использующее Swing GUI, когда я выполняю приложение в MAC pro или на поверхности, размер пользовательского интерфейса был очень мал, но размер шрифта нормальный, если я изменяю шрифт размер может быть подходящим, но шрифт и объекты пользовательского интерфейса станут очень маленькими, их трудно прочитать.Swing GUI layout странно в панели 4K

Могу ли я позволить макету выглядеть как панель полного HD в панелях высокого разрешения?

ответ

2

Вам необходимо рассчитать коэффициент разрешения. Эти кодовые блоки вычисляют коэффициент для всех ОС

public static Float getRetinaScaleFactor(){ 
    Object obj = Toolkit.getDefaultToolkit().getDesktopProperty("apple.awt.contentScaleFactor"); 
    if(obj != null){ 
    if(obj instanceof Float) 
    return (Float) obj; 
    } 
    return null; 
} 


public static boolean hasRetinaDisplay(){ 
    Float fRetinaFactor = getRetinaScaleFactor(); 
    if(fRetinaFactor != null){ 
    if(fRetinaFactor > 0){ 
     int nScale = fRetinaFactor.intValue(); 
     return (nScale == 2); // 1 indicates a regular mac display, 2 is for retina 
    } 
    } 
    return false; 
} 


private static float getResulationFactor(){ 
    float fResolutionFactor = ((float) Toolkit.getDefaultToolkit().getScreenResolution()/96f); 
    if(hasRetinaDisplay()){ 
     fResolutionFactor = fResolutionFactor * getRetinaScaleFactor().floatValue(); 
    } 
return fResolutionFactor; 
} 

Теперь мы имеем значение коэффициента разрешения. Позволяет использовать его. Вы устанавливаете это значение по одному для каждого, как это.

JLabel jTestLabel = new JLabel("hello world"); 

Font jNewFont = jTestLabel.getFont().deriveFont(Font.Plain, jTestLabel.getFont().getSize() * getResulationFactor()); 

jTestLabel.setFont(jNewFont); 

Или вы можете использовать это значение только один раз, переопределив значение defaultFont вашего lookandFeel.

+0

спасибо, если я использую этот параметр, размер объекта пользовательского интерфейса будет изменяться одновременно или только размер шрифта. – Ives

+0

Размер шрифта приводит к изменению размера объектов пользовательского интерфейса из-за расположения объекта. Однако, если ваш объект пользовательского интерфейса имеет определенные настройки, вам также необходимо установить это значение. Например, jLabel.setBorder (новый EmptyBorder (2, 2, 2, 2), вы должны так изменить, чтобы иметь возможность изменять всю конфигурацию пользовательского интерфейса с точки зрения разрешения экрана пользователя jLabel.setBorder (новый EmptyBorder (2 * factor, 2 * фактор, коэффициент 2 *, коэффициент 2 *); – ziLk