我正在将一个非常简单的 GUI 程序从 VB6 翻译成 Java。我将使用的一些组件(ProgressBar、Label、Buttons 等)必须具有特定的 Tab 键顺序。不用说,在 VB6 中分配特定的 Tab 键顺序要简单得多(但我没有在任何地方指手画脚)。
我意识到 Oracle 有关于如何在此处执行此操作的文档,但我只是希望有一种更简单的方法来解决上述问题,而不必像上面的示例那样编写代码。
谢谢
编辑 - 以下是我正在谈论的上面链接中程序的特定部分:
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);
}
}