5

最上位にアイコンがあり、次のレベルにはない SWT ツリーを構築しようとしています。

ツリーのスクリーンショット

使用していない画像に残っているように見える空白を回避する方法はありますか? 次のコード スニペットを使用してみましたが、どちらも希望どおりにはなりませんでした。

SWT.MeasureItem:

tree.addListener(SWT.MeasureItem, new Listener()
{
  @Override
  public void handleEvent(Event event)
  {
    TreeItem item = (TreeItem)event.item;
    Image image = item.getImage();
    if (image == null)
    {
      event.x -= 40;
    }
  }
});

SWT.PaintItem:

tree.addListener(SWT.PaintItem, new Listener()
{
  @Override
  public void handleEvent(Event event) {
    TreeItem item = (TreeItem)event.item;
    Image image = item.getImage();
    if (image == null)
    {
      event.x -= 40;
    }
  }
});

どちらの場合も、テキストをもう少し左に描画できることを望んでいました。

4

2 に答える 2

2

この動作はネイティブコントロールに由来し、OS固有です(AFAIR、Macではこの問題は発生しません)。残念ながら、簡単な修正はありませんが、いくつかの一般的なアイコンを追加します(またはアイコンをまったく追加しません)。

于 2012-06-07T18:33:36.850 に答える
1

私は自分でさらに調査を行いました。ユージーンの答えによると、これはネイティブの動作のようです。注目すべき点がいくつかあります。

ツリー内のアイテムにアイコンがない場合、アイコン用のスペースはありません。ただし、アイコンを含む 1 つのアイテムでも、すべてのアイテムにアイコン用のスペースが残されます。

ハッキーなソリューションは次のように実装できます。

  • ネイティブ コントロールがアイコン スペースを残さないようにアイコンを使用しない
  • アイコンをテキストの前にスペースを追加したい項目の場合 (例: " " + テキスト)
  • テキストによって残されたスペースに必要なアイコンを描画する PaintItem リスナーを追加します

これはおそらくプラットフォーム間やシステム フォント間でうまく機能しないため、アイコンを使用することにしました。

于 2012-06-08T08:26:14.770 に答える