Nao perder texto no JtextArea

E ai galerinha do GUJ, blz ?

Bom, eu tenho no programa um JFrame principal que dentro dele há um botao certo ? E esse botao, qdo clicado, abre um outro JFrame, que contém um JTextArea que permite a geração de relatório ok?
Gostaria de fazer uma coisa: antes de mais nada vamos chamar o JFrame principal de JFrame 1 e o do JTextArea de JFrame 2 ok ? bom, se o usuário fechar o JFrame 2, gostaria que o texto que ele escreveu nao perdesse, para que qdo ele clicar de novo no botao, o texto continue la no textarea. alguem tem alguma ideia de como fazer isso ?
grato,

alias, segue o codigo que trata isso:

package ferramentas;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.TitledBorder;

public class Relatorio {
	
	JPanel painelRel, p2, painelCentral, painelSuperior;
	JRadioButton plain, bold, italic, boldItalic;
	ButtonGroup radioGroup;
	Font plainFont, boldFont, italicFont, biFont;
	JTextArea texto;
	
	public Relatorio() {
		JFrame frame = new JFrame("Relatório");
		
		painelCentral = new JPanel(new BorderLayout());
	    painelSuperior = new JPanel(new FlowLayout());
		p2 = new JPanel();
		painelRel = new JPanel();
		
		texto = new JTextArea(45, 40);
		texto.setLineWrap(true);
		texto.setWrapStyleWord(true);

		JScrollPane barra = new JScrollPane(texto); //Adiciona Scroll a TextArea
		barra.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

		p2.add(barra); //Adiciona a Scroll ao painel
	    painelRel.add(p2);

	    painelCentral.add(painelRel,BorderLayout.CENTER);
	    painelCentral.add(painelSuperior,BorderLayout.NORTH);
	    
	    TitledBorder tituloBot;
	    tituloBot = BorderFactory.createTitledBorder("Fontes");
	    
	    JPanel painelBotao = new JPanel();
	    painelBotao.setPreferredSize(new Dimension(300, 80));
	    painelBotao.setBorder(tituloBot);
	    
	    plain = new JRadioButton("Plain", true);
	    painelBotao.add(plain);

	    bold = new JRadioButton("Bold", false);
	    painelBotao.add(bold);
	    
	    italic = new JRadioButton("Italic", false);
	    painelBotao.add(italic);
	    
	    boldItalic = new JRadioButton("Bold/Italic", false);
	    painelBotao.add(boldItalic);

	    RadioButtonAction act = new RadioButtonAction();
	    plain.addItemListener(act);
	    bold.addItemListener(act);
	    italic.addItemListener(act);
	    boldItalic.addItemListener(act);

	    radioGroup = new ButtonGroup();
	    radioGroup.add(plain);
	    radioGroup.add(bold);
	    radioGroup.add(italic);
	    radioGroup.add(boldItalic);

	    plainFont = new Font("Serif", Font.PLAIN, 14);
	    boldFont = new Font("Serif", Font.BOLD, 14);
	    italicFont = new Font("Serif", Font.ITALIC, 14);
	    biFont = new Font("Serif", Font.BOLD + Font.ITALIC, 14);
	    texto.setFont(plainFont);

	    painelSuperior.add(painelBotao);

	    frame.add(painelCentral);
	    frame.setVisible(true);
	    frame.setSize(500, 850);
	}

	

	private class RadioButtonAction implements ItemListener {

		public void itemStateChanged(ItemEvent e) {
			if(e.getSource() == plain)
				texto.setFont(plainFont);
			else if(e.getSource() == bold)
					texto.setFont(boldFont);
			else if(e.getSource() == italic)
					texto.setFont(italicFont);
			else if(e.getSource() == boldItalic)
					texto.setFont(biFont);
		}
	}

}

Feche o Frame2 com setVisible(false). Isso só o tornará invisível.
Depois, no Frame1, dê new uma única vez no Frame2, guardando a variável dele numa propriedade.

Nas demais vezes, basta dar setVisible(true) no frame.

cara, nao entendi o que vc disse sobre isso …
tipo, fiz a chamada do JFrame 2 assim:

        relatorio = new JButton("Relatorio");
        relatorio.addActionListener(
        		new ActionListener() {
					public void actionPerformed(ActionEvent e) {
						r = new Relatorio(); //ai chama a classe Relatorio, e obviamente ira abrir o JFrame 2
					}
        });

mas nao entendi o que vc quis dizer com aquilo …
poderia me especificar ? mais detalhes por favor :wink:
t+

Ele disse q vc poderiar fazer pra quando o usuario fechar o frame, inves de fechar ele faria o frame ficar invisivel tendo assim os dados ainda nele

mas entao … foi o que eu fiz … mas mesmo assim nao deu certo …
veja (isso na classe do JFrame 2):

	    addWindowListener(
	    		new WindowListener() {
					public void windowClosed(WindowEvent e) {
						setVisible(false);
					}

					public void windowClosing(WindowEvent e) { }
					public void windowActivated(WindowEvent e) { }
					public void windowDeactivated(WindowEvent e) { }
					public void windowDeiconified(WindowEvent e) { }
					public void windowIconified(WindowEvent e) { }
					public void windowOpened(WindowEvent e) { }
	    			
	    });

mas entao … foi o que eu fiz … mas mesmo assim nao deu certo …
veja (isso na classe do JFrame 2):

[code]
addWindowListener(
new WindowListener() {
public void windowClosed(WindowEvent e) {
setVisible(false);
}

				public void windowClosing(WindowEvent e) { }
				public void windowActivated(WindowEvent e) { }
				public void windowDeactivated(WindowEvent e) { }
				public void windowDeiconified(WindowEvent e) { }
				public void windowIconified(WindowEvent e) { }
				public void windowOpened(WindowEvent e) { }
    			
    });

[/code][/quote]