/*COMPONENTES JTEXTFIELD Y TEXTAREA CON EVENTOS PARA
* - AÑADIR LÍNEAS DESDE JTEXTFIELD A TEXTAREA
* - LIMPIAR DE TEXTO A TEXTAREA
* - SALIR DEL PROGRAMA
* (Miliuco agosto 2005) */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Color;
// CLASE PRINCIPAL DEL PROGRAMA
public class Campos_de_Texto extends JFrame {
// variables a nivel de clase
protected JTextField texto1;
protected JTextArea texto2;
protected JPanel p1, p2;
protected JButton btPoner, btQuitar, btSalir;
protected String texto1Inicio;
protected Color B, F1, F2, F3;
protected int orden;
// constante para el salto de línea
protected final static String newline = "\n";
// MÉTODO CONSTRUCTOR QUE CREA Y MUESTRA LA INTERFAZ
public Campos_de_Texto() {
/* la variable especial super refiere a la superclase de la clase actual,
* la clase Campos_de_Texto hereda de JFrame por ello
* super es JFrame, se declara un JFrame con el constructor
* que pasa como argumento un String para el título,
* super ha de ir siempre en la primera línea del método */
super("JTextArea");
/* la línea anterior equivale a this.setTitle("JTextArea");
* cualquiera de las dos sirve para mostrar el texto
* en la barra de título de la ventana */
/* la variable especial this se usa en métodos de instancia
* para hacer referencia al objeto que contiene al método,
* aquí equivale a JFrame */
// acción por defecto al cerrar la ventana: salir del programa
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// paneles de disposición
p1 = new JPanel(new BorderLayout()); // panel principal
p2 = new JPanel(new GridLayout(1,3)); // panel para 3 botones en BorderLayout.SOUTH
p1.setBorder(BorderFactory.createEmptyBorder(6,6,6,6));
// campo de texto JTextField
texto1 = new JTextField(40);
texto1.setFont(new java.awt.Font("Arial", Font.PLAIN, 12));
texto1Inicio = "\"CopiarTexto\" añade líneas. \"Limpiar texto\" borra todo el texto.";
texto1.setText(texto1Inicio);
// campo de texto JTextArea
texto2 = new JTextArea(10,40);
texto2.setEditable(false);
texto2.setFont(new java.awt.Font("Arial", Font.PLAIN, 12));
B = new Color(200,200,200);
texto2.setBackground(B);
F1 = new Color(0,0,0);
texto2.setForeground(F1);
JScrollPane pScroll = new JScrollPane(texto2, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
btPoner = new JButton("Copiar texto");
btQuitar = new JButton("Limpiar texto");
btSalir = new JButton("Salir");
// asociar los botones con instancias de las clases que definen las acciones
btPoner.addActionListener(new ponerTexto());
btQuitar.addActionListener(new limpiarTexto());
btSalir.addActionListener(new cerrarVentana());
/*colocar los componentes en los paneles;
* para añadir un componente a un JFrame es preferible
* frame.getContentPane().add(panel);
* en lugar de
* frame.add(panel);*/
this.getContentPane().add(p1);
p1.add(texto1, BorderLayout.NORTH);
// añadir JScrollPane al panel principal en lugar de añadir directamente JTextArea
// para implementar las barras de deslizamiento (scroll)
p1.add(pScroll, BorderLayout.CENTER);
p1.add(p2,BorderLayout.SOUTH);
p2.add(btPoner);
p2.add(btQuitar);
p2.add(btSalir);
// tooltips para algunos elementos de la interfaz gráfica
btPoner.setToolTipText("Copiar texto desde JTextField a JTextArea");
btQuitar.setToolTipText("Limpiar de texto JTextArea");
btSalir.setToolTipText("Salir de la aplicación");
// crear y mostrar la ventana centrada en la pantalla
// this.setTitle("JTextArea");
this.setResizable(false);
this.pack();
this.setLocationRelativeTo(null);
this.setVisible(true);
}
// MÉTODO DE ENTRADA AL PROGRAMA
public static void main(String[] args) {
// Java look and feel
JFrame.setDefaultLookAndFeelDecorated(true);
// instancia de la clase principal
new Campos_de_Texto();
}
// CLASE QUE AÑADE LÍNEAS DESDE JTEXTFIELD A TEXTAREA
class ponerTexto implements ActionListener {
public void actionPerformed(ActionEvent evt) {
String texto = texto1.getText();
/* 16 líneas como máximo, mostrando al principio el número de línea
* mostrar un cero antes del número de línea hasta llegar a 10 */
if (orden<16) {
if (orden<9) {
texto2.append("0" + (orden+1) + " - " + texto + newline); }
else if (orden>=9)
{ texto2.append((orden+1) + " - " + texto + newline); }
// posicionarse siempre en la última línea de JTExtArea
texto2.setCaretPosition(texto2.getDocument().getLength());
orden++; }
else {
texto1.setFont(new java.awt.Font("Arial", Font.BOLD, 12));
F2 = new Color(255,0,0);
texto1.setForeground(F2);
texto1.setText("No se pueden añadir más de 16 líneas."); }
}
}
// CLASE QUE VACÍA TEXTAREA
class limpiarTexto implements ActionListener {
public void actionPerformed(ActionEvent evt) {
texto1.setFont(new java.awt.Font("Arial", Font.PLAIN, 12));
F3 = new Color(0,0,0);
texto1.setForeground(F3);
texto1.setText(texto1Inicio);
texto2.setText("");
orden=0;}
}
// CLASE QUE SALE DEL PROGRAMA
class cerrarVentana implements ActionListener {
public void actionPerformed(ActionEvent evt) {
System.exit(0);}
}
}