0

この画像リスト プロバイダーをサムネイル プロバイダーに変更する際に問題があります。必要に応じて、ビューも投稿します。

public Object[] getElements(Object inputElement) {
        if (iDirname == null)
            return null;
        File dir = new File(iDirname);
        FilenameFilter filter = new FilenameFilter() {
            public boolean accept(File directory, String filename) {
                if (filename.endsWith("jpg") || (filename.endsWith("bmp")) || (filename.endsWith("png") || (filename.endsWith("JPG") || (filename.endsWith("BMP")) || (filename.endsWith("PNG")))))
                    return true;
                else
                    return false;
            }
        };
        String[] dirList = null;

        if (dir.isDirectory()) {
            dirList = dir.list(filter);
            for (int i=0; i<dirList.length;++i){

                //dirList2[i] = new Image(device, dirList2[i]); added this to try passing array of Images - failed.
                dirList[i] = iDirname + File.separatorChar + dirList[i];

            }
        }
        return dirList;
    }

そして景色

public void createPartControl(Composite parent) {
        iViewer = new ListViewer(parent);
        iViewer.setContentProvider(new DirListProvider());


        getSite().setSelectionProvider(iViewer);
        makeActions();
        hookContextMenu();
        contributeToActionBars();

    }

提供されたパス リストをサムネイル表示に変更する方法がわかりません。提供されたコンテンツを配列に取得し、それを繰り返して画像を作成する必要がありますか? もしそうなら、どのように?

よろしくお願いします。

編集:

追加した

ImageDescriptor[] dirList = null;
        if (dir.isDirectory()) {
            String[] dirList2 = dir.list(filter);
            for (int i=0; i<dirList2.length;++i){

                dirList[i] = ImageDescriptor.createFromImageData(new ImageData(iDirname + File.separatorChar + dirList2[i]));
                //dirList[i] = iDirname + File.separatorChar + dirList[i];

            }
        }
        return dirList;

しかし、これはまったく何も示していません。

あなたが私に を使うように言っているときComposite、それは私の親変数ですか? で渡されたパスから画像を表示する方法がまだわかりませんListProvider。私はこれで本当に緑です:/

4

2 に答える 2

1

ここで欠けているのはLabelProviderです。を使用しLabelProviderて、ビューアの入力の各要素に画像を提供できます。

しかし、Francis Upton の言うとおりです。ListViewer は、最終的に 1 列の画像になるため、実際にはニーズに合わないと思います。画像を に直接追加することはできませんがComposite、ラベルの背景画像として設定する必要があります。

他にも考慮すべき点がいくつかあります。

  • それらがシステムハンドルを使い果たすので、それらを使い終わったらdispose()、あなたはあなたの必要があります。Imagesしたがって、メソッドで作成した画像を追跡する必要がありますgetElements(Object)
  • 画像を読み込んでいるディレクトリにまだサムネイルが含まれていない場合は、UI に表示する前に画像をスケーリングする必要があります。

ContentProvider の getElements(Object) メソッドから返す配列の型は、LabelProvider のメソッドに渡される型を定義することに注意してください。そのため、画像へのパスを表す文字列の配列を返すことから始めました。LabelProvider は、プロバイダの getImage メソッドから返されるようにこれらを画像にロードする必要がありますが、これらの画像の破棄について述べたことを覚えておいてください! 次に、画像記述子の配列を返すように切り替えました。この場合、受信オブジェクトを ImageDescriptor にキャストし、それを使用して getImage メソッドで画像を作成する必要があります。これが機能したら、これがニーズを満たしているかどうかを考えてから、コンポジット/グリッドレイアウト/ラベル アプローチなどの別の実装を検討することができます。

于 2012-05-20T20:15:55.300 に答える
0

これには a を使用しませんListViewer。を作成してから、必要な列数や余白などCompositeを設定してから、画像をコンポジットに直接追加します。GridLayout私の知る限り、想像のような任意のものを SWTListに入れることはできないため、ListViewerは役に立ちません。このすべてをcreatePartControlメソッドで実行できます。

于 2012-05-20T19:29:03.873 に答える