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

Mar*_*enz 9 java swing jtextarea miglayout

如果我像这样使用带有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);
   } 
Run Code Online (Sandbox Code Playgroud)

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

马塞尔

Dat*_*aki 18

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

this.add(jTextArea1, "cell 0 1 2 1,growx");
Run Code Online (Sandbox Code Playgroud)

this.add(jTextArea1, "cell 0 1 2 1,growx, wmin 10");
Run Code Online (Sandbox Code Playgroud)

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

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

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


Kal*_*son 8

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

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;
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,无论您在何处使用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);
} 
Run Code Online (Sandbox Code Playgroud)