Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Exercício
Neste exemplo é construído um pequeno editor de texto que permite, ler e guardar o texto
introduzido. A primeira coisa que deve fazer quando projeta uma interface gráfica é fazer um
pequeno esboço da mesma. Assim, o esboço da GUI que vamos construir é o seguinte.
Com o NetBeans, vamos criar um novo projeto Java para área de trabalho Java.
Daremos o nome desse projeto de Aula 8. Em seguida, crie um novo formulário JFrame. Utilize
o botão direito do mouse para acessar o atalho e escolha a opção novo – formulário JFrame.
Esse programa terá uma barra de menu e um JTextArea, responsável pela edição do arquivo.
Construindo o Menu:
Com a paleta, na opção Menus Swing, pegue e arraste uma Barra de Menu para o seu projeto.
Altere os nomes das opções para Arquivo e Sair. Esta barra de Menu já vem com dois JMenu’s
embutidos.
No menu Arquivo, coloque dois Item de Menu, através do mesmo processo (Arrastando da
paleta para o projeto). Nomeie como Abrir e Salvar, respectivamente.
No menu Sair, coloque um Item de Menu. Nomeie como Exit. Aproveite para programar logo
esse evento. Na Propriedade Action, escolha a opção quit, que é uma ação já definida pelo
NetBeans para sair.
Programe as propriedades de evento Action para abrir e salvar respectivamente para os itens
de menu de Arquivo.
O código deverá ser como o apresentado abaixo.
/*
* EditorTexto.java
*
* Created on 23/05/2011, 13:05:35
*/
package exemplos;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.StringTokenizer;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import org.jdesktop.application.Action;
/**
*
* @author Eduardo Pareto
*/
public class EditorTexto extends javax.swing.JFrame {
private String nomeArquivo; //guarda o nome do arquivo
/** Cria o novo form EditorTexto */
public EditorTexto() {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jScrollPane1 = new javax.swing.JScrollPane();
txt = new javax.swing.JTextArea();
jMenuBar1 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
jMenuItem1 = new javax.swing.JMenuItem();
jMenuItem3 = new javax.swing.JMenuItem();
jMenu2 = new javax.swing.JMenu();
jMenuItem2 = new javax.swing.JMenuItem();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
org.jdesktop.application.ResourceMap resourceMap =
org.jdesktop.application.Application.getInstance(adivinhanumerodkt.Jogar.class).getContext().
getResourceMap(EditorTexto.class);
setTitle(resourceMap.getString("Form.title"));
setName("Form");
jScrollPane1.setName("jScrollPane1");
txt.setColumns(20);
txt.setRows(5);
txt.setName("txt"); // NOI18N
jScrollPane1.setViewportView(txt);
jMenuBar1.setName("jMenuBar1");
jMenu1.setText(resourceMap.getString("jMenu1.text"));
jMenu1.setName("jMenu1");
jMenu1.setPreferredSize(new java.awt.Dimension(101, 19));
javax.swing.ActionMap actionMap =
org.jdesktop.application.Application.getInstance(adivinhanumerodkt.Jogar.class).getContext().
getActionMap(EditorTexto.class, this);
jMenuItem1.setAction(actionMap.get("abrir"));
jMenuItem1.setText(resourceMap.getString("jMenuItem1.text")); // NOI18N
jMenuItem1.setName("jMenuItem1"); // NOI18N
jMenuItem1.setPreferredSize(new java.awt.Dimension(109, 22));
jMenu1.add(jMenuItem1);
jMenuItem3.setAction(actionMap.get("salvar"));
jMenuItem3.setText(resourceMap.getString("jMenuItem3.text")); // NOI18N
jMenuItem3.setName("jMenuItem3"); // NOI18N
jMenuItem3.setPreferredSize(new java.awt.Dimension(103, 22));
jMenu1.add(jMenuItem3);
jMenuBar1.add(jMenu1);
jMenu2.setText(resourceMap.getString("jMenu2.text"));
jMenu2.setName("jMenu2"); // NOI18N
jMenuItem2.setAction(actionMap.get("quit")); // NOI18N
jMenuItem2.setText(resourceMap.getString("jMenuItem2.text"));
jMenuItem2.setName("jMenuItem2"); // NOI18N
jMenuItem2.setPreferredSize(new java.awt.Dimension(121, 22));
jMenu2.add(jMenuItem2);
jMenuBar1.add(jMenu2);
setJMenuBar(jMenuBar1);
javax.swing.GroupLayout layout =
new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 400,
Short.MAX_VALUE)
.addGap(137, 137, 137))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 261,
Short.MAX_VALUE)
.addGap(116, 116, 116))
);
pack();
}// </editor-fold>
/**
* @param args Os argumentos da linha de comando
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new EditorTexto().setVisible(true);
}
});
}
@Action
public void abrir() {
JFileChooser file =new JFileChooser();
file.setDialogTitle("Abrir");
int opcao = file.showOpenDialog(this);
if(opcao != JFileChooser.APPROVE_OPTION)
return;
String filename = file.getSelectedFile().getAbsolutePath();
BufferedReader in =null;
// Este código assume que um arquivo não tem mais do que 64K.
try{
in = new BufferedReader(new FileReader(filename));
StringBuffer buf = new StringBuffer(10000);
String aux;
while((aux = in.readLine())!=null){
buf.append(aux);
buf.append("\n");
}
// Se já leu adiciona-se o texto e guarda-se o nome do arquivo
txt.setText(buf.toString());
nomeArquivo = filename;
}catch (FileNotFoundException e){
mensagemErro("Abrir","Erro de abertura: "+ filename);
}catch (IOException e) {
mensagemErro("Abrir","Erro de leitura: "+ filename);
}finally{
try {
if(in !=null) in.close();
}catch(IOException ignore){}
}
}
@Action
public void salvar(){
String filename;
// É a primeira vez que guarda?
if(nomeArquivo ==null){
JFileChooser file = new JFileChooser();
file.setDialogTitle("Guardar");
int opcao = file.showSaveDialog(this);
if (opcao != JFileChooser.APPROVE_OPTION)
return;
filename = file.getSelectedFile().getAbsolutePath();
File f =new File(filename);
// O arquivo já existe então pede confirmação
if (f.exists()){
int confirmacao = JOptionPane.showConfirmDialog(
this,"Este arquivo já existe. Tem a certeza que quer escrever por cima?",
"Guardar", JOptionPane.YES_NO_OPTION);
if (confirmacao == JOptionPane.NO_OPTION)
return;
}
}
else
filename = nomeArquivo;
BufferedWriter out =null;
try{
out =new BufferedWriter(new FileWriter(filename));
// Vamos escrever linha a linha a fim de utilizar o separador adequado
StringTokenizer linhas =new StringTokenizer(txt.getText(),"\n");
while(linhas.hasMoreTokens()){
out.write(linhas.nextToken());
out.newLine();
}
nomeArquivo = filename;
}catch (IOException e) {
mensagemErro("Guardar","Erro de escrita: "+ filename);
}finally{
try {
if (out != null) out.close();
}catch(IOException ignore){}
}
}
private void mensagemErro(String titulo, String mensagem){
JOptionPane.showMessageDialog(this, mensagem, titulo,
JOptionPane.ERROR_MESSAGE);
}
// Início das declarações de variaveis
private javax.swing.JMenu jMenu1;
private javax.swing.JMenu jMenu2;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuItem jMenuItem1;
private javax.swing.JMenuItem jMenuItem2;
private javax.swing.JMenuItem jMenuItem3;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea txt;
// Final das declarações de variaveis
}