Olá pessoal,
Tenho a seguinte classe, que é minha classe principal:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class MeuNote extends JFrame{
//Componentes
private JToolBar toolbar = new JToolBar("Ferramentas");
private JMenuBar menubar = new JMenuBar();
private JMenu arquivo = new JMenu("Arquivo");
private JTextArea texto = new JTextArea();
//Ações:
private Action novo = new NovoAction(this.texto);
private Action salvar = new SalvarAction(this.texto);
private Action abrir = new AbrirAction(this.texto);
public void modificarTexto(String str){
texto.setText(str);
}
public MeuNote(){
super("Meu Notepad");
//Desliga automaticamente a aplicação quando o usuário fecha a janela.
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container interno = this.getContentPane();
this.montaMenu();
this.montaToolBar();
this.montaGUI(interno);
}
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.salvar);
this.toolbar.add(this.abrir);
}
private void montaGUI(Container interno){
interno.setLayout(new BorderLayout());
interno.add(this.toolbar, BorderLayout.NORTH);
interno.add(new JScrollPane(this.texto));
setSize(640, 480);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String args[]){
MeuNote janela = new MeuNote();
}
}
Tenho também está outra classe, que é a ação do Item "Novo" do meu menu:
//import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
//import javax.swing.event.*;
public class NovoAction extends AbstractAction{
private JTextArea texto = new JTextArea();
public NovoAction(JTextArea texto){
//Define o nome da ação
super("Novo");
//Define mais algumas características
this.putValue(Action.SMALL_ICON, new ImageIcon("new.gif"));
this.putValue(Action.SHORT_DESCRIPTION, "Limpa a área de texto");
}
//Definimos aqui o procedimento que será executado quando NovoAction for acionado
public void actionPerformed(ActionEvent ev){
MeuNote.modificarTexto("aaa");
}
}
Essa aplicação é um simples editor de texto e quando clico no item "Novo" do meu menu ele seta o texto do meu JTextArea para "aaa" (isso para testar o funcionamento, pois deverá limpar o JTextArea, claro). O problema para o qual busco solução é o seguinte, da forma que está o código, onde a ação do item "Novo" está em:
public void actionPerformed(ActionEvent ev){
MeuNote.modificarTexto("aaa");
}
O Eclipse me diz que tenho fazer a seguinte mudança na classe principal para funcionar:
private JTextArea texto = new JTextArea();
// ...
public void modificarTexto(String str){
texto.setText(str);
}
private static JTextArea texto = new JTextArea();
// ...
public static void modificarTexto(String str){
texto.setText(str);
}
Ou seja, setar o JTextArea texto e o método modificarTexto() para static, mas eu não queria setá-los como static.
Como eu devo fazer la na ação do item "Novo" para que não seja necessário setá-los como static?
Desde já agradeço!
Abraço!