6

私がやりたいのは、テーブル内の要素間をタブで移動できるようにすることです。

私は現在、このようなテーブルを作成しています。

this.tableViewer = 
            new TableViewer(parent , SWT.FULL_SELECTION);

   tableViewer.setUseHashlookup(true);
        table = tableViewer.getTable();

        GridData gridData = new GridData(GridData.FILL_BOTH);
        gridData.grabExcessVerticalSpace = true;
        table.setLayoutData(gridData);

        table.setLinesVisible(true);
        table.setHeaderVisible(true);

        ...

   /** Create the Cell Editor Array - will hold all columns **/
        editors = new CellEditor[table.getColumnCount()];
        /** Cell Editor Row 1 **/


  /** Set the column properties **/
        tableViewer.setColumnProperties(columnNames);

        /** Assign the cell editors to the viewer **/
        tableViewer.setCellEditors(editors);

        /** Set the cell modifier for the viewer **/
        tableViewer.setCellModifier(new MyCellModifier(this));
        //Create the Table Viewer

        /** Table Viewer Content and Label Provider **/
        tableViewer.setContentProvider(new MyContentProvider(this));
        tableViewer.setLabelProvider(new MyLabelProvider());

しかし、集計の設定方法がわかりません。列の編集、データの表示など、他のすべては機能します。この最後の部分に固執するだけです。

明らかなドキュメントやjavadocsを見逃してしまった場合は、お詫びし、それらを指摘することさえできれば素晴らしいと思います。

4

5 に答える 5

9

投稿された解決策非常に低レベルであり、おそらく機能しますが(私はそれをテストしていません)、JFaceはこの特定の問題のフレームワークを提供します。この問題を解決するには、クラスorg.eclipse.jface.viewers.TableViewerFocusCellManager とともにを参照してください。org.eclipse.jface.viewers.CellNavigationStrategy

于 2009-10-09T14:43:35.930 に答える
7

デフォルトでは、タブはswtテーブルのセルからセルにジャンプしないと思います。代わりに、次のコントロールに移動します。したがって、タブが押されたときにトラバースしないように指示する必要もあります

KeyListener keyListener = new KeyLisener()
{
    public void keyPressed(KeyEvent evt)
    {
        if (evt.keyCode == SWT.TAB)
        {
            // There are numerous setSelection methods.  I'll leave this to you. 
            tableViewer.getTable().setSelection(...)
        }
    }

    public void keyReleased(KeyEvent evt){}
}

TraverseListener traverseListener = new TraverseListener()
{
    public void keyTraversed(TraverseEvent evt)
    {
        if (evt.keyCode == SWT.TAB)
            evt.doit = false;
    }
}

tableViewer.getTable().addKeyListener(keyListener);
tableViewer.getTable().addTraverseListener(traverseListener);

また、derBiggiが提案したように、リスナーはTableViewerではなくTableオブジェクトに追加する必要があります。

于 2009-10-07T17:07:32.843 に答える
3

TraverseListener(テーブル内をトラバースしない)で目的の動作を取得できず、aとで動作させるのに問題がFocusCellManagerありましたCellNavigationStrategy。私はついに、行内の列から列にタブで移動し、エディターを自動的にアクティブ化できるこのソリューションを見つけました。

Viewer viewer =  ...

TableViewerFocusCellManager focusCellManager =
    new TableViewerFocusCellManager(
        viewer,
        new FocusCellHighlighter(viewer) {});

ColumnViewerEditorActivationStrategy editorActivationStrategy =
    new ColumnViewerEditorActivationStrategy(viewer) {

            @Override
            protected boolean isEditorActivationEvent(
                ColumnViewerEditorActivationEvent event) {
                    ViewerCell cell = (ViewerCell) event.getSource();
                   return cell.getColumnIndex() == 1 || cell.getColumnIndex() == 2;
            }

};

TableViewerEditor.create(viewer, focusCellManager, editorActivationStrategy,
    TableViewerEditor.TABBING_HORIZONTAL);
于 2016-02-29T04:03:20.807 に答える
1

KeyListenerを追加し、選択範囲またはフォーカスを次のセルに設定する必要があります。

tableViewer.getTable().addKeyListener(new KeyListener(){

   public void keyPressed(KeyEvent e) {

       System.out.println("Key Pressed");
       if (e.keycode == SWT.TAB)
       {
           System.out.println("Detected TAB key");
           // set table viewer selection
       }
   }

   public void keyReleased(KeyEvent e) {

       System.out.println("Key Released");
   }}
);
于 2009-10-01T01:52:27.197 に答える
0

また、テーブル内の要素間にタブを実装する必要がありました。星雲のグリッドをテーブルとして使用します。まず、フォーカスのタブ移動を抑制して、フォーカスがテーブルから移動しないようにする必要がありました。 ここに画像の説明を入力してください

次に、フォーカス/選択を次のセルに移動するキーリスナーを追加しました。

ここに画像の説明を入力してください

また、選択範囲を1セル右に移動し、行の終わりになったら次の行の先頭に移動する独自のアルゴリズムを作成しました。テーブルの終わりに達すると、選択範囲はテーブルの最初のセルに戻ります。

これで問題は解決しました。

于 2016-07-04T12:33:22.410 に答える