Hola!
Estoy aprendiendo algo de java y he logrado lo basico... Un pequeño editor de texto.
Mi problema esta al monento de asignarle a los botones respectivos, la tarea de copiar, pegar y cortar.
Esto es lo que llevo:
Código:
/*
En esta ventana vamos a ver como se agrega una barra de menu a la aplicaccion
* Para esto, necesitamos tres clases diferentes
* JMenuBar: La barra de menu
* JMenu: Un menu especifico dentro de la barra como p.ej. archivo
* JMenuItem un elemento dentro del menu. que puede ser selecionado como
* por ejemplo: copiar
*/
package menues;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
/**
*
* @author cetecom
*/
public class VentanaMenu extends JFrame{
//Elementos dentro del contentPane
private JTextArea zonaEdicion;
//Elementos del Menu
private JMenuBar barra;
private JMenu archivo;
private JMenu edicion;
private JMenu ayuda;
private JMenuItem abrir;
private JMenuItem guardar;
private JMenuItem salir;
private JMenuItem cortar;
private JMenuItem copiar;
private JMenuItem pegar;
public VentanaMenu(){
super("Ventana Con Menu");
this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
this.addWindowListener(new EquisListener());
inicializarComponentes();
inicializarBarraMenu();
this.pack();
this.setVisible(true);
}
private void inicializarComponentes(){
//vamos a hacer algo muy simple aqui...
//Una ventana tipo editor de texto
Container contentPane = this.getContentPane();
contentPane.setLayout(new BorderLayout());
zonaEdicion = new JTextArea (20,50);
JScrollPane scroller = new JScrollPane(zonaEdicion);
contentPane.add(scroller, BorderLayout.CENTER);
}
private void inicializarBarraMenu(){
//Vamos a crear una barra de menu...Veremos que es muy facil
//Primero, creamos la barra de menu...
this.barra = new JMenuBar();
this.setJMenuBar(barra);
//luego creamos los menu especificos... que agregaremos a la barra
this.archivo = new JMenu("Archivo");
this.barra.add(this.archivo);
this.edicion = new JMenu("Edicion");
this.barra.add(this.edicion);
this.ayuda = new JMenu("Ayuda");
this.barra.add(ayuda);
//armamos el menu Archivo
this.abrir = new JMenuItem("Abrir");
this.abrir.addActionListener (new ItemAbrirListener());
this.archivo.add(this.abrir);
this.guardar = new JMenuItem("Guardar");
this.guardar.addActionListener (new ItemGuardarListener());
this.archivo.add(this.guardar);
this.archivo.addSeparator(); //Separador
this.salir = new JMenuItem("Salir");
this.salir.addActionListener(new ItemSalirListener());
this.archivo.add(this.salir);
//Menu Edicion
this.copiar = new JMenuItem("Copiar");
this.edicion.add(this.copiar);
this.pegar = new JMenuItem("Pegar");
this.edicion.add(this.pegar);
this.cortar = new JMenuItem("Cortar");
this.edicion.add(this.cortar);
}
//Vamos a hacer que funcione el item salir...
//para todo efecto practico, un JMenuItem es igual que un boton...
//asi que vamos a necesitar un actionlistener
class ItemSalirListener implements ActionListener{
public void actionPerformed(ActionEvent e){
salirConConfirmacion();
}
}
class ItemAbrirListener implements ActionListener{
public void actionPerformed(ActionEvent e){
leer();
}
}
class ItemGuardarListener implements ActionListener{
public void actionPerformed(ActionEvent e){
escribir();
}
}
private void salirConConfirmacion(){
//vamos a programar un metodo para salir, pero antes de
//hacerlo pregunte si estamos seguros
int opcion =
JOptionPane.showConfirmDialog(this,
"Esta Seguro? \n Podria perder todo su Trabajo",
"Conforma", JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE);
//si la opcion fue si, entonces terminamos
if(opcion == JOptionPane.YES_NO_OPTION){
System.exit(0);
}
}
//Problema... el programa tiene un comportamiento NO coherente,
//si salimos usando el item menu, hay una pregunta, pero si lo
//hacemos clickeando en la equis de la ventana no pregunta nada
//y termina la aplicacion...
//Tenemos que capturar el eventi asociado al click en la ventana
//para ello tendriamos que implementar la interfaz
//WindowListener. La forma mas facil de gaxerki es crear una nueva clase
//que herede de windowAdapter, que a su ves implementa WindowListener
class EquisListener extends WindowAdapter{
public void windowClosing(WindowEvent e){
salirConConfirmacion();
}
}
private void leer(){
try {
//establecemos la conexion con el archivo....
//notece que requerimos de 3 objetos.
File archivo = new File("c:\\enEdicionTAP.txt");
FileReader canal = new FileReader(archivo);
BufferedReader lector = new BufferedReader (canal);
//leer la primera linea
String linea = lector.readLine();
//mientras no se nos termine el archivo
while (linea!=null){
//imprimir por pantalla
zonaEdicion.append(linea+"\n");
//leemos la siguiente linea
linea = lector.readLine();
}
//finalemente, cerramos la conexion al archivo
lector.close();
}
catch(FileNotFoundException ex){
System.err.println("No se encontro el archivo");
}
catch(IOException ex){
System.err.println("Hubo una falla al leer el archivo");
//imprimimos la excepcion para ver cual fue la falla
ex.printStackTrace();
}
}
public void escribir(){
try{
File archivo = new File("c:\\enEdicionTAP.txt");
FileWriter canal = new FileWriter(archivo);
BufferedWriter buffer = new BufferedWriter(canal);
PrintWriter escritor = new PrintWriter(buffer);
//imprimimos...
escritor.print(zonaEdicion.getText());
escritor.close();
//Damos un mensaje de fin por pantalla
System.out.println("Listo!");
}
catch (IOException ex){
System.err.println("Se produjo una falla al "+
"escribir el archivo");
ex.printStackTrace();
}
}
}
He buscado por varias partes, pero como cada codigo es diferente... me confundo y no se por donde empezar...
Agradeceria una ayudita o consejo.