Problemas com Action e alguns conceitos pra criar notepad

Olá! Bom, tentei resolver isso de algumas maneiras, mas foi tudo em vão, então gostaria de uma ajuda mais especializada…

É o seguinte:

Eu tava fazendo um programinha que fucionaria como um notepad, seguindo um tutorial da net… só pra aprender a trabalhar com componentes gráficos e eventos…

Pois bem. Tudo ia bem até que eu fui criar os botões de novo e salvar. As coisas que eu faço simplesmente não funcionam, e quando compilam, não executam os menus e tal, e também só compila sem a chave de finalização da classe.

Eu sou bem iniciante nisso, portanto eu não sei se eu deveria ter criado as classes das actions em outro arquivo ou se fiz bem em deixar no mesmo, vou postar o código pra entederem melhor o que eu preciso.

[code]import java.awt.;
import java.awt.event.
;
import javax.swing.;
import javax.swing.event.
;

public class MeuNote extends JFrame{

   //Componentes que vão estar no container.
   private JToolBar toolbar = new JToolBar("Ferramentas");
   private JMenuBar menubar = new JMenuBar();
   private JMenu arquivo = new JMenu ("Arquivo");
   private JTextArea texto = new JTextArea();

   //Ações a serem realizadas.
   private Action novo = new NovoAction (this.texto);
   private Action salvar = new SalvarAction (this.texto);


   //Construtor
   public MeuNote(){
          super("Bloco de Notas do Michael");
          this.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
          Container interno = this.getContentPane();
          this.montaMenu();
          this.montaToolBar();
          this.montaGUI(interno);
   }

   //Métodos de criação
   private void montaMenu(){
          JMenuItem itemNovo = new JMenuItem (this.novo);
          JMenuItem itemSalvar = new JMenuItem (this.salvar);
          this.arquivo.add (itemNovo);
          this.arquivo.add (itemSalvar);
          this.menubar.add (this.arquivo);
          this.setJMenuBar (this.menubar);
   }

   private void montaToolBar(){
           this.toolbar.add(this.novo);
           this.toolbar.add(this.salvar);
   }

   private void montaGUI (Container interno) {
           interno.setLayout (new BorderLayout ());
           interno.add (this.toolbar, BorderLayout.NORTH);
           interno.add (new JScrollPane (this.texto));
   }


   //Classes NOVO,SALVAR
   //NOVO
   public class NovoAction extends AbstractAction{
          private JTextArea texto;
          public NovoAction (JTextArea texto){
                 super ("Novo");

                 this.putValue (Action.SMALL_ICON, new ImageIcon ("new.gif"));
                 this.putValue (Action.SHORT_DESCRIPTION, "Limpa área do texto");
          }

          public void actionPerformed (ActionEvent ev){
                 this.texto.setText("");
          }
   }

   //SALVAR
   // Classe onde está todo o problema

   public class SalvarAction extends AbstractAction{
          private JTextArea texto;
          public SalvarAction (JTextArea texto){
                 super("Salvar");
                 this.putValue (Action.SMALL_ICON, new ImageIcon ("save.gif"));
                 this.putValue (Action.SHORT_DESCRIPTION, "Salva");
          }

          public void actionPerfoemrd (ActionEvent ev){
                 JFileChooser jfc = new JFileChooser();
                 int resp = jfc.showSaveDialog (this.texto);
                 if (resp != JFileChooser.APPROVE_OPTION) return;
                 File arquivo = jfc.getSelectedFile();
                 this.SaveFile(arquivo);
          }

          private void SaveFile (File f){
                  try{
                      FileWriter out = new FileWriter(f);
                      out.write (this.texto.getText());
                      out.close();
                      } catch (IOException e) {
                        JOptionPane.showMessageDialog (null, e.getMessage ());
                      }
          }

    }


          public static void main (String args[]){
                 MeuNote janela = new MeuNote();
                 janela.setSize(600,400);
                 janela.setVisible(true);
          }

} [/code]

Enfim, eu gostaria de uma ajuda pra entender melhor os conceitos disso que eu to fazendo, e porque de tantos erros.
E onde colocar o método main, finalizar a classe, etc.
Esse código compila, porém sem nada.
O tutorial que eu usei foi esse: http://www.javafree.com.br/content/view.jf?idContent=176

Obrigado a quem responder!

UP.
Desculpem subir o tópico, mas eu realmente gostaria de entender este problema pra continuar aprendendo :smiley:

Última tentativa.
vamos ver se alguém se sensibiliza com minha causa :stuck_out_tongue_winking_eye:

Boa noite Colegas !

Amigo que erro esta dando ?

Pra mim seu código esta meio estrano…
Por exemplo, você criou uma public class NovoAction dentro da sua classe principal… porque ?

Acho que devia começar separando as coisas…

Outra coisa:

onde esta esse abrir:
JMenuItem itemAbrir = new JMenuItem (this.abrir);

Crie-o ou retire-o. Eu comentei…

acho que esta linha esta errada:
public void actionPerfoemrd (ActionEvent ev){

talvez devesse ser:
public void actionPerformed (ActionEvent ev){

o import da classe principal não é enxergado aqui:
JFileChooser jfc = new JFileChooser();

troque por:
javax.swing.JFileChooser jfc = new JFileChooser();

Não encontrei SMALL_ICON e SHORT_DESCRITPION em Action.

O método putValue em Action é:
public void putValue(String key, Object newValue) {

Então troquei por:

this.putValue (“Salvar”, new ImageIcon (“save.gif”));

Não conheço essas constantes, então não entendi o que vc pretendia fazer…

Bom ai vai seu código compilando e rodando…

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package guj;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Desktop.Action;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.AbstractAction;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JToolBar;

/**
 *
 * @author Edmilson
 */
public class MeuNote extends JFrame {
       //Componentes que vão estar no container.   
       private JToolBar toolbar = new JToolBar("Ferramentas");   
       private JMenuBar menubar = new JMenuBar();   
       private JMenu arquivo = new JMenu ("Arquivo");   
       private JTextArea texto = new JTextArea();   
         
       //Ações a serem realizadas.   
       private NovoAction novo = new NovoAction (this.texto);   
       private SalvarAction salvar = new SalvarAction (this.texto);   
       
         
       //Construtor   
       public MeuNote(){   
              super("Bloco de Notas do Michael");   
              this.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);   
              Container interno = this.getContentPane();   
              this.montaMenu();   
              this.montaToolBar();   
              this.montaGUI(interno);   
       }   
         
       //Métodos de criação   
       private void montaMenu(){   
              JMenuItem itemNovo = new JMenuItem (this.novo);   
              JMenuItem itemSalvar = new JMenuItem (this.salvar);   
              //JMenuItem itemAbrir = new JMenuItem (this.abrir);   
              this.arquivo.add (itemNovo);   
              this.arquivo.add (itemSalvar);   
              //this.arquivo.add (itemAbrir);   
              this.menubar.add (this.arquivo);   
              this.setJMenuBar (this.menubar);   
       }   
         
       private void montaToolBar(){   
               this.toolbar.add(this.novo);   
               //this.toolbar.add(this.abrir);   
               this.toolbar.add(this.salvar);   
       }   
         
       private void montaGUI (Container interno) {   
               interno.setLayout (new BorderLayout ());   
               interno.add (this.toolbar, BorderLayout.NORTH);   
               interno.add (new JScrollPane (this.texto));   
       }   
         
         
       //Classes NOVO,SALVAR   
       //NOVO   
       public class NovoAction extends AbstractAction{   
              private JTextArea texto;   
              public NovoAction (JTextArea texto){   
                     super ("Novo");   
                 
                     this.putValue ("Novo", new ImageIcon ("new.gif"));   
                     //this.putValue (Action.SHORT_DESCRIPTION, "Limpa área do texto");   
              }   
                 
              public void actionPerformed (ActionEvent ev){   
                     this.texto.setText("");   
              }   
       }  
         
       //SALVAR   
       public class SalvarAction extends AbstractAction{   
              
              private JTextArea texto;   
              public SalvarAction (JTextArea texto){   
                     super("Salvar");   
                     this.putValue ("Salvar", new ImageIcon ("save.gif"));   
                     //this.putValue (Action.SHORT_DESCRIPTION, "Salva");   
              }   
                 
              public void actionPerformed(ActionEvent e) {   
                     javax.swing.JFileChooser jfc = new JFileChooser();   
                     int resp = jfc.showSaveDialog (this.texto);   
                     if (resp != JFileChooser.APPROVE_OPTION) return;   
                       
                     File arquivo = jfc.getSelectedFile();   
                     this.SaveFile(arquivo);   
              }   
                 
              private void SaveFile (File f){   
                      try{   
                          FileWriter out = new FileWriter(f);   
                          out.write (this.texto.getText());   
                          out.close();   
                          } catch (IOException e) {   
                            JOptionPane.showMessageDialog (null, e.getMessage ());   
                          }     
              }                  
        }   
               
               
              public static void main (String args[]){   
                     MeuNote janela = new MeuNote();   
                     janela.setSize(600,400);   
                     janela.setVisible(true);   
              }   

}

De qualquer forma ainda acho que separar as classes ficaria mais claro…

O seu Novo esta com erro… mas aí acho que já da pra quebrar um pouco mais a cabeça.
Espero ter ajudado…

[]s

O código tá meio estranho sim.
O problema todo é esse. Eu não sei se eu devo declarar essas classes dentro da principal, ou em outro arquivo.

Se ficasse em arquivos separados, eu não teria que extender ou importar a classe NovoAction ?

Esses são os problemas conceituais que eu to tendo.

No mais todos os erros estão na classe SalvarAction.
Vários cannot find symbol, e um erro dizendo que a classe não é abstrate e que não “override” o método abstrato actionPerformed.

Vou editar o código com algumas correções que eu fiz.
Continua não dando certo, porém.

Valeu mesmo Zeed01!
O problema dos abrir é pq o código do tutorial tinha pra fazer a classe como exercicio, eu nao sabia fazer e acabei esquecendo de tirar.

De qualquer forma uma dúvida persiste:
Se eu fosse criar as classes novo e abrir em um outro arquivo, eu teria que importar, estender, ou o que ?

Muito obrigado mesmo pela ajuda!

Bom dia colegas !

Então Colega… o motivo de você estar criando outra classe é para estender AbstractAction ?
Não conheço AbstractAction, mas pelo que vi nas classes NovoAction e SalvarAction só o que tem é um botão com o ActionPerformer correspondente a salvar ou criar um novo arquivo…
Não poderia simplesmente criar os botões com JButton salvar = new JButton("Salvar) e pronto ?

De qualquer fora eu acho que criar uma classe dentro de outra não fica legal… opinião minha, nem sei se é um tipo de padrão utilizado…
Mas se voce for separar teria um outro arquivo com a classe NovoAction estendendo AbstractAction e na sua classe Note você teria um import dessa classe e instanciaria um objeto do tipo NovoAction… acho que é ± isso.

[]s

Valeu Zed!
eu vou tentar fazer do jeito que vc falou, andei pesquisando e descobri que tenho que aprender algo sobre classpath.
de qualquer forma, vou tentar importando as classes, qualquer coisa eu posto o resultado.
muito obrigado :slight_smile: