スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[Java][Eclipse]JFaceのListViewerでアイコン表示

SWTのListにアイコンを表示することが出来ないかと調べていました。
すると、JFaceのListViewerを使用すれば表示が拡張できることがわかりました。
JFaceのViewerフレームワークは、それだけでは扱いづらいSWTのWidgetに強力なサポート機能を提供してくれます。

ListViewerは、LabelProviderのgetTextメソッドをオーバーライドして、ListのItemであるオブジェクトをどう表示するか自分で拡張できます。デフォルトはObject#toString()の戻り値です。

ソースは以下、ここではアイテムの文字列に簡単なインデックスを追加しています。

import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.ListViewer;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Shell;


public class ListViewerSample extends ApplicationWindow {

    public static void main(String[] args) {
        new ListViewerSample();
    }

    public ListViewerSample() {
        super(new Shell());
        setBlockOnOpen(true);
        open();
    }

    @Override
    protected Control createContents(Composite parent) {
        List list = new List(parent, SWT.NONE);
        // ListViewerに接続
        ListViewer viewer = new ListViewer(list);
        viewer.setLabelProvider(new LabelProvider(){
            private int index = 0;

            @Override
            public String getText(Object element) {
                // インデックスを追加
                return index++ + ":" + element.toString();
            }
        });

        viewer.add("Item");
        viewer.add("Item");
        viewer.add("Item");
        viewer.add("Item");
        return parent;
    }
}


実行結果はこちら

ListViewer

そして、今回行いたいのが、このリストのアイテムにアイコンを表示することなのですが。。。
これができない!

LabelProviderにはgetImageというメソッドもありまして、これをオーバーライドしてImageを返してあげれば表示されるものと思い込んでいたのですが、表示されませんでした。

でも同じくJFaceのTableViewerではこれが出来てしまうのです。
ソースは次のようになります。

import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;


public class TableViewerSample extends ApplicationWindow {

    public static void main(String[] args) {
        new TableViewerSample();
    }

    public TableViewerSample() {
        super(new Shell());
        setBlockOnOpen(true);
        open();
    }

    @Override
    protected Control createContents(Composite parent) {
        Table table = new Table(parent, SWT.NONE);
        // TableViewerに接続
        TableViewer viewer = new TableViewer(table);
        viewer.setLabelProvider(new LabelProvider(){
            @Override
            public Image getImage(Object element) {
                // Imageを生成して返す
                Image icon =
                    new Image(
                            Display.getDefault(),
                    ".\\images\\generic_element.gif");
                return icon;
            }
        });

        viewer.add("Item");
        viewer.add("Item");
        viewer.add("Item");
        viewer.add("Item");
        return parent;
    }
}

実行結果はこうなります。

TableViewer_Icon

まさにやりたかったことはこれなのですが。。。
アイコン表示するにはTable使わないといけないのかなぁ。

同じ実装をListViewerに対してやっても無理なのです。
嫌だなぁ。。

スポンサーサイト

theme : ソフトウェア
genre : コンピュータ

comment

管理者にだけ表示を許可する

自己紹介

煩悩即菩提

Name:煩悩即菩提


三流SEです。
開発は基本Javaです。
Androidアプリ作り隊。。

お絵かきを少々しとります。
こちらもぱっととしないのが悩みです。

bonnosokubodaiをフォローしてください

Pixivアカウント

カレンダー   
Recomend


ビデオニュース・ドットコム
検索フォーム
最新記事
最新コメント
月別アーカイブ
カテゴリ
最新トラックバック
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。