在Java中创建Tab键顺序的最简单方法?

时间:2013-07-02 13:31:32

标签: java user-interface focus traversal

我正在将一个非常简单的GUI程序从VB6转换为Java。我将使用的一些组件(ProgressBar,Label,Buttons等)必须具有特定的Tab键顺序。毋庸置疑,在VB6中分配特定的Tab键顺序要简单得多(但我不会指向任何地方)。

我意识到Oracle有关于如何执行此操作的文档here,但我只是希望有一种更简单的方法来解决上述问题,而无需像上面的示例那样进行编程。

由于

编辑 - 以下是我正在谈论的上述链接中程序的具体部分:

    Vector<Component> order = new Vector<Component>(7);
    order.add(tf1);
    order.add(tf2);
    order.add(tf3);
    order.add(tf4);
    order.add(tf5);
    order.add(tf6);
    order.add(table);
    newPolicy = new MyOwnFocusTraversalPolicy(order);

...

public void actionPerformed(ActionEvent e) {
    if ("toggle".equals(e.getActionCommand())) {
        frame.setFocusTraversalPolicy(togglePolicy.isSelected() ?
                newPolicy : null);
    }
}

...

public static class MyOwnFocusTraversalPolicy
              extends FocusTraversalPolicy
{
    Vector<Component> order;

    public MyOwnFocusTraversalPolicy(Vector<Component> order) {
        this.order = new Vector<Component>(order.size());
        this.order.addAll(order);
    }
    public Component getComponentAfter(Container focusCycleRoot,
                                       Component aComponent)
    {
        int idx = (order.indexOf(aComponent) + 1) % order.size();
        return order.get(idx);
    }

    public Component getComponentBefore(Container focusCycleRoot,
                                        Component aComponent)
    {
        int idx = order.indexOf(aComponent) - 1;
        if (idx < 0) {
            idx = order.size() - 1;
        }
        return order.get(idx);
    }

    public Component getDefaultComponent(Container focusCycleRoot) {
        return order.get(0);
    }

    public Component getLastComponent(Container focusCycleRoot) {
        return order.lastElement();
    }

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

0 个答案:

没有答案