/ / Appuyez sur la touche Tabulation pour passer à Java suivant dans le composant Axe vertical - java, swing, jtextfield, jtextcomponent

Appuyez sur TAB pour passer à Java suivant dans le composant Axe vertical - java, swing, jtextfield, jtextcomponent

J'ai une disposition de panneau nulle et le code suivant

int k=130;
int h=10;
for (int i=0; i<22; ++i) {
jTextFieldArray[i] = new JTextField();
jTextFieldArray[i].setBounds(k, h, 120, 25);
String s = Integer.toString(i+1);
jTextFieldArray[i].setText(s);
h+=30;
panel.add(jTextFieldArray[i]);
if (i==10) k=430;
if (i==10) h=10;
}

Lorsque j'appuie sur la touche TAB, le curseur se déplace sur le champ de texte horizontal suivant. Comment puis-je le faire bouger ou pointer vers le prochain champ de texte horizontal

Réponses:

2 pour la réponse № 1

Si mon interprétation de la question est correcte, vous souhaitez personnaliser le parcours de focus. Vous pouvez fournir votre propre stratégie de parcours de focus pour remplacer l'ordre cyclique de focus par défaut. Jeter un coup d'œil à Personnalisation du parcours de focus sujet dans Comment utiliser le sous-système Focus Didacticiel. Il contient un exemple illustrant comment installer une stratégie personnalisée.

Sur une note de côté, comme déjà mentionné dans les commentaires,Le positionnement absolu (disposition nulle) présente de nombreux inconvénients et doit être considéré avec une attention particulière. Les dispositions nulles devraient / peuvent être évitées dans la plupart des cas. Comme indiqué dans Se passer d'un gestionnaire de disposition (positionnement absolu):

Bien qu'il soit possible de se passer d'une mise en pagegestionnaire, vous devriez utiliser un gestionnaire de mise en page si possible. Un gestionnaire de mise en page facilite les choses pour vous adapter aux apparences des composants, en fonction de l'apparence et de la sensation, tailles de police différentes, à la taille changeante du conteneur et à différentes lieux. Les gestionnaires de mise en page peuvent également être facilement réutilisés par d’autres conteneurs, ainsi que d'autres programmes.

Jeter un coup d'œil à Un guide visuel pour les gestionnaires de mise en page se familiariser avec les dispositions Swing.


0 pour la réponse № 2

Par exemple, en utilisant le Personnalisation du parcours de focus sujet dans Comment utiliser le sous-système Focus tutoriel qui a déjà été mentionné par Aqua:

private void tryCustomFocusTraversal() {
final JFrame frame = new JFrame("Stack Overflow: vertical tab order");
frame.setBounds(100, 100, 800, 600);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
final JPanel panel = new JPanel(null);
final JTextField[] jTextFieldArray = new JTextField[22];

int k = 130;
int h = 10;
for (int i = 0; i < jTextFieldArray.length; ++i) {
jTextFieldArray[i] = new JTextField();
jTextFieldArray[i].setBounds(k, h, 120, 25);
String s = Integer.toString(i + 1);
jTextFieldArray[i].setText(s);
h += 30;
panel.add(jTextFieldArray[i]);
if (i == 10) k = 430;
if (i == 10) h = 10;
}

frame.getContentPane().add(panel);
frame.setFocusTraversalPolicy(new CustomFocusTraversalPolicy(Arrays.asList(jTextFieldArray)));
frame.setVisible(true);
}

Qui utilise le CustomFocusTraversalPolicy classe:

import java.awt.Component;
import java.awt.Container;
import java.awt.FocusTraversalPolicy;
import java.util.ArrayList;
import java.util.List;

public class CustomFocusTraversalPolicy extends FocusTraversalPolicy {
private final List<Component> componentOrder = new ArrayList<>();

public CustomFocusTraversalPolicy(final List<Component> componentOrder) {
this.componentOrder.addAll(componentOrder);
}

public Component getComponentAfter(final Container focusCycleRoot, final Component aComponent) {
return componentOrder.get((componentOrder.indexOf(aComponent) + 1) % componentOrder.size());
}

public Component getComponentBefore(final Container focusCycleRoot, final Component aComponent) {
final int currentIndex = componentOrder.indexOf(aComponent);
return componentOrder.get(currentIndex > 0 ? currentIndex - 1 : componentOrder.size() - 1);
}

public Component getFirstComponent(final Container focusCycleRoot) {
return componentOrder.get(0);
}

public Component getLastComponent(final Container focusCycleRoot) {
return componentOrder.get(componentOrder.size() - 1);
}

public Component getDefaultComponent(final Container focusCycleRoot) {
return getFirstComponent(focusCycleRoot);
}
}