11

JTextArea次のように aを使用する場合MigLayout:

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、ウィンドウを再び小さくしても縮小されません。

4

2 に答える 2

23

これは、行を変更するだけで簡単に解決できることを発見しました

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

于 2011-05-16T19:16:05.550 に答える
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;
  }
}

次に、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);
} 
于 2010-04-29T16:43:01.840 に答える