Olá.
Eu peguei pra estudar um pouco de Joystick. Achei essa API JInput: http://java.net/projects/jinput/ , e logo depois esse site: http://fivedots.coe.psu.ac.th/~ad/jg2/ch11/index.html .
Li, fucei os exemplos e consegui fazer um programinha básico em Swing que identifica e mostra qual o botão foi apertado e tudo mais.
Acontece o seguinte. Eu quero interfacear o Joystick com um programa que eu tenho pro Mestrado que controla um braço robótico. Ele envia, atualmente, comandos seriais. O Robô leva um tempo pra executar o comando (dependendo de quanto você pediu pra ele andar) E eu fico lendo a porta esperando essa resposta. Até aí tudo bem.
O Problema é que na implementação do Joystick, os botões são reconhecidos através de um actionListener, que é adicinado em um javax.swing.Timer, com delay de 40 milisegundos. Ou seja, de 40 em 40 milisegundos ele disparar um evento (ActionPerformed) onde eu verifico se algum botão/direcional está sendo apertado.
O Problema é que se eu atribuir esse botão à um comando do robô ele vai disparar repetidamente e o robô não vai funcionar como esperado.
A pergunta é, como eu posso fazer isso? Olhando a documentação da API, o único Listerner que ele tem só verifica quando o Joystick foi plugado/desplugado;
O ideal é que eu pudesse fazer com que o Joystick disparasse um evento ao perceber um botão.
Segue o código atual:
private void startPolling(){
ActionListener pollPerformer = new ActionListener() {
public void actionPerformed(ActionEvent e)
{
//Faz algumas rotinas verificando o estado dos botões
}
};
pollTimer = new Timer(DELAY, pollPerformer);
pollTimer.start();
}