Criar arquivo de texto ou botão de impressão

24 respostas
G

Acredito que minha duvida aqui seja muito simples …bom o problema é o seguinte…
Estou criando um formulario no netbeans …e após a pessoa preencher esse formulario deve existir um botão para gerar qualquer arquivo de texto ou um botão para impressão deste formulario preenchido !

Espero q possam ajudar levando em conta que sou muito iniciante em java!
Obrigado!

24 Respostas

C

vc está fazendo o formulário pra web, swing…???

igor.schkrab

No netbeans acho que você pode adicionar o botão na tela…
Aí acho que você da 2 cliques no botão e vai pro código… Não tenho certeza porque não uso o netbeans…
No código você coloca o comando que quiser pra gerar o arquivo… impressão…

G

Estou fazendo swing…
queria gerar um txt com tds as informações q foram preenchidas … uma especie de botão “submit” soh q as informações devem gerar um arquivo e n ir para um banco … gostaria tbm de um segundo bota que ao clicar ele imprimir em A4 básico todo o formulario swing preenchido !
Obrigado!

G

igor.schkrab:
No netbeans acho que você pode adicionar o botão na tela…
Aí acho que você da 2 cliques no botão e vai pro código… Não tenho certeza porque não uso o netbeans…
No código você coloca o comando que quiser pra gerar o arquivo… impressão…

o botão eu posso colocar qualquer um mesmo … o problema é que desconhece qualquer código de impressão !

fabiodurgante
para imprimir tem q ter uma tabela dae voce imprime essa tabela aqui o esquema de uma

    private void preencheTabelaNomeProduto() {
          DefaultTableModel modelo = new javax.swing.table.DefaultTableModel(
            new Object [][] {},
            new String [] {"Código", "Nome", "Quant_Estoque", "Valor_Unitario"}
        );
    ProdutoDao ProdutoD = new ProdutoDao();
   
    tabela.setModel(modelo);
    
    List<Produto> lista = ProdutoD.listar(campo_pra_pesquisaNome.getText());//

a linha acima é sua paesuisa tipo por nome por id por data e a abaixo sera preenchido a JTABLE com o retorno da pesquisa 

    for(Produto pro:lista) {
        modelo.addRow(new String[] {
            pro.getid_produto().toString(), pro.getnome_produto(), pro.getquant_produto().toString(), pro.getvalor_produto().toString() });


    }
} 


 no action do botao voce fas isso e esta imprimido
   try {
        tabela.print();
    } catch (PrinterException ex) {
        JOptionPane.showMessageDialog(this, "Não foi possível imprimir\n" + ex.getMessage());
    }
igor.schkrab

Como criar arquivos: http://www.guj.com.br/user.article.get.chain?page=1&article.id=13

Como imprimir: da uma procurada no guj… Com certeza deve ter…

C

blz então, procure pelo forum alguma coisa do tipo “como gerar um .txt” então use o evento do botão para gerar esse .txt.
Agora o botão de imprimir não é tão simples assim, veja q tipo de impressora vc tem instalado na sua máquina, se é em rede, se é local, se é usb ou se é cabo paralelo, quando eu fiz uma vez isso, já faz um tempo eu criei uma classe chamada Print onde continha um método q por parametro recebia uma string para ser impressa, já resolveu o meu problema.
flw…

G

O que eu n estou conseguindo entneder eh como gerar o txt com o formulario preenchido … pelo que eu percebi da pra criar com o fileOutputSetream o vc passa o que sera escrito no arquivo txt … eu gostaria q ele jogasse o formulario swing direto para txt sem ter que passar campo a campo como parametro !

igor.schkrab

Voce pega os valores dos campos do formulario…
Coloca numa string… formata do jeito que quiser… e joga no arquivo…

marcosharbs

vc vai ter que criar uma rotina dai que recebe um frame como parametro extrai as informaçoes e ai salva elas no txt, vc so tem como salvar texto no txt vai te que pega as informaçoes gera uma string formatada e tal e ai salva no tx

G

blza assim que possivel vou tentar fazer isto… o grande problema é o tamanho do formulario …vcs tem algum exemplo em que a pessoa prepare a string e dpos jogue em um txt …ou algo do tp … vai ser bem util !
Obrigado a todos!

sf.marcius

Classe TextFile simples que eu criei:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class TextFile
{
    private String filename;
    private String text;

    public String getFilename()
    {
        return filename;
    }

    public String getText()
    {
        return text;
    }

    public void setText(String text)
    {
        this.text = text;
    }

    public void save() throws IOException
    {
        FileWriter fw = new FileWriter(filename);
        fw.write(text);
        fw.close();
    }

    public void saveAs(File file) throws IOException
    {
        saveAs(file.getAbsolutePath());
    }

    public void saveAs(String filename) throws IOException
    {
        FileWriter fw = new FileWriter(filename);
        fw.write(text);
        fw.close();
        this.filename = filename;
    }

    public void open(String filename) throws FileNotFoundException, IOException
    {
        File file = new File(filename);
        open(file);
    }

    public void open(File file) throws FileNotFoundException, IOException
    {
        BufferedReader br = new BufferedReader(new FileReader(file));
        StringBuffer bufSaida = new StringBuffer();
        for (String linha = br.readLine(); linha != null; linha = br.readLine()) {
            bufSaida.append(linha);
            bufSaida.append("\n");
        }
        br.close();
        this.text = bufSaida.toString();
        this.filename = file.getAbsolutePath();
    }
}

no seu código (dentro do ActionListener do botao), crie uma string contendo o texto que vc quer para o arquivo e ponha em um objeto TextFile:
ajuste os imports usando sua IDE :slight_smile:

// cria o texto
        StringBuffer texto = new StringBuffer();
        texto.append("Código: ");
        texto.append(codigoTextField.getText() + "\n");
        texto.append("Nome: ");
        texto.append(nomeTextField.getText() + "\n");
        texto.append("Endereco: ");
        texto.append(enderecoTextField.getText() + "\n");
        
        // prepara o textfile         
        TextFile txtFile = new TextFile();
        txtFile.setText(texto.toString());
        
        // chooser para o usuario escolher o nome do arquivo 
        JFileChooser chooser = new JFileChooser();
        if (chooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
            try {
                String filename = chooser.getSelectedFile().getAbsolutePath();
                if (!filename.endsWith(".txt")) {
                    filename += ".txt";
                }
                txtFile.saveAs(filename);
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }

Ah! isso considerando que seu form tivesse os JTextFields codigoTextField, nomeTextField e enderecoTextField.

acredito que isso ajude…
vc pode melhorar esse algoritmo :slight_smile:

G

O que acham desse algoritmo … Bem básico …preparei apenas para teste …seria o actionPerformed do botão gerar arquivo …

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectOutputStream;
public class Gravador

{

public static void main (String[] args)

{

ObjectOutputStream s;

FileOutputStream f;

String a;

a = Teste \n Teste \n Teste; //preparação da string que irá gerar o txt;
try {
        f = new FileOutputStream("c:\\teste.txt", true); //local e nome do arquivo que sera gerado;
        s = new ObjectOutputStream(f);
        s.writeObject(a); //escreve no arquivo txt;
    }
    catch(IOException io )
    {
        System.out.println("Erro ao criar arquivo");
    }

}

}

M

Dica: Se quiser algo bem prático para ler e escrever de/em Streams, procure sobre Scanner e PrintWritter.

G

Glauber Pardo:
O que acham desse algoritmo … Bem básico …preparei apenas para teste …seria o actionPerformed do botão gerar arquivo …

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectOutputStream;
public class Gravador

{

public static void main (String[] args)

{

ObjectOutputStream s;

FileOutputStream f;

String a;

a = Teste \n Teste \n Teste; //preparação da string que irá gerar o txt;
try {
        f = new FileOutputStream("c:\\teste.txt", true); //local e nome do arquivo que sera gerado;
        s = new ObjectOutputStream(f);
        s.writeObject(a); //escreve no arquivo txt;
    }
    catch(IOException io )
    {
        System.out.println("Erro ao criar arquivo");
    }

}

}

alguem pode me falar se o código assim irá funcionar para gerar o txt e abrir em notepad

M

Glauber Pardo:
Glauber Pardo:
O que acham desse algoritmo … Bem básico …preparei apenas para teste …seria o actionPerformed do botão gerar arquivo …

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectOutputStream;
public class Gravador

{

public static void main (String[] args)

{

ObjectOutputStream s;

FileOutputStream f;

String a;

a = Teste \n Teste \n Teste; //preparação da string que irá gerar o txt;
try {
        f = new FileOutputStream("c:\\teste.txt", true); //local e nome do arquivo que sera gerado;
        s = new ObjectOutputStream(f);
        s.writeObject(a); //escreve no arquivo txt;
    }
    catch(IOException io )
    {
        System.out.println("Erro ao criar arquivo");
    }

}

}

alguem pode me falar se o código assim irá funcionar para gerar o txt e abrir em notepad

Sim, vai. Gera um arquivo txt comum, como se tivesse sido criado em um editor de texto do sistema operacional.

M

Veja um exemplo:

Arquivo JAR executável

Código fonte - classe JFrameGenerico

Código fonte - classe EditorDeTexto

G

marcobiscaro2112:
Veja um exemplo:

Arquivo JAR executável

Código fonte - classe JFrameGenerico

Código fonte - classe EditorDeTexto

agradeco muito a sua ajuda …
infelizmente n tenho conhecimento bastante para entender seu código !
gostaria soh que me informaçe se o código na qual eu criei acima pode servir para escrever uma string formatada!

M

O que quer dizer com formatada? Com várias fontes diferentes, negrito, itálico, etc.?

G

Sim, na verdade n tenho necessidade de formatala em negrito …
minha necessidade eh apenas gera-la
eu queria saber se este meu codigo esta ok?..alguem pode testar para mim por favor

M

Funciona, em partes. Acontece que ao usar ObjectOutputStream, o Java grava a String como um objeto para futuro carregamento em outros programas, ou seja, não é um arquivo de texto comum. A saída é:

Caracteres estranhos! Sugiro que use a classe PrintWriter. Vou mostrar um exemplo. Outra coisa importante é que feche a saída de dados ao terminar.

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;

public class Gravador {

    public static void main(String[] args) {
	PrintWriter s = null;
	FileOutputStream f = null;
	String a = null;

	a = "Teste \n Teste \n Teste"; // preparação da string que irá gerar o
				       // txt;

	try {
	    f = new FileOutputStream("teste.txt", true); // local e nome do
							 // arquivo que sera
							 // gerado;
	    s = new PrintWriter(f);
	    s.write(a); // escreve no arquivo txt;
	    System.out.println("Arquivo gravado com sucesso!"); // avisa o
								// usuário que
								// foi gravado!
	} catch (IOException io) {
	    System.err.println("Erro ao criar arquivo"); // use a saída
							 // System.err para
							 // mostrar erros
	} finally {
	    if (s != null) {
		s.close(); // IMPORTANTE! SEMPRE FECHE A SAÍDA!
	    }
	}

    }
}
G
marcobiscaro2112:
Funciona, em partes. Acontece que ao usar ObjectOutputStream, o Java grava a String como um objeto para futuro carregamento em outros programas, ou seja, não é um arquivo de texto comum. A saída é:
’
Caracteres estranhos! Sugiro que use a classe PrintWriter. Vou mostrar um exemplo. Outra coisa importante é que feche a saída de dados ao terminar.
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;

public class Gravador {

    public static void main(String[] args) {
	PrintWriter s = null;
	FileOutputStream f = null;
	String a = null;

	a = "Teste \n Teste \n Teste"; // preparação da string que irá gerar o
				       // txt;

	try {
	    f = new FileOutputStream("teste.txt", true); // local e nome do
							 // arquivo que sera
							 // gerado;
	    s = new PrintWriter(f);
	    s.write(a); // escreve no arquivo txt;
	    System.out.println("Arquivo gravado com sucesso!"); // avisa o
								// usuário que
								// foi gravado!
	} catch (IOException io) {
	    System.err.println("Erro ao criar arquivo"); // use a saída
							 // System.err para
							 // mostrar erros
	} finally {
	    if (s != null) {
		s.close(); // IMPORTANTE! SEMPRE FECHE A SAÍDA!
	    }
	}

    }
}

Vou testar assim que chegar em casa !...muito obrigado pela ajuda de tds !

G

excelente o cod funcionou mesmo !
Agora vmos as particularidades tem como eh colocar Negrito / italico quando formatar a string …
algo do tipo :

String a = “Nome: Pedro Nunes \n Idade:”;

acho q deu pra entender…e outra coisa que preciso eh salvar o arquivo q no caso desse código “Teste.txt” ou abrir um tela para que o usuario escoha onde ira salvar ou um caminho padrao por exemplo Desktop

Agradeço a todos que ajudaram …Estou muito satisfeito com a qualidade do forum !

abraço a tds!

M

Acontece que em arquivos txt não é possível aplicar formatação em apenas parte do texto (tente fazer isso no editor de texto do seu sistema operacional e não vai conseguir…). Quando ao escolher onde salvar o arquivo, existe uma classe no pacote javax.swing chamada JFileChooser, que com certeza vai ajudar muito, Veja esse tutorial e se tiver dúvidas poste aqui.

Criado 6 de janeiro de 2009
Ultima resposta 9 de jan. de 2009
Respostas 24
Participantes 7