Swing Não Apresenta Conteúdo De Um Arquivo

8 respostas
C

Bom dia Prezados,

Estou com o seguinte problema, tenho um trabalho acadêmico que utiliza Swing contendo alguns painéis…

Um dos painéis realiza a leitura de um arquivo *.txt ao ser iniciado a class, neste momento a tela fica congelada aparece o painel mas não os dados do .txt (o que já era de se esperar pois ele ainda esta carregando o arquivo).

Após alguns segundo, ou maximizo ou minimizo a aplicação dai sim os painéis apresentam as informações.

Caso eu execute a aplicação, e deixe o tamanho original nada e exibido.

Há alguma forma de resolver este problema? Ou teria de antes de realizar a leitura do arquivo utilizar alguma pog? Tipo carregar algum janela apresentando alguma mensagem (arquivo sendo carregado).

Agradeço a todos.

Trajano

8 Respostas

T

Você usou um JTextField ou um JTextArea para apresentar a sua informação?

Omeganosferatu

Tenta dar um .validate(); no seu componente
não sei se ajuda
vlw

C

O arquivo e apresentado em um JTextArea.

T

Uma coisa que vejo muito em programas é usar o método updateUI() do componente (JTextField ou JTextArea), após o carregamento do texto; ele pode até ser usado em alguns casos (emergência), mas se você usar em um JTable, por exemplo, pode deixar seu programa muito lento, porque redesenha coisas demais. Você pode experimentar invalidate().

C

Valeu vou testar.

C

Srs,

Tentei fazer o proposto, mas não deu certo;

Abaixo, o código que estou tendo problemas...

import java.io.*;
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Teste extends JFrame implements ActionListener {

	private static final long serialVersionUID = -7054815922961747932L;

	// Criação das JTextArea,
	private JTextArea ta1;

	// Criação String que recebe o conteúdo da leitura do arquivo
	private String strh;

	public Teste(String title) {
		super(title);

		// Definindo o tamanho das JTextArea,

		ta1 = new JTextArea(10, 45);
		ta1.setEditable(false);
	}

	private void criaMostraGUI() {

		// Definição do comportamento e Layout da janela

		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		getContentPane().setLayout(new FlowLayout());
		setLocation(300, 100);
		setVisible(true);

		setResizable(false);
		setSize(580, 580);

		JPanel p1 = new JPanel();
		p1.setLayout(new BorderLayout());
		try {
			abrirFile();
		} catch (java.io.IOException erro) {
			JOptionPane.showMessageDialog(null, "Erro na abertura do Arquivo!",
					"Erro", JOptionPane.ERROR_MESSAGE);
		}
		p1.add(new JScrollPane(ta1));

		getContentPane().add(p1);
	}

	public static void main(String[] args) {
		Teste gui = new Teste("Teste v 1");
		gui.setUndecorated(true);
		gui.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
		gui.criaMostraGUI();
	}

	private void abrirFile() throws IOException {
		String file = "c:\\1.txt";
		BufferedReader bufferedReader = null;
		try {
			bufferedReader = new BufferedReader(new FileReader(file));
			StringBuilder sb = new StringBuilder();
			int c;
			while ((c = bufferedReader.read()) != -1) {
				sb.append((char) c);
			}
			strh = (sb.toString());
			bufferedReader.close();
			ta1.setText(sb.toString());
		} catch (java.io.IOException erro) {
			JOptionPane.showMessageDialog(null, "Erro na abertura do Arquivo!",
					"Erro", JOptionPane.ERROR_MESSAGE);
		} finally {
			if (bufferedReader != null) {
				bufferedReader.close();
			}
		}
	}

	// Tratamento dos eventos do TECLADO
	public void teclado_keyTyped(KeyEvent e) {
	}

	@Override
	public void actionPerformed(ActionEvent arg0) {
		// TODO Auto-generated method stub

	}

}

Estou realizando a abertura de um arquivo que contém aproximadamente 2.000 linha será que o tamanho tem algo a ver?

Agradeço a todos pela ajuda..

Trajano

Ironlynx

conectionsp,
olha o que vc tá fazendo:

JPanel p1 = new JPanel();   
        p1.setLayout(new BorderLayout());   
        try {   
            abrirFile();   
        } catch (java.io.IOException erro) {   
            JOptionPane.showMessageDialog(null, "Erro na abertura do Arquivo!",   
                    "Erro", JOptionPane.ERROR_MESSAGE);   
        }   
        p1.add(new JScrollPane(ta1));   
  
        getContentPane().add(p1);

Adicione ao Pane Antes de qualquer evento!!!A montagem da estrutura da GUI TEM que vir antes!Ou seja, faça algo do tipo:

JPanel p1 = new JPanel(); p1.setLayout(new BorderLayout()); p1.add(new JScrollPane(ta1)); getContentPane().add(p1); try { abrirFile(); } catch (java.io.IOException erro) { JOptionPane.showMessageDialog(null, "Erro na abertura do Arquivo!", "Erro", JOptionPane.ERROR_MESSAGE); }
Sacou o p1.add e o add ao JFrame antes de disparar esse evento.Se a tela mal foi montada, como vc quer adicionar algo á ela? :wink:

C

Realmente tem toda, razão.
Agradeço

Criado 14 de novembro de 2007
Ultima resposta 16 de nov. de 2007
Respostas 8
Participantes 4