【问题标题】:How to fit textarea width to parent in Groovy如何在 Groovy 中使 textarea 宽度适合父级
【发布时间】:2013-10-12 08:25:23
【问题描述】:

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

知道怎么解决吗?

谢谢!

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()

初步没问题

调整大小后不行

【问题讨论】:

  • 不是 groovy 用户,但看起来您指定了文本区域的首选列数。它只是服从这种偏好。您可以做的另一件事是将包含面板放置到 CENTER,而不是 SOUTH。
  • 感谢您的建议,但它不起作用:(

标签: swing layout groovy jtextarea


【解决方案1】:

问题的主要来源是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)
    }  
}

将文本字段和包含面板扩展到所有可用空间。 (更改是使用面板的 CENTER 位置,并为其设置布局管理器)。

我还把桌子放在了 NORTH 位置(因为我把下面板移到了 CENTER):

panel(constraints: BorderLayout.NORTH, layout: new BorderLayout()) {
...

您可能希望不这样做,但由于选择取决于您的确切偏好,我不知道什么是适合您的。

你也应该使用

frame.pack()
frame.show()

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

【讨论】:

  • 感谢 kiheru,它工作得很好!我还在frame.pack() 之前添加了这个t.setPreferredScrollableViewportSize(t.getPreferredSize()); t.setFillsViewportHeight(true);,以更好地使桌子适合框架。
  • 不客气 :-) 如果解决了问题,请接受答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 2013-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多