2013-10-10 105 views
0

我使用一個網格佈局...SWT - 不改變表更改列寬度寬

在設計上來看,我認爲是應該很好地適合(美學),我將在數據前一個SWT表。

對於數據顯示,我要包()每列

for(int i = 0; i < table.getColumnCount(); i++){ 
    table.getColumn(i).pack(); 
} 

但是這樣做會擴大表格的寬度,有時推其他控件走或只是讓表格寬度大於它應該是。

我需要保持此shell的大小與原來的一樣,所以更改shell的大小不是一個選項。

如何阻止表擴展列寬?


注意:我想滾動條出來,而不是。但就在選項撈出來這樣做

new Table(myShell, SWT.V_SCROLL | SWT.H_SCROLL) 

並沒有幫助我的問題

回答

1

您可以使用GridData.widthHintGridData.heightHint迫使Table的一定寬度/高度。這樣一來,也不會增加/減小尺寸,如果它的內容變化:

enter image description here

enter image description here

添加數據後:

public static void main(String[] args) 
{ 
    final Display display = new Display(); 
    final Shell shell = new Shell(display); 
    shell.setText("StackOverflow"); 
    shell.setLayout(new GridLayout(1, false)); 

    final Table table = new Table(shell, SWT.V_SCROLL | SWT.H_SCROLL); 
    table.setHeaderVisible(true); 

    final GridData data = new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false); 
    data.widthHint = 200; 
    data.heightHint = 200; 
    table.setLayoutData(data); 

    for(int i = 0; i < 5; i++) 
    { 
     TableColumn col = new TableColumn(table, SWT.NONE); 
     col.setText("C" + i); 
     col.pack(); 
    } 

    Button button = new Button(shell, SWT.PUSH); 
    button.setText("Fill table"); 
    button.addListener(SWT.Selection, new Listener() 
    { 
     @Override 
     public void handleEvent(Event arg0) 
     { 
      for(int i = 0; i < 100; i++) 
      { 
       TableItem item = new TableItem(table, SWT.NONE); 

       for(int j = 0; j < table.getColumnCount(); j++) 
       { 
        item.setText(j, "Item " + i + "," + j); 
       } 
      } 

      for(int j = 0; j < table.getColumnCount(); j++) 
      { 
       table.getColumn(j).pack(); 
      } 
     } 
    }); 

    shell.pack(); 
    shell.setSize(400, 300); 
    shell.open(); 
    while (!shell.isDisposed()) 
    { 
     if (!display.readAndDispatch()) 
     { 
      display.sleep(); 
     } 
    } 
    display.dispose(); 
} 

添加數據之前


請記住它在組件上強制使用某些尺寸不是很好的做法。在你的情況下,Shell本身被固定到一定的大小,我想這樣做可以。

+0

第一次使用提示...奇妙地工作! 雖然,老實說,我沒有固定的表格大小(它是自動設置的),我想是時候設置一個了。 謝謝。 – dgood1