与linewrap = true一起使用时,MigLayout JTextArea不会缩小

如果我像这样使用带有MigLayout的JTextArea:

MigLayout thisLayout = new MigLayout("", "[][grow]", "[]20[]"); this.setLayout(thisLayout); { jLabel1 = new JLabel(); this.add(jLabel1, "cell 0 0"); jLabel1.setText("jLabel1"); } { jTextArea1 = new JTextArea(); this.add(jTextArea1, "cell 0 1 2 1,growx"); jTextArea1.setText("jTextArea1"); jTextArea1.setLineWrap(false); } 

然后,当调整窗口大小时,JTextArea会完美地缩小和缩小。 当我将linewrap设置为true时,当我再次缩小窗口时,JTextArea不会缩小。 我非常感谢任何帮助。 谢谢

马塞尔

这是因为JTextArea在resize时自动设置其最小宽度。 有关详细信息,请访问MigLayout论坛 。 粗略地总结一下,创建一个包含JTextArea的面板,让您进一步控制resize行为。 以下是上述论坛post的摘录:

 static class MyPanel extends JPanel implements Scrollable { MyPanel(LayoutManager layout) { super(layout); } public Dimension getPreferredScrollableViewportSize() { return getPreferredSize(); } public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) { return 0; } public boolean getScrollableTracksViewportHeight() { return false; } public boolean getScrollableTracksViewportWidth() { return true; } public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) { return 0; } } 

然后,无论您在何处使用JTextArea,请使用包含文本区域的面板:

 MigLayout thisLayout = new MigLayout("", "[][grow]", "[]20[]"); this.setLayout(thisLayout); { jLabel1 = new JLabel(); this.add(jLabel1, "cell 0 0"); jLabel1.setText("jLabel1"); } { JPanel textAreaPanel = new MyPanel(new MigLayout("wrap", "[grow,fill]", "[]")); jTextArea1 = new JTextArea(); textAreaPanel.add(jTextArea1); this.add(textAreaPanel, "cell 0 1 2 1,grow,wmin 10"); jTextArea1.setText("jTextArea1"); jTextArea1.setLineWrap(false); } 

我刚刚发现这可以通过改变线来简单解决

 this.add(jTextArea1, "cell 0 1 2 1,growx"); 

 this.add(jTextArea1, "cell 0 1 2 1,growx, wmin 10"); 

并且不需要额外的面板。 设置明确的最小尺寸就是诀窍。

说明:请参阅MiGLayout白皮书中有关填充的部分下的注释:

http://www.migcalendar.com/miglayout/whitepaper.html