import javax.swing.JOptionPane;
import javax.swing.JFrame;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.util.Scanner;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Principal extends javax.swing.JFrame {
/* atributos */
private String nomeDoArquivo;
/* construtor */
public Principal(String nomeArquivo) {
this.nomeDoArquivo = nomeArquivo;
}
/* métodos */
public void inserirDados(String registro) {
File fArquivo = null;
try {
fArquivo = new File(this.nomeDoArquivo);
FileWriter fwArquivo = null;
// Verifica se o arquivo existe
// Se existir, ele abre par adicionar dados
// se nao existir, ele cria o arquivo
if (fArquivo.exists() == true) {
fwArquivo = new FileWriter(fArquivo, true);
} else {
fwArquivo = new FileWriter(fArquivo);
}
BufferedWriter bw = new BufferedWriter(fwArquivo);
//escreve o registro no arquivo e pula uma linha com o \n
bw.write(registro + "\n");
JOptionPane.showMessageDialog(null,"Registro adicionado com sucesso!");
//fecha o arquivo
bw.close();
fwArquivo.close();
} catch (Exception e) {
JOptionPane.showMessageDialog(null,"Erro ao inserir linhas no arquivo: " + fArquivo);
}
}
public void listarDados() {
Scanner lendoArquivo = null;
File arquivo = null;
try {
// abrindo o arquivo para leitura
// se o arquivo nao existir será disparada uma exceção
arquivo = new File(this.nomeDoArquivo);
lendoArquivo = new Scanner(arquivo);
// leia o arquivo linha por linha até chegar ao seu fim
while (lendoArquivo.hasNextLine()) {
this.SnippetFrame(lendoArquivo.nextLine());
}
} catch (FileNotFoundException e) { // tratando quando o arquivo nao existe
JOptionPane.showMessageDialog(null,"Erro! Arquivo não existe: " + arquivo);
} finally {
// fechando o scanner
try {
lendoArquivo.close();
} catch (Exception e) {
}
}
}
private void SnippetFrame(String linha){
// toda linha do arquivo segue o formato:
// nome:telefone
if (linha != null) {
// separando os campos através do delimitador ':'
String[] campos = linha.split(":");
// adiciona um componente
getContentPane().add(new JLabel ("Produto:"+campos[0]+" Preço R$:"+campos[1]+"\n"));
// Manda o Java calcular o melhor tamanho para o frame.
pack();
// Adiciona um evento para fechar a aplicação
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent evt){
System.exit(0);
}
});
setVisible(true);
menu();
}
}
public void menu() {
//
int op = 0;
do {
String i = JOptionPane.showInputDialog(null," ...::: Catálogo de produtos :::...\n\n"+
"1 - Inserir produto\n"+
"2 - Listar todos os produtos\n"+
"3 - Sair\n\n"+
"Entre com uma opção: \n", "Catálogo de produtos", JOptionPane.PLAIN_MESSAGE );
op = Integer.parseInt(i);
switch (op) {
case 1:
String nome = JOptionPane.showInputDialog(null,"Qual o nome do produto?",
"Inserindo produto", JOptionPane.QUESTION_MESSAGE);
String valor = JOptionPane.showInputDialog(null,"Qual o valor (em Reais)?",
"Inserindo valor", JOptionPane.QUESTION_MESSAGE);
this.inserirDados(nome + ":" + valor);
break;
case 2:
this.listarDados();
break;
case 3:
JOptionPane.showMessageDialog(null,"Obrigado por usar o Catálogo de Produtos!");
System.exit(0);
break;
default:
JOptionPane.showMessageDialog(null,"Opção inválida, tente novamente!");
}
} while (op != 3);
}
public static void main(String[] args) {
Principal p = new Principal("produtos.txt");
p.menu();
new SnippetFrame();
}
}
Problema em abrir arquivo txt
7 Respostas
No construtor faça:
Também dê uma lida em:
http://docs.oracle.com/javase/tutorial/uiswing/layout/index.html
Tópico movido para interface gráfica.
Por favor, ao abrir tópico, não tente chamar atenção com expressões como “HELP!”, “SOCORRO” ou “URGENTE!”
No construtor faça:Também dê uma lida em:
http://docs.oracle.com/javase/tutorial/uiswing/layout/index.htmlTópico movido para interface gráfica.
Desculpa mas eu ainda sou muito novato em java: comecei faz 2 meses :s
quando eu coloco no construtor aparece a seguinte mensagem:
Principal.java:21: cannot find symbol
symbol : constructor BoxLayout()
location: class javax.swing.BoxLayout
getContentPane().setLayout(new BoxLayout());
^
Desculpe tem que ser:
Funcionou, ele organiza os dados, mas ele continua imprimindo somente a primeira linha do txt…será que tem algo a ver com o buffer?
eu andei estudando alguns artigos sobre buffer, parece que está correto, mas não entendo porque ele não lê as linhas subsequentes
// leia o arquivo linha por linha até chegar ao seu fim
while (lendoArquivo.hasNextLine()) {
this.SnippetFrame(lendoArquivo.nextLine());
}
Olhando o fluxo do seu programa, é um bocadinho confuso - você está chamando o método “menu” a cada linha lida do arquivo, o que realmente está muito esquisito.