質問

私がやりたいのは、テーブルの要素間のタブができることです。

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

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を逃した場合 - 私の謝罪であり、それらを指摘することさえ素晴らしいことです。

役に立ちましたか?

解決

デフォルトのタブは、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ではなく、テーブルオブジェクトに追加する必要があります。

他のヒント

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

私はaで望ましい動作を得ることができませんでした TraverseListener (それはテーブル内で通過しません)、そして私はそれを一緒に動作させるのに苦労しました FocusCellManagerCellNavigationStrategy. 。ついに、このソリューションを見つけました。このソリューションは、列から列への列へのタブを列に並べて、エディターを自動的にアクティブにすることができます。

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);

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");
   }}
);

また、テーブル内の要素間でタブを実装する必要がありました。星雲のグリッドをテーブルとして使用します。まず、焦点を抑制して、テーブルから外に出ないようにすることを抑制する必要がありました。enter image description here

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

enter image description here

また、選択したアルゴリズムを作成して、選択を1つのセルを右に移動し、行の最後に次の行の先頭に移動します。テーブルの終了に到達すると、選択はテーブルの最初のセルに戻ります。

これは私にとって問題を解決しました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top