在4K面板中,Swing GUI布局很奇怪

时间:2016-04-14 08:42:11

标签: java swing user-interface screen-resolution

我有一个使用Swing GUI的Java应用程序,当我在MAC pro或表面执行应用程序时,UI大小非常小但字体大小正常,如果我改变字体大小它可以适合,但是字体和UI对象将变得非常小,难以阅读。

我可以让布局在高分辨率面板中看起来像全高清面板吗?

1 个答案:

答案 0 :(得分:2)

您需要计算分辨率因子。此代码块计算所有OS的因子

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);

或者您可以通过覆盖lookandFeel的defaultFont值来使用此值一次。