PDA

View Full Version : [SWING] funzione "build automatically"


dierre
23-06-2011, 16:39
Nel mio editor per la tesi mi manca l'implementazione della segnalazione errori.
La mia idea era di costruire qualcosa di simile al build automatically di eclipse.

Cosa dovrei usare? Uno SwingWorker? Io in pratica volevo praticamente avviare una specie di thread che dopo un secondo dalla release di un tasto facesse il controllo.
Durante il rilascio del tasto però, se lo SwingWorker/Thread è attivo, volevo resettare il timer perché chiaramente bisogna aspettare che il programmatore sia a riposo e non stia scrivendo.

Che ne dite? E' una buona idea?

PGI-Bis
23-06-2011, 17:22
Non so se sia una buona idea ma so che funziona: usi un javax.swing.Timer per gestire l'avvio del thread in background. Dai al timer un periodo di avvio di x millisecondi e per ogni evento di interazione che deve impedire l'esecuzione del thread in background invochi timer.restart(). In pratica hai:

timer = new javax.swing.Timer(1000, new ActionListener ... {
fai partire il thread in background
}
...keyListener o document listener (meglio il document)
insertString/update/remove -> timer.restart();

dierre
23-06-2011, 19:40
Non so se sia una buona idea ma so che funziona: usi un javax.swing.Timer per gestire l'avvio del thread in background. Dai al timer un periodo di avvio di x millisecondi e per ogni evento di interazione che deve impedire l'esecuzione del thread in background invochi timer.restart(). In pratica hai:

timer = new javax.swing.Timer(1000, new ActionListener ... {
fai partire il thread in background
}
...keyListener o document listener (meglio il document)
insertString/update/remove -> timer.restart();

Ah quindi posso mettere il listener sul documento modificato? Mica lo sapevo.

dierre
23-06-2011, 20:45
C'è un problema. O forse non mi è chiaro il funzionamento del Document Listener. Io quando faccio il restart, effettivamente funziona, solo che poi rimane in loop ogni secondo. C'è un modo per stoppare il timer una volta finita l'operazione?

edit:

timer = new javax.swing.Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
System.out.println("ciao");
timer.stop();
}
});

funzia perfettamente.