Quando tenho fazer a listagem abaixo na JTextArea, o programa somente mostra a lista quando o laco termina. Alguem sabe o que devo fazer para que a listagem seja feita enquanto o for esta executando, ou seja, linha a linha sendo impressa passo a passo na tela ? :roll:
aí amigo, segue um exemplo que funciona, veja se é isto que você precisa !!!
importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JScrollPane;importjavax.swing.JTextArea;publicclassTeste{publicstaticvoidmain(String[]args){JFramef=newTesteFrame();f.setVisible(true);}}classTesteFrameextendsJFrame{privatestaticfinallongserialVersionUID=1L;privateJTextAreaareaTexto=newJTextArea();publicTesteFrame(){setSize(230,290);setDefaultCloseOperation(EXIT_ON_CLOSE);setTitle("Teste Area");setLocationRelativeTo(null);setResizable(false);JScrollPanescrollAreaTexto=newJScrollPane(areaTexto);JButtonbotaoAcao=newJButton("Povoar Lista");getContentPane().setLayout(null);scrollAreaTexto.setBounds(10,10,200,200);areaTexto.setLineWrap(true);botaoAcao.setBounds(10,220,200,25);botaoAcao.addActionListener(newCliqueBotao());getContentPane().add(scrollAreaTexto);getContentPane().add(botaoAcao);}classCliqueBotaoimplementsActionListener{publicvoidactionPerformed(ActionEventarg0){// limpa a areaareaTexto.setText("");for(inti=0;i<2000;i++){areaTexto.append(""+i);}}}}
PePeLeGaL
o problema ainda continua coloque a condicao do laco como abaixo e voce vai ver que o problema nao foi resolvido
for(inti=0; i < 200000; i++) { areaTexto.append(""+i); }
L
lscheid
Entendi, é um valor bastante grande.
Veja as minhas mudanças(linhas 21, 58)
Faça o seu teste novamente…
importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JScrollPane;importjavax.swing.JTextArea;publicclassTeste{publicstaticvoidmain(String[]args){JFramef=newTesteFrame();f.setVisible(true);}}classTesteFrameextendsJFrame{privatestaticfinallongserialVersionUID=1L;privateJTextAreaareaTexto=newJTextArea(20000000,20000000);publicTesteFrame(){setSize(230,290);setDefaultCloseOperation(EXIT_ON_CLOSE);setTitle("Teste Area");setLocationRelativeTo(null);setResizable(false);JScrollPanescrollAreaTexto=newJScrollPane(areaTexto);JButtonbotaoAcao=newJButton("Povoar Lista");getContentPane().setLayout(null);scrollAreaTexto.setBounds(10,10,200,200);areaTexto.setLineWrap(true);botaoAcao.setBounds(10,220,200,25);botaoAcao.addActionListener(newCliqueBotao());getContentPane().add(scrollAreaTexto);getContentPane().add(botaoAcao);}classCliqueBotaoimplementsActionListener{publicvoidactionPerformed(ActionEventarg0){// limpa a areaareaTexto.setText("");intcontDescarga=0;StringBufferbuffer=newStringBuffer();for(longi=0;i<200000;i++){buffer.append(i+"");contDescarga=(contDescarga+1);if(contDescarga>=500){areaTexto.append(buffer.toString());contDescarga=0;buffer.delete(0,buffer.length());}}}}}
PePeLeGaL
nao resolveu o problema
L
lscheid
Então Pepe, aqui para mim mostra os valores, você executou o meu exemplo ? Como ele se comportou ?
Podemos fazer diferente, qual a sua necessidade específica em fazer isso ?
Aguardo.
Abraço,
Lucas
PePeLeGaL
tudo bem ele mostra os valores, mas nao enquanto o laco esta em execucao. Ele somente mostra os valores quando o laco termina. Imagine, por exemplo, o linux, quando vc entra no modo terminal e digita ls ou no windows na tela do dos digita dir, o sistema mostra os valores(dados) sendo listados. Estou tentando fazer algo dessa forma. Quero que o usuario veja o processo de listagem dos dados e nao somente os dados ja listados.
PePeLeGaL
acho que o nome desse processo eh “show live data”
L
lscheid
Entendo Pepe, mas o que acontece é que o valor é muito grande, então fica realmente lento.
Imagine, 200000 dearquivos sendo listados num dir ou ls, é muita coisa não é mesmo ? Dificilmente tu vai ter uma situação deste tipo.
O que tu pode fazer é limitar este valor, esta seria a minha solução.
Por exemplo, se o resultado do “ls” ou “dir” ultrapassar 20000 arquivos, você pede para o usuário ser mais específico na pesquisa.
Exemplo:
ls -tl *.txt
ou
dir *.exe
Entende ?
O que você acha ?
PePeLeGaL
entendo o que voce quis dizer. Realmente fica lento, mas mesmo assim o usuario ve que esta se passando alguma coisa na tela, ou seja, dados sendo mostrados rapidamente. No caso do nosso programa nem isso ta acontecendo.
L
lscheid
Pepe, é estranho pois aqui para mim ele lista mesmo com o tamanho grande…
Não lista somente no fim do FOR, vai listando bem devagar, mas lista, vc aumentou o tamanho da JtextArea(20000000,20000000) ?
Qual é a configuração da máquina que você está rodando ? (processador, memória), isso pode influenciar.
A minha máquina aqui é um Core 2 Quad com 2 GB de RAM…