Swing 如何在Groovy中使textarea宽度适合父级

Swing 如何在Groovy中使textarea宽度适合父级,swing,layout,groovy,jtextarea,Swing,Layout,Groovy,Jtextarea,布局最初看起来不错,但在重新调整窗口大小时,文本区域的大小没有正确调整 知道怎么修吗 谢谢 import java.awt.BorderLayout import javax.swing.BorderFactory import java.awt.GridLayout import groovy.swing.SwingBuilder swing = new SwingBuilder() frame = swing.frame(title:'Test', location:[200,200],

布局最初看起来不错,但在重新调整窗口大小时,文本区域的大小没有正确调整

知道怎么修吗

谢谢

import java.awt.BorderLayout
import javax.swing.BorderFactory
import java.awt.GridLayout
import groovy.swing.SwingBuilder

swing = new SwingBuilder()
frame = swing.frame(title:'Test', location:[200,200], size:[300,216]) {
    panel(layout: new BorderLayout()){
        scrollPane(constraints: BorderLayout.NORTH){
            table {
                def people = [
                             ['name':'Johan', 'location':'Olso'],
                             ['name':'John', 'location':'London'], 
                             ['name':'Jose', 'location':'Madrid'], 
                             ['name':'Jos', 'location':'Amsterdam']
                            ]

                tableModel( id:'model', list: people) { m ->
                    propertyColumn(header: 'Name', propertyName: 'name')
                    propertyColumn(header: 'Location', propertyName: 'location')
                }
            }
        }
    }

    panel(constraints: BorderLayout.SOUTH){
        scrollPane(constraints: BorderLayout.CENTER){
            textArea(id:'TextArea', lineWrap:true,wrapStyleWord:true, columns:35, rows:4,editable:true)
        }  
    }             
}
frame.show()
最初正常

重新调整大小后不正常


问题的主要来源是
JPanel
的默认布局管理器是
FlowLayout
,而不是
BorderLayout
,并且您正在对其使用
BorderLayout
约束

panel(constraints: BorderLayout.CENTER, layout: new BorderLayout()) {
    scrollPane(constraints: BorderLayout.CENTER){
        textArea(id:'TextArea', lineWrap:true,wrapStyleWord:true, columns:35, rows:4,editable:true)
    }  
}
将文本字段和包含面板展开到所有可用空间。(更改是使用面板的中心位置,并为其设置布局管理器)

我还将桌子放在了北面(因为我将下面板移到了中间):

你可能希望这样做,但由于选择取决于你的具体喜好,我不知道什么才是适合你的

你也应该使用

frame.pack()
frame.show()

而不是显式设置帧大小。使框架大小适合所包含组件的首选大小。

不是groovy用户,但看起来您为文本区域指定了首选列数。它只是服从这种偏好。您可以做的另一件事是将包含面板放在中间,而不是南方。谢谢您的建议,但它不起作用:(谢谢kiheru,它工作得很好!我还在
frame.pack()之前添加了这个
t.setPreferredScrollableViewportSize(t.getPreferredSize());t.setFillsviewPertheight(true);
以使表格更适合框架。欢迎:-)如果问题解决,请接受答案。
frame.pack()
frame.show()