2011-10-18 27 views
3

jface tableViewerを使用しています。テーブルにデータがない場合、すべての列が正しく表示されますが、データがテーブルに追加されると、表。テーブル最後に余分な空白の列が表示されます

+0

を使用して、高さのヒントを提供し、私は日食がWONTFIXとしてそれをマークしていたに

-For行

設定GridDataに...そうこのスペースを取り除くために多くを行うことはできません... –

+0

余分な空白行が下部にもあります。これは、垂直と水平のスクロールバーのスペースを確保する方法のようです。 – CodyBugstein

答えて

-1

は私が... ..日食がWONTFIXとしてそれをマークしていたので、TPそれと一緒に暮らすいるこのspace..Weを削除するには多くを行うことはできません:)

0

ちょうど推測します。おそらく、列がすべての表を埋めるようにリサイズされないのでしょうか? どのようにして列の幅を設定しますか? テーブルコンテナにTableColumnLayoutを使用することを検討してください。

0

をWindowsでは、常に余分な列を取得します/行。設定されているすべての列の正味の幅が表の次元よりも小さい場合。だから、あなたのテーブルをテーブルに合わせるのに常に良いことです。また、スクロールバーにはスペースが残っていますが、これについてはあまりよく分かりませんが、縦スクロールバーと横スクロールバーのどちらを指定するのが良いかを指定してください。

4

私はTreeViewer + TreeViewerColumnを使用して、この回避策があまりにもあなたのTableViewerのために働くかもしれない、あまりにもこの問題を抱えています:

treeViewer.getTree().addControlListener(new ControlAdapter() { 
     public void controlResized(ControlEvent e) { 
      packAndFillLastColumn(); 
     } 
    }); 

アクションが

である:プログラムで、親のサイズ変更に最後の列のサイズを設定
// Resize last column in tree viewer so that it fills the client area completely if extra space. 
protected void packAndFillLastColumn() { 
    Tree tree = treeViewer.getTree(); 
    int columnsWidth = 0; 
    for (int i = 0; i < tree.getColumnCount() - 1; i++) { 
     columnsWidth += tree.getColumn(i).getWidth(); 
    } 
    TreeColumn lastColumn = tree.getColumn(tree.getColumnCount() - 1); 
    lastColumn.pack(); 

    Rectangle area = tree.getClientArea(); 

    Point preferredSize = tree.computeSize(SWT.DEFAULT, SWT.DEFAULT); 
    int width = area.width - 2*tree.getBorderWidth(); 

    if (preferredSize.y > area.height + tree.getHeaderHeight()) { 
     // Subtract the scrollbar width from the total column width 
     // if a vertical scrollbar will be required 
     Point vBarSize = tree.getVerticalBar().getSize(); 
     width -= vBarSize.x; 
    } 

    // last column is packed, so that is the minimum. If more space is available, add it. 
    if(lastColumn.getWidth() < width - columnsWidth) { 
     lastColumn.setWidth(width - columnsWidth); 
    } 
} 

私にとってはうまく機能します。列のサイズを偽に設定したい場合があります.-)最後の列のデータが変更されたとき(垂直スクロールバーの挿入/削除)にも呼び出すことができます。

+0

なぜそれがリスナーにありますか? – CodyBugstein

+0

これは、ツリーコンポーネントのサイズ変更時に再計算する必要があるためです。 – ThomasRS

+0

'テーブル 'でうまく働いた。ありがとう – CodyBugstein

0

私はpackAndFillLastColumn()メソッドを使用していましたが、それは私のために働いていました。しかし、私は1つの問題を発見した。私のテーブルは境界線で作成されました。 packAndFillLastColumn()メソッドを使用した後、行の境界線は存在しなくなりました。 packAndFillLastColumn()メソッド内でsetLinesVisible(true)メソッドを使用しましたが、それでも動作しません。

1

ありがとうThomas。 TableViewerとTableColumnを使用していましたが、あなたの考えは私のためにも働いていました。

他人がヒントを取れるように自分のコードを引用してください。

`public void controlResized(ControlEvent e) { 

    if (listOfTableColumns.size() != colProportions.length) 
    { 
     logger.warn("Number of columns passed and size of column proportions array are different. " + 
       "Columns resizing shall not be effective on GUI window resizing"); 
     return; 
    } 
    Rectangle area = tableBaseComposite.getClientArea(); 
    Point size = theTable.computeSize(SWT.DEFAULT, SWT.DEFAULT); 
    ScrollBar vBar = theTable.getVerticalBar(); 
    int width = area.width - theTable.computeTrim(0,0,0,0).width - vBar.getSize().x; 
    if (size.y > area.height + theTable.getHeaderHeight()) { 
     // Subtract the scrollbar width from the total column width 
     // if a vertical scrollbar will be required 
     Point vBarSize = vBar.getSize(); 
     width -= vBarSize.x; 
    } 
    Point oldSize = theTable.getSize(); 

    if (oldSize.x > area.width) { 
     // table is getting smaller so make the columns 
     // smaller first and then resize the table to 
     // match the client area width 
     int index = 0 ; 
     for (Iterator<TableColumn> iterator = listOfTableColumns.iterator(); iterator.hasNext();) 
     { 
      TableColumn column = iterator.next(); 
      column.setWidth((int) numberFromPercentage(width, colProportions[index++])); 
     } 
     listOfTableColumns.get(listOfTableColumns.size() - 1).pack(); 
     theTable.setSize(area.width, area.height); 
    } else { 
     // table is getting bigger so make the table 
     // bigger first and then make the columns wider 
     // to match the client area width 
     int index = 0; 
     theTable.setSize(area.width, area.height); 
     for (Iterator<TableColumn> iterator = listOfTableColumns.iterator(); iterator.hasNext();) 
     { 
      TableColumn column = iterator.next(); 
      column.setWidth((int) numberFromPercentage(width, colProportions[index++])); 
     } 
     listOfTableColumns.get(listOfTableColumns.size() - 1).pack(); 
    } 
}` 
+0

ここにstatmentの配置に関する問題があります。 listOfTableColumns.get(listOfTableColumns.size() - 1).pack(); しばらくコードを修正してください –

+0

まだ修正しましたか? – CodyBugstein

+0

いいえ時間を得られなかった –

0

シンプル! createContents関数内のテーブルコマンドで次の行を削除してください。

table.getColumn(i).pack();

グッド運

0

末尾に余分な不要な列空間を除去するための複雑なハックのための必要性無し...

だけのColumnLayoutを作成します。

TableColumnLayout columnLayout = new TableColumnLayout(); 

してから各列に設定します。

columnLayout.setColumnData(YOUR_VIEWER_COLUMN1.getColumn(), new ColumnPixelData(200)); 
columnLayout.setColumnData(YOUR_VIEWER_COLUMN2.getColumn(), new ColumnWeightData(200, 100)); 

は最後に、あなたの親コンポジットにレイアウトを設定:

parent.setLayout(columnLayout); 

全サンプル:

回避策の使用など
public void createPartControl(Composite parent) { 
    TableViewer viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION); 

    TableViewerColumn keyColumn = new TableViewerColumn(viewer, SWT.LEFT); 
    TableViewerColumn valueColumn = new TableViewerColumn(viewer, SWT.LEFT); 

    TableColumnLayout columnLayout = new TableColumnLayout(); 
    columnLayout.setColumnData(keyColumn.getColumn(), new ColumnPixelData(200)); 
    columnLayout.setColumnData(valueColumn.getColumn(), new ColumnWeightData(200, 100)); 
    parent.setLayout(columnLayout); 
} 
0

:treeViewerのコンポジットおよび使用して各列の適切な列のデータを設定するための

-For列

使用TableColumnLayout: 「tableColumnLayout.setColumnData(列、新しいColumnWeightDataを(...あなたの要件に応じて)); " treeViewerの複合と "gridData.heightHint = table.getItemHeight()* numberOfVisibleRows"

関連する問題