Je dois rester concentré sur JTextField. L'application utilise la bibliothèque Swing. J'ai besoin de mettre l'accent sur ce domaine de temps en temps afin d'éviter les erreurs de l'utilisateur qui changeraient de point de vue pour d'autres comonents. Je suppose que j'ai besoin d'utiliser SwingWorker. Définir le focus est une opération sur le composant Swing , il doit donc être appelé dans EDT. Ma question est comment écrire SwingWorker pour faire cela? Je sais que la méthode done() passe les tâches à appeler dans EDT mais j'ai besoin que cette tâche soit invoquée chaque fois que nous passons 2 secondes. La méthode done() est appelée une fois. Alors peut-être que ça va aller comme ça?Comment garder le focus sur JTextField. SwingWorker
public class myWorker extends SwingWorker<Void, Void> {
@Override
protected Void doInBackground() throws Exception {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
//here set focus on JTextField
return null;
}
});
}}
Edit:
I a remarqué que le processus de méthode() qui est une partie de SwingWorker peut être approprié beacuse elle est appelée dans EDT. Je ne suis pas sûr mais cette méthode est probablement invoquée toujours quand j'appelle publish() metod. Alors pourriez-vous me dire si ce code est valide pour faire cette tâche?
private class KeepFocusWorker extends SwingWorker<Void, Void>
{
@Override
protected Void doInBackground() throws Exception
{
while(true)
{
publish();
}
}
@Override
protected void process(List<Void> chunks)
{
codeBar.requestFocusInWindow();
}
}
* "Alors peut-être sth .." * ..Sith? Sud? La paresse? Tapez toutes les lettres des mots plutôt que de faire deviner les gens. –
Focus est un guide pour l'utilisateur. Plutôt que de spéculer sur une mauvaise solution, expliquez ce que vous voulez accomplir et ce que vous avez essayé. Voir aussi [* Comment utiliser Swing Timers *] (http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html). – trashgod
Ok. J'ai édité mon post pour être plus clair. – user2374573