Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按TAB键可在垂直轴组件中选择下一个Java_Java_Swing_Jtextfield_Jtextcomponent - Fatal编程技术网

按TAB键可在垂直轴组件中选择下一个Java

按TAB键可在垂直轴组件中选择下一个Java,java,swing,jtextfield,jtextcomponent,Java,Swing,Jtextfield,Jtextcomponent,我有一个面板空布局,并有以下代码 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; pa

我有一个面板空布局,并有以下代码

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;
}
intk=130;
int h=10;

对于(int i=0;i如果我对问题的解释正确,您希望自定义焦点遍历。您可以提供自己的焦点遍历策略来覆盖默认的焦点循环顺序。请查看如何使用焦点子系统教程中的主题。它有一个示例说明如何安装自定义策略

另一方面,如评论中所述,绝对定位(零布局)有许多缺点,应特别小心考虑。在大多数情况下,零布局应该/可以避免。如中所述:

虽然可以不使用布局管理器,但应该使用 布局管理器,如果可能的话。布局管理器使它更容易 要调整为外观和感觉相关零部件外观,请执行以下操作: 不同的字体大小、容器不断变化的大小以及 布局管理器也可以被其他应用程序轻松重用 容器以及其他程序

查看以熟悉Swing布局。

作为示例-使用“如何使用焦点子系统”教程中的主题,该主题已由以下人员提及:


Java GUI必须在不同的操作系统、屏幕大小、屏幕分辨率等上工作。因此,它们不利于像素完美的布局。相反,请使用布局管理器,或者使用布局填充和边框。“如何使其移动或指向下一个水平文本字段?”什么?当鼠标指向下一个文本字段时,您希望焦点移动到下一个文本字段,或者..什么?
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);
}
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);
    }
}