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:
He buscado por varias partes, pero como cada codigo es diferente... me confundo y no se por donde empezar.../* 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(); } } }
Agradeceria una ayudita o consejo.