2009-02-19 74 views
1

我遇到JTables問題。我在面板中添加了兩個表格,這些表格位於一個滾動窗格內,但是當應用程序顯示時,表格總是佔用比行數多的空間,浪費了我的可用空間。Java Swing Table大小

我使用Groovy和swingbuilder創建表,下面的代碼:

scrollPane(){ 
    panel(layout: new MigLayout('wrap 3')) { 
     //main title 
     label(text: '<html><h1>blah</h1></html>',constraints: 'span 3') //title 

     //tables 
     def data = [[text: "ABC", combo: "abc"], [text: "DEF", combo: "def"]] 
     def items = ['abc', 'def', 'ghi', 'jkl'] 
     def tableModelListener = { e -> println "${e.firstRow} ${e.column} ${e.type}" } as TableModelListener 
     scrollPane(constraints: 'span 3') { 
      table(id: 'serviceTable') { 
       current.setFillsViewportHeight(false) 
       tableModel(list: data) { 
        current.addTableModelListener(tableModelListener) 
        propertyColumn(header: 'Text', propertyName: 'text') 
        propertyColumn(header: 'Combo', propertyName: 'combo') 
       } 
      } 
     } 
     scrollPane(constraints: 'span 3') { 
      table(id: 'groupsTable') { 
       tableModel(list: data) { 
        current.addTableModelListener(tableModelListener) 
        propertyColumn(header: 'Text2', propertyName: 'text') 
        propertyColumn(header: 'Combo2', propertyName: 'combo') 
       } 
      } 
     } 
    } 
} 

而這裏的結果: Image http://img517.imageshack.us/img517/6508/15181501ym9.jpg

我想是根據使檯面高度行數,如果可能的話,我希望桌子也佔滿全部寬度。我認爲我的問題與父面板有關,但我找不到原因。

+0

圖像鏈接現已停止,這使問題不清楚。 – 2016-09-16 19:08:02

回答

1

@jfpoilpret是正確的,因爲需要管理preferredScrollableViewpoet大小。常規的方法是將它綁定到表的首選大小。因此,如果這是外部滾動窗格元素中添加它會自動追蹤大小:

[serviceTable, groupsTable].each { table -> 
    bind(source:table, sourceProperty:'preferredSize', 
     target:table, targetProperty:'preferredScrollableViewportSize', 
     converter: { ps -> 
      [ps.width + 100, 
       (table.rowCount > 20 ? 20: table.rowCount) * table.rowHeight] 
     }) 
} 

我們也可以做像加一個轉換器的結合巧妙的事情,這將高度限制在20行(或任何你希望它被限制爲),所以當表格變得太長時,我們仍然會得到滾動條。

+0

謝謝,學習新的東西總是很好:) – 2009-02-27 11:46:18

4

是的,這是JTables已知的問題。默認情況下,顯示20行,無論實際內容如何。

如果你想改變,你必須使用類似的代碼如下:

static public void setTableHeight(JTable table, int rows) 
{ 
    int width = table.getPreferredSize().width; 
    int height = rows * table.getRowHeight(); 
    table.setPreferredScrollableViewportSize(new Dimension(width, height)); 
} 

然後就叫setTableHeight(5);如果你想5行默認情況下可見。

注意:這是Java,您可能需要稍微修改它以適應Groovy。

這是我上個月的described in my blog(項目#7)。