2013-10-18 7 views
5

私は何を期待している、this stackOverflow postからのコードを使用しています:なぜUIManager.getDefaults().keySet()はUIManager.getDefaults()。keys()と異なる値を返しますか?

Enumeration<Object> keys = UIManager.getDefaults().keys(); 
    while (keys.hasMoreElements()) { 
     Object key = keys.nextElement(); 
     Object value = UIManager.get(key); 
     if (value instanceof FontUIResource) { 
      FontUIResource orig = (FontUIResource) value; 
      Font font = new Font(orig.getFontName(), orig.getStyle(), orig.getSize()); 
      UIManager.put(key, new FontUIResource(font)); 
     } 
    } 

私は唯一の代わりjavax.swing.plafでのクラスのカップルをループする次のコードを、それをリファクタリングしてみましたコンポーネントの完全なセット私はswing APIとHashTable APIを掘り下げようとしましたが、私はまだ何かが明らかでないと感じています。

for(Object key : UIManager.getDefaults().keySet()){ 
     Object value = UIManager.get(key); 
     if(value instanceof FontUIResource){ 
      FontUIResource orig = (FontUIResource) value; 
      Font font = new Font(orig.getFontName(), orig.getStyle(), orig.getSize()); 
      UIManager.put(key, new FontUIResource(font)); 
     } 
    } 

コードの最初のブロックが終わっループおよび第2アイテムのみの一握りの上にループしながら、すべてのフォントのリソースを変更する理由を任意のアイデア?

+1

もこの関連[Q&A](http://stackoverflow.com/q/5729306/230513)を参照してください。 – trashgod

答えて

2

これは、あなたが使用しているメソッドが別のオブジェクトを完全に返すという、いい答えです。

UIManager.getDefaults()。keys(); Enumerationを返します。エニュメレーションは、反復するコレクションにオブジェクトを再作成することを心配していません。

UIManager.getDefaults()。keySet()Setを返します。したがって、繰り返しオブジェクトを含むことはできません。要素がオブジェクトのset que equalsメソッドに挿入されると、そのオブジェクトがすでにセットにあるかどうかがチェックされます。あなたは親切FontUIResourceのオブジェクトを探していると、このオブジェクトは、次の実装OSが等しくなる方法があります:引数を持つ種類FontUIResourceの設定すべてのキーにそう

public boolean equals(Object obj) 
    Compares this Font object to the specified Object. 
Overrides: 
    equals in class Object 
Parameters: 
    obj - the Object to compare 
Returns: 
    true if the objects are the same or if the argument is a Font object describing the same font as this object; false otherwise. 

同じフォントを説明します設定されたものに挿入されていないものが挿入される。このセットには、マップ上のキーのサブセットのみが含まれています。上のJavaセットについて

さらに詳しい情報:

http://goo.gl/mfUPzp

+0

ありがとう、@nrodriguez。私は列挙型と集合型の違いに精通していますが、FontUIResourceがそのように定義されていることを認識していませんでした! –

関連する問題