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.
Desde já Agradeço.
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…
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.
Olha, tá meio esquisito isso ai… mas enfim, se o que vc quer é clicar no tal botão, lá vai:
Dê uma olhada nesse exemplo:
[code]package teste;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
public class Frame extends javax.swing.JFrame {
private JButton btDisparar;
public static void main(String[] args) {
new Frame().setVisible(true);
}
public Frame(){
this.setLayout(null);
{
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
btDisparar = new JButton();
getContentPane().add(btDisparar);
btDisparar.setText("Disparar");
/**
* Vou chamar o precesso que fica rondando...
*/
new Processo().processoCorrente(this);
btDisparar.setBounds(148, 181, 199, 89);
btDisparar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
acaoBotao();
}
});
}
setSize(500,500);
}
public void acaoBotao(){
Runnable runnable = new Runnable() {
public void run() {
/**
* Deixo o botao desativado
*/
btDisparar.setEnabled(false);
/**
* Fico mudando o label dele...
*/
for (int i = 0;i<3;i++){
btDisparar.setText("Disparando "+(i+1)+"...");
repaint();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.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 (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
btDisparar.setBounds(148, 181, 199, 89);
}
};
Thread thread = new Thread(runnable);
thread.start();
}
}
[/code]
[code]package teste;
public class Processo {
public void processoCorrente(final Frame frame){
Runnable runnable = new Runnable() {
public void run() {
while(true){
/**
* Vamos enrolar dez segundos para depois pedir a execucao do metodo
*/
try {
//20 SEGUNDOS
Thread.sleep(20000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**
* Agora...
*/
frame.acaoBotao();
}
}
};
Thread thread = new Thread(runnable);
thread.start();
}
}
[/code]
Acho que isso soluciona o seu problema.
Ae Renata e gqFerreira Obrigado.
Solucionei de outra forma coloquei tudo na mesma classe ficou gigante mas funfou.
Abraço aos dois.
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.
Abraço.
Espero ter ajudado.