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).
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
conectionsp
O arquivo e apresentado em um JTextArea.
T
thingol
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
conectionsp
Valeu vou testar.
C
conectionsp
Srs,
Tentei fazer o proposto, mas não deu certo;
Abaixo, o código que estou tendo problemas...
importjava.io.*;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassTesteextendsJFrameimplementsActionListener{privatestaticfinallongserialVersionUID=-7054815922961747932L;// Criação das JTextArea,privateJTextAreata1;// Criação String que recebe o conteúdo da leitura do arquivoprivateStringstrh;publicTeste(Stringtitle){super(title);// Definindo o tamanho das JTextArea,ta1=newJTextArea(10,45);ta1.setEditable(false);}privatevoidcriaMostraGUI(){// Definição do comportamento e Layout da janelasetDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);getContentPane().setLayout(newFlowLayout());setLocation(300,100);setVisible(true);setResizable(false);setSize(580,580);JPanelp1=newJPanel();p1.setLayout(newBorderLayout());try{abrirFile();}catch(java.io.IOExceptionerro){JOptionPane.showMessageDialog(null,"Erro na abertura do Arquivo!","Erro",JOptionPane.ERROR_MESSAGE);}p1.add(newJScrollPane(ta1));getContentPane().add(p1);}publicstaticvoidmain(String[]args){Testegui=newTeste("Teste v 1");gui.setUndecorated(true);gui.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);gui.criaMostraGUI();}privatevoidabrirFile()throwsIOException{Stringfile="c:\\1.txt";BufferedReaderbufferedReader=null;try{bufferedReader=newBufferedReader(newFileReader(file));StringBuildersb=newStringBuilder();intc;while((c=bufferedReader.read())!=-1){sb.append((char)c);}strh=(sb.toString());bufferedReader.close();ta1.setText(sb.toString());}catch(java.io.IOExceptionerro){JOptionPane.showMessageDialog(null,"Erro na abertura do Arquivo!","Erro",JOptionPane.ERROR_MESSAGE);}finally{if(bufferedReader!=null){bufferedReader.close();}}}// Tratamento dos eventos do TECLADOpublicvoidteclado_keyTyped(KeyEvente){}@OverridepublicvoidactionPerformed(ActionEventarg0){// 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?