Java awt SystemTray - Surface 4 Pro上的Popmenu太小

时间:2015-12-29 12:16:58

标签: java awt retina-display

我们有一个带有trayicon(SystemTray)和弹出菜单(PopupMenu)的Java应用程序,它在所有平台上运行良好。

在新的Surface 4 Pro上我们遇到了一个问题,因为菜单的大小非常小。看起来并没有注意到它是一个'视网膜'/高清显示器。

有一种简单的方法可以解决这个问题吗?

enter image description here

2 个答案:

答案 0 :(得分:2)

看起来您可能不得不求助于设置菜单UI。

请参阅:https://docs.oracle.com/javase/8/docs/api/javax/swing/JPopupMenu.html#setUI-javax.swing.plaf.PopupMenuUI-

当然,这意味着您需要某种方式来确定您是否首先在Surface Pro上运行。

您可以尝试找出菜单用户界面使用的当前字体大小和尺寸,并将其与Toolkit.getDefaultToolkit().getScreenSize()

的屏幕尺寸进行比较

答案 1 :(得分:0)

作为一种与特定设备无关的通用解决方案,您可以通过以下方式检测每英寸点数的屏幕分辨率:

java.awt.Toolkit.getDefaultToolkit().getScreenResolution()

这将返回DPI中的屏幕分辨率(每英寸点数)。此值越大 - 文本字体对于特定字体大小将越小。
使用DPI设置可接受(或最大)的DPI设置并计算调整比率。

您可以通过替换UI委托字体(针对应用程序范围的效果)进行调整 或者,如果问题特定于系统托盘,则只为SystemTray的MenuItems导出更大的字体:

java.awt.Font defaultFont = java.awt.Font.decode(null); // default font 
float adjustmentRatio = 1.0f; //  Calculate this based on your metrics
float newFontSize = defaultFont.getSize() * adjustmentRatio ; 
java.awt.Font derivedFont = defaultFont.deriveFont(newFontSize);

// PopupMenu with the adjusted font size: 
MenuItem item = new MenuItem("Menu Item");
item.setFont(derivedFont);
popupMenu.add(item);