2009-02-19 157 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)。