Java 布局收缩行为

Java 布局收缩行为,java,swing,miglayout,Java,Swing,Miglayout,使用以下定义的JPanel(嵌入JSplitPane中的JTabPanel中): 如果我最大化,面板将正确地重新绘制为新尺寸 如果我最小化面板,则面板不会重新绘制到以前的尺寸 如果我拖动角以增大尺寸,面板将重新绘制为正确的尺寸 如果我拖动一个角以减小尺寸,面板将不会重新绘制到预期尺寸 container.setLayout(new MigLayout("debug,fillx,wrap 5", "[75:75:75][fill][75:75:75][fill][140:140:140,a

使用以下定义的JPanel(嵌入JSplitPane中的JTabPanel中):

如果我最大化,面板将正确地重新绘制为新尺寸 如果我最小化面板,则面板不会重新绘制到以前的尺寸 如果我拖动角以增大尺寸,面板将重新绘制为正确的尺寸 如果我拖动一个角以减小尺寸,面板将不会重新绘制到预期尺寸

container.setLayout(new MigLayout("debug,fillx,wrap 5",
    "[75:75:75][fill][75:75:75][fill][140:140:140,align left]"));
container.add(labelSrcTitle, "span 4");
container.add(buttonAddRef, "");
container.add(srcTitle, "span");
container.add(srcListing, "span,grow");
container.add(sepRef,"span,growx");
container.add(refTitle,"span");
container.add(refListing,"span 4,grow");
container.add(buttonEdit,"split 2");
container.add(buttonDelete,"");
container.add(name,"span 4,growx");
container.add(buttonSEdit,"split 3");
container.add(buttonSDelete);
container.add(buttonSAdd,"");
container.add(lType,"");
container.add(lClaim,"grow");
container.add(lQual,"");
container.add(lNotes,"grow");
container.add(buttonCEdit, "split 3");
container.add(buttonCDelete);
container.add(buttonCAdd, "");
我希望(并期望)如果我最大化然后最小化,屏幕将被重新绘制到其原始配置。我错过了什么?如果重要的话,所有JTextArea字段都是换行true

编辑: 下面是一个简单得多的示例-问题似乎是设置了换行的JTextArea。JFrame中的以下代码重新创建了该问题:

    JPanel root = new JPanel(new MigLayout("fill,debug"));
    JTextArea t = new JTextArea();

    t.setLineWrap(true);

    root.add(t,"growx");
    setContentPane(root);
    setLocationRelativeTo(null);
    setSize(200, 200);

问题解决了。在确定了JTextArea和换行的问题后,我确定这是MigLayout和JTextArea换行在多个地方记录的症状;通过将root.add(t,“growx”)更改为root.add(t,“growx,wmin 10”)

我猜“name”组件(表示“Michaels,Edward”)出于某种原因正在将所有内容推出。查看其他“span 4”组件不填充时,它如何填充其单元格?试着去掉它的增长,看看它有什么不同。根据我的经验,push/grow的行为有点怪异,这取决于你的版本。我的理解是,行规范中的“填充”等同于单元规范中的“推送”。可能是这样的:问题解决了。在确定JTextArea和换行的问题后,我确定这是MigLayout和JTextArea在多个地方记录的症状;并通过将root.add(t,“growx”)更改为root.add(t,“growx,wmin 10”)解决了这个问题。在我的例子中,它是一个带有html文本的
JLabel
,可以在标签内自动换行。它无法计算正确的长度,并且总是占据整个宽度。添加具有固定(
w 200!
)/适当首选大小(
w:200:
)的组件解决了问题。