この日記は私的なものであり所属会社の見解とは無関係です。 GitHub: takahashikzn

HiDPI環境下のWindowsでSwingアプリケーションのメニューが壊れるのをどうにかする

タイトル通り。

本日、Parallelsで運用しているWindowsを「Retinaに最適」にしたところ、Swingアプリケーションのメニューが壊れました。


Parallelsの設定はこれ。

f:id:takahashikzn:20170405150828p:plain


で、これで例えばVisualVMを起動するとこうなります。

f:id:takahashikzn:20170405153444p:plain

本来、メニューが表示されるべき領域が謎の空白地帯に。

Altキーを押すと反応するので(表示は壊れたままだけど)、この空白地帯はメニューの成れの果てのようです。


このままでは話しにならないので調査した所、SwingのルックアンドフィールをWindows以外にすれば良いようです。

ご覧の通りメニューは壊れていて操作不能なので、設定ファイルを直接いじります。

アプリごとに異なるので、僕が普段使うものだけ解説。

SQL Developer

C:\Users[USER]\AppData\Roaming\SQL Developer\system4.2.0.16.260.1303\o.sqldeveloper.12.2.1.16.260.1303

のような場所にあるproduct-preference.xmlの該当箇所を編集します。

<hash n="environment-options">
   <value n="internalEncoding" v="UTF-8"/>

   <!-- Windowsルックアンドフィール以外のものを指定する -->
   <!--value n="lafClass" v="com.sun.java.swing.plaf.windows.WindowsLookAndFeel"/-->
   <value n="lafClass" v="javax.swing.plaf.metal.MetalLookAndFeel"/>
</hash>

残念ながら、SQL Developerの設定を変える毎にこの指定が初期化されてしまうようなので、毎回手で書き戻す必要があります…orz

VisualVM

VisualVMインストール先のetc/visualvm.confを編集します。

# 最後に"--laf Metal"を付ける
visualvm_default_options="-J-client -J-Xms24m -J-Xmx256m ... --laf Metal"

Astah

~/.astah/community/Jude.propertiesの以下の箇所を書き換えます。

# Metalルックアンドフィールを指定
ui.look_and_feel=javax.swing.plaf.metal.MetalLookAndFeel