2012-08-18 4 views
6

JPanel(BoxLayout)にJTextAreaがあります。 JPanelの残りの部分を埋めるボックスフィラーもあります。私はJTextAreaが必要です。シングルラインハイトで(私はそれを管理することができます)、必要なときに展開して減らす必要があります。JTextAreaワードラップリサイズ

ワードラップが有効になっているので、改行を追加/削除するときに高さを調整するだけで済みます。

私はdocumentListenerとgetLineCount()を試しましたが、wordwrap-newlinesを認識しません。

可能であれば、フォントをばたつくことは避けてください。

そして、スクロールパンはありません。 JTextAreaは常に完全に表示されることが不可欠です。

答えて

13

JTextAreaは、適切な条件で、かなり特殊な副作用を持っています。私は単純な2行のテキストエディタ(1行に最大2行の制限付き文字長)を設定しようとしていたときに、うんざりにこれを見つけました...

基本的には、それ自身のアコードで成長することができます - それは実際に理にかなっているが、驚きで連れて行ってくれました...

I'm so smallLook at me grow

さて加えて、あなたがいる場合、コンポーネントのサイズを変更したときに監視するためにComponentListenerを使用することもできますそれはあなたが興味を持っているものです...

public class TestTextArea extends JFrame { 

    public TestTextArea() { 

     setLayout(new GridBagLayout()); 

     JTextArea textArea = new JTextArea(); 
     textArea.setColumns(10); 
     textArea.setRows(1); 
     textArea.setLineWrap(true); 
     textArea.setWrapStyleWord(true); 

     add(textArea); 

     setSize(200, 200); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(EXIT_ON_CLOSE); 
     setVisible(true); 

     textArea.addComponentListener(new ComponentAdapter() { 

      @Override 
      public void componentResized(ComponentEvent ce) { 

       System.out.println("I've changed size"); 

      } 

     }); 

    } 


    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     new TestTextArea(); 
    } 

}