/ / Drücken Sie die Tabulatortaste, um in der Komponente für die vertikale Achse die nächste Java-Komponente auszuwählen: java, swing, jtextfield, jtextcomponent

Drücken Sie in der Komponente für die vertikale Achse TAB zum nächsten Java - java, swing, jtextfield, jtextcomponent

Ich habe ein Panel-Null-Layout und habe den folgenden Code

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;
}

Wenn ich die TAB-Taste drücke, springt der Cursor zum nächsten horizontalen Textfeld. Wie kann ich es verschieben oder auf das nächste horizontale Textfeld zeigen?

Antworten:

2 für die Antwort № 1

Wenn meine Interpretation der Frage richtig ist, möchten Sie den Fokusdurchlauf anpassen. Sie können Ihre eigene Richtlinie für den Fokusdurchlauf angeben, um die Standardreihenfolge für den Fokuszyklus zu überschreiben. Schaut mal rein Anpassen von Focus Traversal Thema in So verwenden Sie das Focus-Subsystem Tutorial. Es gibt ein Beispiel, das veranschaulicht, wie eine benutzerdefinierte Richtlinie installiert wird.

Nebenbei bemerkt, wie bereits erwähnt,Die absolute Positionierung (Null-Layout) hat viele Nachteile und sollte mit besonderer Vorsicht betrachtet werden. Nulllayouts sollten / können in den meisten Fällen vermieden werden. Wie angegeben in Verzichten auf einen Layout-Manager (absolute Positionierung):

Es ist zwar möglich, auf ein Layout zu verzichtenManager sollten Sie verwenden wenn möglich, einen Layout-Manager. Ein Layout-Manager macht es einfacher an Aussehen und Verhalten abhängige Komponenten aussehen, um verschiedene Schriftgrößen, die sich ändernde Größe eines Containers und andere locales. Layout-Manager können auch problemlos von anderen wiederverwendet werden Container sowie andere Programme.

Sieh dir das an Ein visueller Leitfaden für Layout-Manager um sich mit den Swing-Layouts vertraut zu machen.


0 für die Antwort № 2

Als Beispiel - mit dem Anpassen von Focus Traversal Thema in So verwenden Sie das Focus-Subsystem Tutorial, das bereits von erwähnt wurde 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);
}

Welches benutzt das CustomFocusTraversalPolicy Klasse:

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);
}
}