2012-08-18 16 views
6

Quindi, ho JTextArea su JPanel (BoxLayout). Ho anche il filler Box che riempie il resto dello JPanel. Ho bisogno del mio JTextArea per iniziare con l'altezza della singola riga (posso gestirlo), e per espandere e ridurre quando è necessario.JTextArea ridimensionamento a capo di parole

Word wrap è abilitato, ho solo bisogno di regolare la sua altezza quando viene aggiunta/rimossa nuova linea.

Ho provato con documentListener e getLineCount(), ma non riconosce wordwrap-newlines.

Vorrei evitare di fare scherzi con i caratteri se è possibile.

E, NESSUN PANNELLO DI SCORRIMENTO. È essenziale che JTextArea venga visualizzato completamente in ogni momento.

risposta

13

JTextArea ha un effetto collaterale piuttosto particolare, nelle giuste condizioni, può crescere di propria iniziativa. Mi sono imbattuto in questo caso per caso mentre cercavo di creare un semplice editor di testo a due righe (lunghezza dei caratteri limitata per riga, con un massimo di due righe) ...

Fondamentalmente, dato il corretto gestore di layout, questo componente può crescere di essa la propria accordo - in realtà ha un senso, ma mi ha colto di sorpresa ...

I'm so smallLook at me grow

Ora, in aggiunta, si può decidere di utilizzare un ComponentListener per monitorare quando il componente cambia dimensione, se questo è quello che ti interessa ...

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(); 
    } 

}