2012年2月24日金曜日

Swingで画像表示

最近、Swingで画像表示する機会があったのですが、なかなか思ったように表示ができなかった時のメモ

検索するとよく出てくるのが
ImageIcon icon = new ImageIcon("./img/aaa.png");
label.setIcon(icon);
のような、ラベルにセットアイコンする方法。

コレだと表示はできるのですが、画像の入れ替えが思ったようなタイミングできませんでした。
ほかのやり方をさがしてみたところ、以下のやり方がお手軽でかつ入れ替えもうまく行きました。

label.setText("<html><body><img src=\"file:/tmp/aaa.png\"</body></html>");

入れ替えたいときはsetText("")でOK。

labelってHTML表示してくれるんだなぁ。


2012年2月2日木曜日

LinkedMultiMap その2

��ーパーハカーの指摘により、
以下のパターンは順序が保持できないという抜け道が。

LinkedMultiMap

HTTPリクエストのパラメータを保持したい場合に、HashMapなどの連想配列を使うことが多いと思いますが、以下のようなパラメータの場合、HashMapが重複キーを許さないため、param2をうまく保持できないときがあります。

param1=value1&param2=value2-1&param2=value2-2&param2=value2-3&param3=value3

というわけで、重複キーを許す(順序も保持しつつ)Mapを探したところ、
apache pig の LinkedMultiMapでいけそうだったので試してみました。

-----
ソース
LinkedMultiMap<String,String> linkedmultimap = 
new LinkedMultiMap<String,String>();

linkedmultimap.put("param1", "value1");
linkedmultimap.put("param2", "value2-1");
linkedmultimap.put("param2", "value2-2");
linkedmultimap.put("param2", "value2-3");
linkedmultimap.put("param3", "value3");

Set<String> keys = linkedmultimap.keySet(); 

        Iterator<String> mapItereter = keys.iterator();  
        while(mapItereter.hasNext()) {
            String paramKey = mapItereter.next();  
            List<String> list = linkedmultimap.get(paramKey);

            Iterator<String> listItereter = list.iterator();  
            while(listItereter.hasNext()){
            String value = listItereter.next();
            System.out.println(paramKey + "=" + value);
            }
        } 

-----
結果
param1=value1
param2=value2-1
param2=value2-2
param2=value2-3
param3=value3