Recuperar la ultima linea en un JtextArea

Iniciado por deltacompu, 14 Diciembre 2010, 02:31 AM

0 Miembros y 1 Visitante están viendo este tema.

deltacompu

Hola a todos!!!!

En este momento me encuentro realizando una aplicacion muy basica pero me ha dado algunos dolores de cabeza, basicamente estoy haciendo una conversacion cliente-servidor, ya hice la implentacion por consola y funciona, ahora la estoy implementando en una GUI (Interfaz Grafica), construi dos ventanas, una para el servidor y otra para el cliente, en cada una dos JTextArea las cuales estan contenidas en un JScroll, la conexion se realiza de manera adecuada, cuando el cliente envia la primera linea al sevidor estas es recibida y mostrada por el servidor en la correspondiente caja de texto pero cuando el cliente envia la segunda linea, el servidor recibe las lineas anteriores y la ultima, en otras palabras cada vez que el usuario oprima la tecla enter (este es el evento para enviar al servidor o viceversa) el metodo toma todo el texto contenido en la caja de texto incluyendo el que ya ha sido enviado y lo envia al server aqui dejo  mi codigo, si alguien pudiese ayudarme seria muy valioso, muchas gracias.

TextClient.addKeyListener(new KeyAdapter() {
         public void keyPressed(KeyEvent e) {
            if (e.getKeyCode() == e.VK_ENTER) {
               String cadena= TextClient.getText();
               if (!cadena.equals("STOP"))
               {
               
                   output.println(TextClient.getText());

               }
               else
               {
                  try {
                     socket.close();
                  }
                  catch (IOException e1) {
                     e1.printStackTrace();
                  }
               }
               
               
               
               
            }
         }
      });

1mpuls0

#1
Hola.
Lo bueno que aun tengo guardado códigos en el baul de los recuerdos de Java  :xD.

Código (java) [Seleccionar]

package foro;
/*
* Autor: 1mpuls0
* */
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.Element;

public class GetLastLine extends JFrame {

   private JButton button;
   private JPanel panel;
   private JScrollPane scrollPane;
   private JScrollPane scrollPane2;
   private JTextArea textArea;
   private JTextArea textArea2;

   /**
*
*/
private static final long serialVersionUID = 1L;
/** Creates new form GetLastLine */

   public static void main(String args[]) {
    GetLastLine gll = new GetLastLine();
    gll.setLocationRelativeTo(null);
    gll.setVisible(true);
   }

   public GetLastLine() {
       initComponents();
   }

   private void initComponents() {

       panel = new JPanel();
       scrollPane = new JScrollPane();
       textArea = new JTextArea();
       button = new JButton();
       scrollPane2 = new JScrollPane();
       textArea2 = new JTextArea();

       setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
       setTitle("Get Last Line of JTextArea");
       setResizable(false);
       getContentPane().setLayout(new java.awt.FlowLayout());

       panel.setPreferredSize(new java.awt.Dimension(300, 230));
       panel.setLayout(null);

       textArea.setText("Escribe\nun\ntexto\naqui\npor\nfavor");
       textArea.setColumns(20);
       textArea.setRows(5);
       scrollPane.setViewportView(textArea);

       panel.add(scrollPane);
       scrollPane.setBounds(20, 20, 260, 100);

       button.setText("Get Text");
       button.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent evt) {
               try {
getText();
} catch (BadLocationException e) {
e.printStackTrace();
}
           }
       });
       panel.add(button);
       button.setBounds(20, 130, 100, 20);

       textArea2.setColumns(20);
       textArea2.setRows(5);
       scrollPane2.setViewportView(textArea2);

       panel.add(scrollPane2);
       scrollPane2.setBounds(20, 160, 260, 50);

       getContentPane().add(panel);

       pack();
   }

   private void getText() throws BadLocationException {
       Document document = textArea.getDocument();
       Element rootElem = document.getDefaultRootElement();
       int numLines = rootElem.getElementCount();
       Element lineElem = rootElem.getElement(numLines - 1);
       int lineStart = lineElem.getStartOffset();
       int lineEnd = lineElem.getEndOffset();
       String lineText = document.getText(lineStart, lineEnd - lineStart);
       textArea2.setText(lineText);
   }

}



Espero que te sirva.

Un saludo.
abc

deltacompu

Que bueno es tener un baul de los recuerdos, el codigo funciona muy bien....

Muchas gracias por tu ayuda

;-) ;-)