2012-08-18 28 views
6

Entonces, tengo JTextArea en un JPanel (BoxLayout). También tengo relleno de caja que llena el resto del JPanel. Necesito que mi JTextArea comience con una sola línea de altura (puedo administrar eso), y para expandir y reducir cuando sea necesario.JTextArea ajuste de ajuste de texto de palabra

El ajuste de palabras está habilitado, solo lo necesito para ajustar su altura cuando se agrega o quita una nueva línea.

He intentado con documentListener y getLineCount(), pero no reconoce wordwrap-newlines.

Me gustaría evitar jugar con las fuentes si es posible.

Y, SIN PANELES DE DESPLAZAMIENTO. Es esencial que JTextArea se muestre por completo en todo momento.

Respuesta

13

tiene un efecto secundario bastante particular, en las condiciones adecuadas, puede crecer por sí mismo. Me encontré con esto por accidente cuando estaba tratando de configurar un editor de texto simple de dos líneas (caracteres restringidos de longitud por línea, con un máximo de dos líneas) ...

Básicamente, dado el administrador de disposición correcto, este componente puede crecer de su propia voluntad - que en realidad tiene sentido, pero me tomó por sorpresa ...

I'm so smallLook at me grow

Ahora, además, es posible que desee utilizar un ComponentListener para vigilar cuando el componente cambia de tamaño, si eso es lo que le interesa ...

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

}