3

JFrameとWindowsのタスクバーで異なるアイコンを使用する方法はありますか?

JFrame.setIconImage(img)を設定すると、これと同じ画像がWindowsアイコンとして使用されます。JFrameとWindowsのタスクバーに異なるアイコンを使用できますか?

4

3 に答える 3

8

これは、標準の Java 7 を実行している Windows 7 で機能します。

List<Image> icons = new ArrayList<Image>();
icons.add(new ImageIcon("16.png").getImage());
icons.add(new ImageIcon("32.png").getImage());
f.setIconImages(icons);

アイコンは正確に16x16 および 32x32 でなければなりません。

于 2013-02-21T15:02:14.383 に答える
3

setIconImages() を使用して、さまざまなサイズのアイコンのリストを提供できます。JRE は、使用ごとに使用可能な最適なサイズを選択します (そのため、アイコンが大きいサイズで表示されたときに、より詳細なバージョンを表示できます)。

私の知る限り、特定の用途のために異なるアイコンを表示する方法は計画されていません。

setUndecorated(true) を利用して、ウィンドウの装飾を自分でレンダリングすることもできますが、これを意図したとおりに機能させるのは簡単ではありません (ルック アンド フィールのため)。ハックな解決策は、ウィンドウ ピア コンポーネント (JDK ソース + 実行時のリフレクション) を介して自分の道を見つけ、いずれかのピア コンポーネントに別のアイコンを提供することです。ここでも、アクティブな L&F に固有のコードが必要になる場合があります。

于 2013-02-21T14:57:34.923 に答える
2

要件としてjdk1.5があるため、提案されたソリューションは使用しません...

だから、私はこれをしました:

public void setAppIcons(JFrame frame) {
    List<Image> images = new ArrayList<Image>();
    images.add(getImage(MessageUtils.getString("application.images.icon.app.32")).getImage());
    images.add(getImage(MessageUtils.getString("application.images.icon.app.16")).getImage());

    try {
        Class<?> [] types = {java.util.List.class};
        Method method = Class.forName("java.awt.Window").getDeclaredMethod("setIconImages", types);

        Object [] parameters = {images};
        method.invoke(frame, parameters);
    } catch (Exception e) {
        frame.setIconImage(images.get(0));
    }       
}

クライアントがjre1.6またはメジャーでアプリケーションを実行している場合、アプリケーションは設定するイメージリストを選択します...

あなたの提案のためのTks。

于 2013-02-21T18:08:27.220 に答える