Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Focus Applet -> Formulaire avec TAB

1 réponse
Avatar
matthieu
J'ai une page HTML contenant un formulaire avec des champs textes et
une applet avec un composant JComboBox. Je souhaite pouvoir naviguer
entre ces composants avec la touche TAB. Le passage des champs(INPUT
type='text') du formulaire vers l'applet ne me pose pas de problème,
j'utilise le tag TABINDEX. Par contre je n'arrive pas à aller de
l'applet vers les champs du formulaire. J'ai essayé de récupérer
l'événement de la touche TAB avec un KeyListener mais sans succès.
Quelqu'un aurait une proposition à me faire?

Merci d'avance.

1 réponse

Avatar
matthieu
(M) wrote in message news:...
J'ai une page HTML contenant un formulaire avec des champs textes et
une applet avec un composant JComboBox. Je souhaite pouvoir naviguer
entre ces composants avec la touche TAB. Le passage des champs(INPUT
type='text') du formulaire vers l'applet ne me pose pas de problème,
j'utilise le tag TABINDEX. Par contre je n'arrive pas à aller de
l'applet vers les champs du formulaire. J'ai essayé de récupérer
l'événement de la touche TAB avec un KeyListener mais sans succès.
Quelqu'un aurait une proposition à me faire?

Merci d'avance.


En cherchant j'ai fini par trouver une solution:

########
# JAVA #
########

import java.applet.Applet;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JApplet;
import javax.swing.JComponent;
import javax.swing.JTextField;

import netscape.javascript.JSObject;

public class MyApplet extends JApplet {
JTextField inputLine;

public MyApplet() {
inputLine = new JTextField(20);
setHtmlForNextComponent(inputLine);
this.getContentPane().add(inputLine);
}

public void setHtmlForNextComponent(JComponent component) {
// L'appui sur la touche TAB doit transférer le
// focus à un composant de la page html
component.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_TAB) {
transferFocus(MyApplet.this);
}
}
});

component.addFocusListener(new FocusListener() {
public void focusGained(FocusEvent e) {
JComponent comp = (JComponent) e.getSource();
// Desactive la touche tab pour le focus
// pour pouvoir récupérer l'événement au travers
// du KeyListener
comp.setFocusTraversalKeysEnabled(false);
}

public void focusLost(FocusEvent e) {
JComponent comp = (JComponent) e.getSource();
// Desactive la touche tab pour le focus
// pour pouvoir revenir sur le composant
// dans le cycle de focus de la page html
comp.setFocusTraversalKeysEnabled(true);
}
});
}

/**
* Transfère le focus à la page html via l'appel d'une
* fonction javascript
* @param applet L'applet courante
*/
public void transferFocus(Applet applet) {
// JSObject -> dans plugin.jar de la JRE
JSObject window = JSObject.getWindow(applet);
window.eval("focusAfterApplet()");
}
}

########
# HTML #
########

<html>
<head>
<title>Test applet</title>
</head>
<script>
function focusAfterApplet() {
document.form.text1.focus();
}
</script>
<body>
<APPLET
name="applet"
code="MyApplet.class"
width="130"
height="28"
align="baseline"
tabindex="1">
No Java 2 SDK, Standard Edition v 1.4.2 support for APPLET!!
</APPLET>
<form name='form'>
<input type='text' name='text1' value='text1' tabindex=2/><br>
<input type='text' name='text2' value='text2'tabindex=3/>
</form>
</body>
</html>

Le transfert de focus Applet->Formulaire se fait au travers de l'appel
de la fonction javascript focusAfterApplet() lorsque l'événement
d'appui sur la touche TAB a été récupéré dans l'applet.

Le transfert de focus Formulaire->Applet se fait automatiquement grace
à l'attribut "tabindex". Il faut s'assurer que la touche TAB a été
activée sur le composant via la méthode
setFocusTraversalKeysEnabled(true).