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.
ViniGodoy:
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
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]