StringBuilder , el metodo append(contenidoArchivoTexto) y la efectividad del salto de linea, en un JtextArea y en un jTextPane
Voy al codigo directamente y al final del codigo explico el problema:
//---------------------------------------Inicio del Codigo----------------------------------------------------------------------
String Textocontenido="";//con sus metodo getters y setters
BufferedReader br;
String contenidoArchivoTexto = null;
StringBuilder sB = new StringBuilder();
public String darContenido(String rutaArchivo, String codigoArchivo) throws IOException, Throwable {
if (codigoArchivo == null) {
br = new BufferedReader(new InputStreamReader(new FileInputStream(rutaArchivo), "UTF-8"));
} else {
br = new BufferedReader(new InputStreamReader(new FileInputStream(rutaArchivo), codigoArchivo));
}
try {
while ((contenidoArchivoTexto = br.readLine()) != null) {
sB.append(contenidoArchivoTexto);
sB.append(System.getProperty("contenidoArchivoTexto.separator"));
}
setTextocontenido(sB.toString());
/*
*Limpio el StringBuilder para mejor rendimiento
*/
for (int i = 0; i < sB.length(); i++) {
sB.delete(0, sB.length());
}
} catch (IOException e) {
JOptionPane.showMessageDialog(null, "Ha ocurrido un error en la lectura del archivo", "Mensaje", JOptionPane.INFORMATION_MESSAGE);
} finally {
br.close();
}
return getTextocontenido();
}
//----------------------------------------Fin del Codigo---------------------------------------------------------------------
Para el codigo anterior especificamente en el bucle "while" esta el salto de linea con el metodo "append" de StringBuilder. Ahora Bien, este salto de linea funciona perfectamente si uso un jTextArea para visualizar el archivo de texto que estoy abriendo, pero si uso un jTextPane el salto de linea es inestable y antes de terminar de imprimir en el jTextPane la linea completa, da algunos saltos de linea inesperados.
por ejemplo; pongo la siguiente linea como ejemplo donde el indicador de salto de linea es la expresion
"-->"
, y los componentes para comparar son: jTextArea y jTextPane :
****Aqui comienza la linea a mostrar********
20/6/2014 16:15:11.014 82cqxLNxtWZd2MqsT72yusk Thread Liberador Conexiones MQ No se cumple el número mínimo de conexiones que es : 10 y actualmente hay: 1 ##Servicio: atae.comu.mq.liberacionconexiones.AtaeSvIniciadorLiberacionConexiones ##Metodo -->atae.comu.mq.liberacionconexiones.AtaeSvIniciadorLiberacionConexiones.actualizarPoolConexiones ******fin de la linea a mostrar********
Diferencias entre jTextArea y jTextPane tomando en cuenta el salto de linea del metodo sB.append(System.getProperty("contenidoArchivoTexto.separator")); :
a.- En un jTextPane hace un salto de linea donde aparece
"-->"
b.- En un jTextArea imprime la linea completa, o sea, hace el salto de linea perfectamente que es al final de la linea:
............actualizarPoolConexiones
Ahora Bien las preguntas del Millon de Dolares
1.-Existe alguna solucion a este problema especificamente para un jTextPane?
2.-hay un metodo del jTextPane donde indicarle que haga el salto de linea perfectamente como lo hace el jTextArea, considerando que el caso como lo explique anteriormente, funciona aun si no se le indica al jTextArea que imprima la linea completa con la siguiente instruccion:
jTextArea.setLineWrap(false);?
3.- Esto es un defecto o error de JAVA el cual no tiene Solucion?
- Inicie sesión o regístrese para enviar comentarios
Hola,Tengo una duda, ¿por
Hola,
Tengo una duda, ¿por qué quieres usar un JTextPane si ya viste que un JTextArea te da el resultado que deseas?
respondiendo tus preguntas:
1. Probando tu código y buscando en internet, me encontré con esto: , y creo que la solución puesta en el update de noviembre 6 2011 es la que más te conviene, supongo que usas netbeans, entonces podrías agregar ese código de creación del JTextPane haciendo clic en tu TextPane, yendote al panel de Propiedades, haciendo clic en el menu Code, y copiar este Custom Creation Code:
2. Al parecer no, pero mira el link que posteé más arriba
3. Probablemente no sea un error, sino que el comportamiento de ese componente fue diseñado así a propósito. Si lo que quieres es que haya una línea en blanco después de cada párrafo/renglón, podrías probar haciendo un append extra de salto de línea en tu ciclo
Espero te sirva