Como pegar valores de um JTextPane por um JButton de outra classe?

Guj, é o seguinte:

Estou criando um editor de textos.
Tenho um JTextPane de uma classe e um JMenuItem para salvar de outra classe.
A dúvida é: Como eu acesso o texto da primeira com a segunda?
No meu código está salvando um arquivo vazio.

Códigos.

JTextPane

package editor;

import javax.swing.BorderFactory;
import javax.swing.JTextPane;

public class AreaTexto extends JTextPane
{	
	private boolean digitado = false;
	
	public AreaTexto()
	{
		setBorder(BorderFactory.createLoweredBevelBorder());
	}
	
	public String getTexto()
	{
		String digitado = this.getText();
		return digitado;
	}
	public boolean getDigitado()
	{
		return digitado;
	}
	public void setTexto()
	{
		setText("");
	}
	public void setDigitado()
	{
		digitado = true;
	}
}

JMenuBar

package editor;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JFileChooser;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;

public class BarraMenus extends JMenuBar
{
	private JMenu menuArquivo, itemNovo;
	private JMenuItem novoTexto, salvar,sair;
	
	public BarraMenus()
	{
		menuArquivo = new JMenu("Arquivo");
		itemNovo = new JMenu("Novo");
		novoTexto = new JMenuItem("Texto");
		salvar = new JMenuItem("Salvar");
		sair = new JMenuItem("Sair");
		itemNovo.add(novoTexto);
		menuArquivo.add(itemNovo);
		menuArquivo.add(salvar);
		menuArquivo.add(sair);
		add(menuArquivo);
		
		novoTexto.addActionListener(new Novo());
		salvar.addActionListener(new Salvar());
		sair.addActionListener(new Sair());
	}
	
	private class Novo implements ActionListener
	{
		@Override
		public void actionPerformed(ActionEvent evento)
		{
			AreaTexto areaTexto = new AreaTexto();
			String digito = areaTexto.getTexto();
			if(!digito.isEmpty())
			{
				areaTexto.setDigitado();
				areaTexto.setTexto();
			}	
		}
	}
	private class Salvar implements ActionListener
	{
		@Override
		public void actionPerformed(ActionEvent evento)
		{
			AreaTexto areaTexto = new AreaTexto();
			String digitado = areaTexto.getText();
			JFileChooser arquivo = new JFileChooser();
			int retorno = arquivo.showOpenDialog(null);
			if(retorno == JFileChooser.APPROVE_OPTION)
			{
				String caminho = arquivo.getSelectedFile().getAbsolutePath();
				try
				{
					FileWriter fw = new FileWriter(caminho);
					fw.write(digitado);
					fw.close();
				}
				catch(FileNotFoundException e)
				{
					JOptionPane.showMessageDialog(null, "Erro ao salvar arquivo!\n" + e, "Erro!", 0);
				}
				catch(IOException e)
				{
					JOptionPane.showMessageDialog(null, "Erro ao salvar arquivo\n" + e, "Erro", 0);
				}
			}
		}
	}
	private class Sair implements ActionListener
	{
		@Override
		public void actionPerformed(ActionEvent evento)
		{
			System.exit(0);
		}
	}
}

Grato.

Ninguém galera?
O quê pode estar errado?

={

Cara segue as observações no próprio código.

Vocês estava usando variáveis do tipo AreaTexto sempre com escopo local e chamava new na hora de salvar, por isso o arquivo em branco.

package editor;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JFileChooser;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;

public class BarraMenus extends JMenuBar {
	private static final long serialVersionUID = 956016330268964305L;
	private JMenu menuArquivo, itemNovo;
	private JMenuItem novoTexto, salvar, sair;
	private AreaTexto areaTexto;// usando agora como uma variavel de instancia,
								// ficando acessiveis também para as classes
								// internas
	public BarraMenus() {
		areaTexto = new AreaTexto();// Inicializando

		menuArquivo = new JMenu("Arquivo");
		itemNovo = new JMenu("Novo");
		novoTexto = new JMenuItem("Texto");
		salvar = new JMenuItem("Salvar");
		sair = new JMenuItem("Sair");
		itemNovo.add(novoTexto);
		menuArquivo.add(itemNovo);
		menuArquivo.add(salvar);
		menuArquivo.add(sair);
		add(menuArquivo);

		novoTexto.addActionListener(new Novo());
		salvar.addActionListener(new Salvar());
		sair.addActionListener(new Sair());
	}

	private class Novo implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent evento) {
			areaTexto = new AreaTexto();// Antes aqui usava uma variavel de
										// escopo local
			String digito = areaTexto.getTexto();
			if (!digito.isEmpty()) {
				areaTexto.setDigitado();
				areaTexto.setTexto();
			}
		}
	}

	private class Salvar implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent evento) {
			// AreaTexto areaTexto = new AreaTexto(); errado
			String digitado = areaTexto.getText();
			JFileChooser arquivo = new JFileChooser();
			int retorno = arquivo.showOpenDialog(null);
			if (retorno == JFileChooser.APPROVE_OPTION) {
				String caminho = arquivo.getSelectedFile().getAbsolutePath();
				try {
					FileWriter fw = new FileWriter(caminho);
					fw.write(digitado);
					fw.close();
				} catch (FileNotFoundException e) {
					JOptionPane.showMessageDialog(null,
							"Erro ao salvar arquivo!\n" + e, "Erro!", 0);
				} catch (IOException e) {
					JOptionPane.showMessageDialog(null,
							"Erro ao salvar arquivo\n" + e, "Erro", 0);
				}
			}
		}
	}

	private class Sair implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent evento) {
			System.exit(0);
		}
	}
}

Opa! Voltando das férias aqui…
Mesmo com essas alterações não consigo fazer como desejado.
Vou colocar todos os códigos/classes aqui para ver se ajuda:

Local do texto.

package editor;

import javax.swing.BorderFactory;
import javax.swing.JTextPane;

public class AreaTexto extends JTextPane
{	
	private boolean digitado = false;
	
	public AreaTexto()
	{
		setBorder(BorderFactory.createLoweredBevelBorder());
	}
	
	public boolean getDigito()
	{
		return digitado;
	}
	
	public void setDigito(boolean digito)
	{
		this.digitado = digito;
	}
}

Os menus:

package editor;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JFileChooser;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;

public class BarraMenus extends JMenuBar
{
	private JMenu menuArquivo, itemNovo;
	private JMenuItem novoTexto, salvar, abrir,sair;
	private AreaTexto areaTexto;
	
	public BarraMenus()
	{
		//Initializing.
		areaTexto = new AreaTexto();
		menuArquivo = new JMenu("Arquivo");
		itemNovo = new JMenu("Novo");
		novoTexto = new JMenuItem("Texto");
		salvar = new JMenuItem("Salvar");
		abrir = new JMenuItem("Abrir");
		sair = new JMenuItem("Sair");
		
		//Adding to menu bar.
		itemNovo.add(novoTexto);
		menuArquivo.add(itemNovo);
		menuArquivo.add(salvar);
		menuArquivo.add(abrir);
		menuArquivo.add(sair);
		add(menuArquivo);
		
		//ActionListeners.
		novoTexto.addActionListener(new Novo());
		salvar.addActionListener(new Salvar());
		abrir.addActionListener(new Carregar());
		sair.addActionListener(new Sair());
	}
	
	//Private classes to each Listeners.
	//New.
	private class Novo implements ActionListener
	{
		@Override
		public void actionPerformed(ActionEvent evento)
		{
			//Cleaning the area editor for write a new text.
			areaTexto = new AreaTexto();
			String digito = areaTexto.getText();
			if(!digito.isEmpty())
			{
				areaTexto.setText("");
			}
			else
			{
				
			}
		}
	}
	//Save.
	private class Salvar implements ActionListener
	{
		@Override
		public void actionPerformed(ActionEvent evento)
		{
			String digitado = areaTexto.getText();
			JFileChooser arquivo = new JFileChooser();
			int retorno = arquivo.showSaveDialog(null);
			if(retorno == JFileChooser.APPROVE_OPTION)
			{
				String caminho = arquivo.getSelectedFile().getAbsolutePath();
				String extensao = caminho + ".txt";
				try
				{
					FileWriter fw = new FileWriter(extensao);
					fw.write(digitado);
					System.out.println(digitado);
					fw.close();
				}
				catch(FileNotFoundException e)
				{
					JOptionPane.showMessageDialog(null, "Erro ao salvar arquivo!\n" + e, "Erro!", 0);
				}
				catch(IOException e)
				{
					JOptionPane.showMessageDialog(null, "Erro ao salvar arquivo\n" + e, "Erro", 0);
				}
			}
		}
	}
	//Load.
	private class Carregar implements ActionListener
	{
		@Override
		public void actionPerformed(ActionEvent evento)
		{
			JFileChooser arquivo = new JFileChooser();
			int retorno = arquivo.showOpenDialog(null);
			if(retorno == JFileChooser.APPROVE_OPTION)
			{
				try
				{
					FileReader fr = new FileReader(arquivo.getSelectedFile());
					BufferedReader buffer = new BufferedReader(fr);
					String linha;
					StringBuffer string = new StringBuffer();
					while((linha = buffer.readLine())!= null)
					{
						string.append(linha).append("\n");
					}
					fr.close();
					areaTexto.setText(string.toString());
					System.out.println(areaTexto);
				}
				catch(FileNotFoundException e)
				{
					JOptionPane.showMessageDialog(null, "Erro ao abrir arquivo!\n" + e, "Erro!", 0);
				}
				catch(IOException e)
				{
					JOptionPane.showMessageDialog(null, "Erro ao abrir arquivo\n" + e, "Erro!", 0);
				}
			}
		}
	}
	//Exit.
	private class Sair implements ActionListener
	{
		@Override
		public void actionPerformed(ActionEvent evento)
		{
			System.exit(0);
		}
	}
}

O frame:

package editor;

import java.awt.BorderLayout;

import javax.swing.JFrame;

public class Janela extends JFrame
{
	private JFrame janela;
	private BarraMenus barra;
	private PainelTexto painel;
	
	public Janela()
	{
		//Instancing.
		janela = new JFrame("Editor de Texto");
		painel = new PainelTexto();
		barra = new BarraMenus();
		
		//Adding each panel to frame.
		janela.getContentPane().add(barra, BorderLayout.NORTH);
		janela.getContentPane().add(painel, BorderLayout.CENTER);
		
		//Setting frame.
		janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		janela.setSize(800,600);
		janela.setLocationRelativeTo(null);
		janela.setVisible(true);
	}
}

Painel:

package editor;

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class PainelTexto extends JPanel
{
	private JScrollPane rolagem;
	private AreaTexto areaTexto;
	
	public PainelTexto()
	{
		rolagem = new JScrollPane();
		areaTexto = new AreaTexto();
		BorderLayout layout = new BorderLayout();
		setLayout(layout);
		rolagem.setViewportView(areaTexto);
		add(rolagem);
	}
}

E a classe principal:

package editor;

public class Principal 
{

	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{
		new Janela();
	}

}

Por que não tenho as funcionalidades (como salvar, abrir, novo) na area de texto?

Grato.

paulonoforum a grande estrategia é sempre passar os objetos pelo construtor, vou analisar seu código.

Valeu MarciãoCastelãoBrancão, estou no aguardo.
Não entendo muito de Java, pois sou da area de B.I. (Business Intelligence), tanto que demorou entender o que é passar pelo construtor, hehe.
Mas acho bacana programar umas coisinhas aqui e outras ali. Sabe…Ver seu código ganhando vida.

Agradeço e estou no aguardo (dos demais irmãos, também).
Abraços.