0

ボタングループからすべての jradiobuttons のアイコンを変更するメソッドを作成しました。

public void setRadioButtonIcons(final ButtonGroup gruppe){

        Enumeration<AbstractButton> gruppeEnum = gruppe.getElements();

    while (gruppeEnum.hasMoreElements()){
        AbstractButton radio = gruppeEnum.nextElement(); 
        Icon unselIcon = new ImageIcon( Thread.currentThread().getContextClassLoader().getResource("checkbox0.jpg").getPath()); 
        Icon selIcon = new ImageIcon( Thread.currentThread().getContextClassLoader().getResource("checkbox1.jpg").getPath());
        radio.setIcon(unselIcon); 
        radio.setSelectedIcon(selIcon);
    }

    }

これは、Java 1.6.0_16 を使用する Ubuntu で正常に動作します。

Windows 7 で Java 1.6.0_18 を使用してメソッドを使用すると、アイコンが表示されません。それらは単に欠けています。プログラムは Nullpointer をスローしません...アイコンを見つけますが、表示しません。何か案は?このような単純な機能を Windows で使用できないとは少し信じがたいようです。

gifとjpgでやってみました。また、画像をjarファイルに入れ、ファイルシステムからロードしようとしました->同じ結果です。

編集:この構成では、ファイルはjarからロードされます。

4

2 に答える 2

2
    Icon unselIcon = new ImageIcon( Thread.currentThread().getContextClassLoader().getResource("checkbox0.jpg").getPath()); 
    Icon selIcon = new ImageIcon( Thread.currentThread().getContextClassLoader().getResource("checkbox1.jpg").getPath());

そこでgetPath()を呼び出すべきではなく、次のようにする必要があります。

    Icon unselIcon = new ImageIcon( Thread.currentThread().getContextClassLoader().getResource("checkbox0.jpg")); 
    Icon selIcon = new ImageIcon( Thread.currentThread().getContextClassLoader().getResource("checkbox1.jpg"));

パスによってjar内のリソースにアクセスすることはできず、ImageIconはURLを使用して画像を正常にロードできます。

それでもアイコンが表示されない場合は、使用しているL&Fがそれらのアイコンを使用せず、代わりに独自のアイコンを使用している可能性があります。おそらく、別のL&Fでコードをテストしてみてください。

于 2010-03-02T01:17:37.090 に答える
2

次のように、への呼び出しを削除してみてくださいgetPath()

public void setRadioButtonIcons(final ButtonGroup gruppe) {
    Enumeration<AbstractButton> gruppeEnum = gruppe.getElements();
    while (gruppeEnum.hasMoreElements()){
        AbstractButton radio = gruppeEnum.nextElement(); 
        Icon unselIcon = new ImageIcon(Thread.currentThread().getContextClassLoader().getResource("checkbox0.jpg")); 
        Icon selIcon = new ImageIcon(Thread.currentThread().getContextClassLoader().getResource("checkbox1.jpg"));
        radio.setIcon(unselIcon); 
        radio.setSelectedIcon(selIcon);
    }
}

問題は、文字列URLを提供することです。これは、文字列コンストラクターが期待するURL.getPath()種類の有効な文字列ファイル名である必要はありません。ImageIcon幸い、オブジェクトImageIconを理解する別のコンストラクターがあるためURL、を呼び出す必要はありませんgetPath()

于 2010-03-02T01:23:38.723 に答える