Problema com JButton!

2 respostas
sdinis

Boas… Cá estou novamente a chatear :slight_smile: Ora bem, o problema agora é o seguinte, tenho um JButton num JMenuBar e no ActionListener desse botao chamo uma funcao que se encontra dentro da JFrame, essa funcao por sua vez, cria um JPanel e coloca-o na JFrame…
Se eu chamar a funcao directamente da JFrame, ela corre perfeitamente, mas chamando-a do ActionListener, quando carrego no botao, ele simplesmente n corre, mas faz a ultima iteracao de um for que se encontra dentro da funcao… ou seja ele faz tudo, mas n apresenta nada na JFrame, alias nem sei se ta a fazer bem ou n, pelo menos quando a chamo de dentro ela corre bem, alias, mmo como eu quero!!!

O listener

public void actionPerformed (ActionEvent e){
    if (e.getSource().equals(botao_inicia))
        iniciaGrafSim();
    }

O metodo na JFrame

public void iniciaGrafSim ()
       {

           Vector sel_pdas = new Vector(); 
           if (lista.getSelectedValue() != null)
               for (int i=0; i< lista.getSelectedValues().length ; i++)
               {
                   sel_pdas.add(lista.getSelectedValues()[i]);
               }
            else
           {
               sel_pdas = sim.getPdas();
           }
           
            d = new DesenhaMundo(sel_pdas); //Isto e o tal JPanel
            scroll_image = new JScrollPane(d); //coloco num Scroll
            pane.add(scroll_image,"Center");   //coloco no pane que e o Content da JFrame
           
            //Simula o mundo n vezes
//Aqui vai fazer varios redesenhos no JPanel com o uso duma BufferedImage
            for (int i=0; i<cfg.NUM_HORAS*(60/cfg.PASSO_HORARIO); i++)
            {
                d.setRelogio(r);
                r.avancaRelogio();
                d.repaint();
                setVisible(true);

          //Pausa entre redesenhos

           if(slider.getValue()==-500)
           {
               while(slider.getValue()==-500);
           }
           else
           {
                int start = (int) System.currentTimeMillis();
                while(((int) System.currentTimeMillis()) < start + 500);
           }
           r.reset();
    }
}

Nao coloco o metodo do JPanel pq esta a funcionar perfeitamente, visto que quando chamo este metodo IniciaGrafSim() directamente da JFrame ele corre perfeitamente.

Obrigadao a todos, desde já!!!

2 Respostas

dsfextreme
O listener
Code:

  public void actionPerformed (ActionEvent e){
     if (e.getSource().equals(botao_inicia))
         iniciaGrafSim();
     }

Pq vc não usa o e.getActionCommand().equals('seuListener') ?

Tenta e depois me fala !

Um Abraço.

sdinis

brigadão, mas investiguei e achei melhor usar threads, para ir desenhando, e resultou, ou seja quando carrego no botao, é iniciada uma thread que chama a funcao, e assim correu tudo bem, pelos visto o problema e q o botao ficava a espera q a funcao acabasse…

Mas agora tenho outro prob q é o facto de querer parar a simulacao, ou seja, parar a thread, e queria fazer isso a partir da Frame principal, mas sempre que tento com wait e notify ele diz q n sou owner logo n deixa… Queria tentar resolver isto…

Mas fica aqui o código da threas que meti no listener do botao:

public void actionPerformed (ActionEvent e){

    if (e.getSource().equals(botao_inicia))
    {
        try{
         d_thread = new Thread() {
            public void run(){
                botao_inicia.setEnabled(false);
                if (text_scroll != null)
                    pane.remove(text_scroll);
                iniciaGrafSim();
                r.reset();
                botao_inicia.setEnabled(true);
               
            }
        };
            d_thread.start();

        }
        catch(Exception e1){

        }
    }

E eu queria fazer um wait() a esta thread atraves de um slider que tenho, ou seja, se o slider estiver no minimo, fazia pausa, se aumentasse saia da pausa.

Eu estou fazendo tambem pausas entre os redesenhos, com o valor do slider:

Thread.currrentThread.sleep(slider.getValue);

e isto funciona, mas n deve tar parando a thread do desenho mas sim a thread toda, n sei!!! porque aki n da erro…

Se conseguir perceber e dar uma ajudinha era otimo, pois isto e um projeto para terca-feira e tou ficando cheio :slight_smile:

Obrigado pelo outro concelho na mma… Brigadão sério, valeu!!

Criado 18 de maio de 2006
Ultima resposta 19 de mai. de 2006
Respostas 2
Participantes 2