6

私は、特に OS X で動作する Java デスクトップ アプリを持っています。

現在、新しい MacBook Pro には Retina ディスプレイが搭載されており、気になっているのは、Swing に関してどのように機能するのかということです。

Java アプリが Swing コンポーネントと一部のビットマップ グラフィックス (カスタム アイコン/ImageIcon など) の両方を使用する場合はどうでしょうか。

すべてのデスクトップ Java アプリのサイズを自動的に変更するか (たとえば、すべてのピクセルを 4 倍にする)、またはアイコン セットの 2 つのバージョン (たとえば、1 つは 24x24 アイコンで、もう 1 つは 96x96 アイコン) を作成し、アプリがRetinaディスプレイで実行されていますか?

4

5 に答える 5

7

IconLoader ライブラリを使用します。HiDPI 画像をサポートしていますhttp://bulenkov.com/iconloader/また、HiDPI 画像 (描画など) を操作する方法も提供します。

于 2014-03-05T10:59:51.593 に答える
6

Apple の Java 6 では、同じイメージの複数のバージョンを提供できます。画面 (網膜かどうか) に応じて、いずれかの画像が選択されて描画されます。

ただし、これらの画像は特別な方法でロードする必要があります。

Toolkit.getDefaultToolkit().getImage("NSImage://your_image_name_without_extension");

たとえば、(通常の解像度の) 画像の名前が「scissor.png」の場合、高解像度バージョンの「scissor@2x.png」を作成し ( Apple の命名規則に従って)、両方の画像を次のResourcesディレクトリに配置する必要があります。アプリ バンドル (はい、アプリをバンドルする必要があります)。次に呼び出します。

Image img = Toolkit.getDefaultToolkit().getImage("NSImage://scissor");

結果の画像をボタンで使用すると、適切な解像度で魔法のように描画されます。

他に使用できる「トリック」が 2 つあります。

  1. Image を描画する前に、Graphics2D オブジェクトで (0.5, 0.5) の AffineTransform を使用します。このJava-devメッセージも参照してください
  2. このハックを使用してプログラムで画像の高 dpi バージョンを作成する

最初の「トリック」(0.5 スケーリング) は、Oracle の Java 7/8 でも動作します。つまり、コンポーネントの Graphics オブジェクトに 0.5 のスケーリングで画像を直接描画すると、Retina ディスプレイで高解像度で (元のサイズの半分でも) レンダリングされます。

アップデート

Java 9 以降では、MultiResolutionImageインターフェースを介して、さまざまな解像度の画像に対するより優れた組み込みサポートがあります。詳細については、この回答を参照してください。

于 2013-04-29T09:53:33.600 に答える
0

これは、Retina MacBook '12 でアイコンがどのように見えるかです。

ここに画像の説明を入力

左側の IntelliJ IDEA 11 (swing アプリ) のアイコンと、右側の IDEA 12 はretinizedと主張されています。ご覧のとおり、自動的にサイズ変更されたアイコン (左側) はかなり見苦しく見えます。

私の知る限り、彼らはChrome チームのメンバーと同じように、2 倍のサイズのアイコンを提供することでそれを実現しました。

于 2012-12-26T01:19:51.963 に答える