我在使用 JTables 时遇到问题。我在一个面板中添加了两个表格,这些表格在一个滚动 Pane 中,但是当应用程序出现时,表格占用的空间总是多于行数,浪费了我的可用空间。
我正在使用 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
我想要的是根据行数设置表格高度,如果可能的话我希望表格也占据整个宽度。我认为我的问题与父面板有关,但找不到原因。
最佳答案
是的,这是 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));
}
如果您希望默认显示 5 行,则只需调用 setTableHeight(5);
。
注意:这是 Java,您可能需要稍微调整一下以适应 Groovy。
这是我的东西described in my blog上个月(第 7 项)。
关于Java Swing 表大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/566004/