1

SWT ツリー テーブルを使用して、テーブル ベースのエディターを実装しました。ユーザーが水平方向にスクロールしたときに最初の数列がその位置にとどまるようにする方法が見つからないことを除いて (編集中の行を識別できるようにするため)、ほとんど私たちが望んでいることを実行します。

さまざまな程度の不完全または放棄された多くのサードパーティ製テーブル コントロールと、2 つのテーブルの使用方法を示すスニペットがあります (これらは垂直方向にスクロールすると同期しなくなります)。

これを解決する最善の方法は何ですか?

4

2 に答える 2

1

この「公式」SWTスニペットは、少なくとも私のマシンでは、やりたいことを実行します。垂直スクロールで同期が外れることはありません。しかし、価格は 2 番目のスクロールバーです。これを防ぐためSWT.NO_SCROLLに、左側のテーブルのコンストラクターにスタイルを追加できます。

これを改善するには、両方のテーブルにリスナーを追加する必要があります。これによりSWT.Traverse、ユーザーがキーを使用してナビゲートした場合、次のように同期されます。

  leftTable.addListener(SWT.Traverse, new Listener() {

     public void handleEvent( Event event ) {
        rightTable.setTopIndex(leftTable.getTopIndex());
     }
  });

別の Table 実装を使用するつもりはありません。SWT の最大の利点である、各 OS で「適切」に見えるネイティブ ウィジェットを使用するという利点が失われるからです。とにかくそれをやりたいのであれば、Nebula プロジェクトのGridはアルファ タグが示すよりもはるかに成熟しています。ただし、それがあなたが望むことを行うことができるかどうかはわかりません。

于 2009-03-06T22:21:16.347 に答える
0

「同期の問題」は、MacO ベースの SWT でのみ発生します。ターゲット プラットフォームが Windows の場合、指定された SWT-Snippet に問題はないはずです。発生するすべてのイベント (折りたたみ、展開、マウス スクロールなど) を同期するために、両方のテーブルに登録するリスナーが増えます。

于 2009-05-25T20:25:36.430 に答える