Olá amigos, estou com um probleminha e não sei se é possivel uma solução.
Tenho 2 classes, uma interface gráfica com um botão “Liga” e outra que quando chega numa hora programada é “true”, mas é o seguinte, quando chegar na hora programada quero que pressione o botão “Liga” da outra classe como se o usuario tivesse pressionado.
Porque, quando eu pressiono o botão “Liga” dispara varios eventos e o botão fica inativo por alguns segundos.
Bom, se eu entendi bem, vc tem algo que fica monitorando tempo, quando algo chega a hora de ocorrer vc quer que seja automaticamente pressionado um botao de outra classe, pois toda a sua programacao esta no botao…
Etapa 1
Tudo o que estiver no evento do botao vc coloca em um metodo nessa mesma classe, o pressionar do botao chama o metodo.
Etapa2
A outra classe quando necessitar fazer o evento do botao, chama o mesmo metodo da classe que contem o botao. Voce pode colocar no inicio do metodo para deixar o botao enabled(false) e no final do botao um enabled(true) para travar o botao enquanto o metodo roda…
Espero ter ajudado…
Sabotage171
Cara valeu obrigado entendi o que voce passou vou fazer isso, mas é o seguinte, quando o usuario preciona o botão o botão fica inativo e ocorre uma contagem regreciva no setText do botão, não sei como disparar de outra classe essa contagem regreciva do botão. se eu enviar um setText com contagem de outra classe não da certo, porque eu instancio um novo objeto da interface.
Por isso que eu acho ideal disparar o action do botão.
Vou continuar tentando…
Valeu um Abraço.
RenataFA
Olha, tá meio esquisito isso ai… mas enfim, se o que vc quer é clicar no tal botão, lá vai:
gqferreira
Dê uma olhada nesse exemplo:
packageteste;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;publicclassFrameextendsjavax.swing.JFrame{privateJButtonbtDisparar;publicstaticvoidmain(String[]args){newFrame().setVisible(true);}publicFrame(){this.setLayout(null);{this.setDefaultCloseOperation(EXIT_ON_CLOSE);btDisparar=newJButton();getContentPane().add(btDisparar);btDisparar.setText("Disparar");/** * Vou chamar o precesso que fica rondando... */newProcesso().processoCorrente(this);btDisparar.setBounds(148,181,199,89);btDisparar.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventevt){acaoBotao();}});}setSize(500,500);}publicvoidacaoBotao(){Runnablerunnable=newRunnable(){publicvoidrun(){/** * Deixo o botao desativado */btDisparar.setEnabled(false);/** * Fico mudando o label dele... */for(inti=0;i<3;i++){btDisparar.setText("Disparando "+(i+1)+"...");repaint();try{Thread.sleep(1000);}catch(InterruptedExceptione){// TODO Auto-generated catch blocke.printStackTrace();}}/** * Dou uma chaqualada no botao e depois deixo como estava antes */btDisparar.setEnabled(true);btDisparar.setText("Disparar");btDisparar.setBounds(10,10,getWidth()-35,getHeight()-45);try{Thread.sleep(600);}catch(InterruptedExceptione){// TODO Auto-generated catch blocke.printStackTrace();}btDisparar.setBounds(148,181,199,89);}};Threadthread=newThread(runnable);thread.start();}}
packageteste;publicclassProcesso{publicvoidprocessoCorrente(finalFrameframe){Runnablerunnable=newRunnable(){publicvoidrun(){while(true){/** * Vamos enrolar dez segundos para depois pedir a execucao do metodo */try{//20 SEGUNDOSThread.sleep(20000);}catch(InterruptedExceptione){// TODO Auto-generated catch blocke.printStackTrace();}/** * Agora... */frame.acaoBotao();}}};Threadthread=newThread(runnable);thread.start();}}
Acho que isso soluciona o seu problema.
Sabotage171
Ae Renata e gqFerreira Obrigado.
Solucionei de outra forma coloquei tudo na mesma classe ficou gigante mas funfou.
Abraço aos dois.
javaJoni
Olá amigo Sabotage171.
Tem também outra forma de vc fazer que pra mim é bem mais simples e, como vc mesmo falou, deixa a classe não tão “gigante”.
É só vc definir o botao na sua interface gráfica como public static, ficando assim na chamada:
Dessa forma o botão é clicado automaticamente sem a interferencia do usuario.