2016-11-16 11 views
0

私は多くのCTabItemを持つCTabFolderを持っています。各CTabItemはそのコントロールとして異なるNatTableを持っています。各NatTableが作成されると、列見出しはありますが行はありません。 「データを取り込む」ボタンをクリックすると、各テーブルにデータが入力されます。CTabItem内のNatTableの幅

[データを取り込む]ボタンをクリックする前に各タブを表示すると、期待通りに列ヘッダーが表示されます。次に、ボタンを押して、すべてのテーブルにすべてのデータが正しく入力されていることを確認できます。

[データを取り込む]ボタンをクリックする前にタブを表示しないと、以前に表示していなかったタブの列見出しやデータは表示されません。これは、そのタブのNatTableの幅が0であるためです。

「データを取り込む」ボタンをクリックする前に、すべてのタブをクリックする必要はありません。タブがフォーカスされていないときに、NatTableの幅を正しく設定するために、内部的に呼び出されるコール(手動で呼び出す必要があります)があります。私はパーセントのサイジングの使用法を理解していないサンプルから

public void whenNatTableIsCreated(){ 
    // Make sure the table fills the width of the parent 
    glazedListsGridLayer.getBodyDataLayer() 
     .setColumnPercentageSizing(true); 
    nattable.addConfiguration(new DefaultNatTableStyleConfiguration() { 
     { 
      cellPainter = new LineBorderDecorator(new 
       TextPainter(false, true, 5, true)); 
     } 
    }); 

} 
public void afterTableHasData() { 
    // Now that we have data, turn off the percentage sizing and 
    // allow the table width to exceed the parent width 

    // This fails because getNatTable().getWidth() is 0 
    getGlazedListsGridLayer().getBodyDataLayer().setDefaultColumnWidth(
      getNatTable().getWidth()/getGlazedListsGridLayer(). 
      getBodyDataLayer().getColumnCount()); 
    getGlazedListsGridLayer().getBodyDataLayer() 
     .setColumnPercentageSizing(false); 
} 

答えて

0

は、以下の私のコードサンプルです。私はこれが問題だと思います。これを最初に有効にしますが、親コンポジットにはサイズがないため、すべての列の幅が0に設定されます。再度有効にすると、幅が自動的に設定されず、0になります。

幅表の列は列から派生しています。 ViewportLayerの場合、幅は使用可能なクライアント領域の最大値になります。しかし、すべての列の幅が0であるため、NatTable全体の幅は0です。また、パーセントサイジングを有効にした後のデフォルトの列幅を設定すると、結果が期待通りにならない可能性があります。格納され、デフォルトの幅をオーバーライドします。

要するに、あなたのアイデアはNatTableではうまくいかないようです。

+0

パーセンテージのサイジングを使用して、列の名前が親の幅全体に及ぶことを確認します。その呼び出しなしでは、彼らはしません。誰かがデータを入力する前にテーブルを見ている場合、テーブルを親テーブルと同じ幅で表示したい(たとえデータがなくても、列名が表示されている) – ekjcfn3902039

関連する問題