Cómo establecer JTextArea tenga la altura que coincida con el tamaño de un texto que contiene (a las barras de desplazamiento se deben evitar)

StackOverflow https://stackoverflow.com/questions/3081210

Pregunta

Este problema parece trivial, pero no puedo encontrar la solución.

Cuando se crea un formulario que contiene un JTextArea. Quiero poner texto de gran tamaño constante en él. Si el texto es decir 1000 líneas de largo, quiero que mi JTextArea a ser de 1000 líneas de alta (para ser lo suficientemente grande para mostrar todo el texto sin barras de desplazamiento). JTextArea está dentro de un panel que puede tener la barra de desplazamiento por lo que no es un problema cuando se hace demasiado grande (hay dos JTextArea en ese panel .. algo así como en una herramienta de diferencias). ¿Alguien sabe cómo puedo lograr esto? Gracias.

¿Fue útil?

Solución

El BorderLayout se encargará de la barra de desplazamiento fuera de la caja si simplemente pone su JTextAreain un JScrollPane antes de añadirlo a su JPanel. FlowLayout, por el contrario, no lo hace. No va a mostrar la barra de desplazamiento a menos que, como íntimos @Xorty, se llama a setPreferedSize() en su JScrollPane y darle la dimensión que le gustaría.

Otros consejos

También puede usar algo como esto (anchura limitada, altura según el texto, útil cuando se muestran mensajes de información):

  public JTextArea createTextAreaFitToText(String message, Dimension minimalSize){

        JTextArea aMessagePanel = new JTextArea();
        aMessagePanel.setText(message);

        /*for modelToView to work, the text area has to be sized. It doesn't matter if it's visible or not.*/
        aMessagePanel.setPreferredSize(minimalSize);
        aMessagePanel.setSize(minimalSize);            

        Rectangle r = aMessagePanel.modelToView(aMessagePanel.getDocument().getLength()); 

        Dimension d = new Dimension(minimalSize.width, r.y + r.height);
        aMessagePanel.setPreferredSize(d);
        return aMessagePanel;

}

Para aumentar o disminuir la altura de JTextArea. Cuando se introduce un texto, llamado a getPreferredSize () de JTextArea- te dará el tamaño necesario para mostrar todo el texto. Después de que el uso setPrefferedSize () de JScrollPane para establecer el tamaño de JTextArea

Bueno, primero de todo: es JTextArea no JTextArea

.

Ahora - poner en JTextArea JScrollPane. Cuando se introduce un texto, llamado a getPreferedSize() de JScrollPane - te dará el tamaño exacto necesario para mostrar el texto conjunto. Además, nunca utilizo otra LayoutManager de 'Diseño Libre' de NetBeans oscilación del constructor - así que no estoy seguro de cómo se comportará otra LayoutManagers existe

.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top