焦点转到下一个组件在JTable中使用TAB(Change focus to next compon

2019-06-27 11:48发布

JTable的默认行为的改变重点,下一个单元格,我想迫使它在按下TAB键将焦点移到下一个组件(如JTextField中)。
我overrided isCellEditable方法DefaultTableModel总是返回false:

public boolean isCellEditable(int rowIndex, int columnIndex) {
    return false;
}

但它仍然不会改变焦点的下一个组件!
我应该怎么做JTable焦点转到下一个组件,而不是下一个单元格?

Answer 1:

如果你真的想这样,你需要更改表动作映射的默认行为。

ActionMap am = table.getActionMap();
am.put("selectPreviousColumnCell", new PreviousFocusHandler());    
am.put("selectNextColumnCell", new NextFocusHandler());    

然后,你需要一对夫妇的行动来处理遍历

public class PreviousFocusHandler extends AbstractAction {
    public void actionPerformed(ActionEvent evt) {
        KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
        manager.focusPreviousComponent();
    }
}

public class NextFocusHandler extends AbstractAction {
    public void actionPerformed(ActionEvent evt) {
        KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
        manager.focusNextComponent();
    }
}

另一种方法是禁用的基本Action ...

ActionMap am = table.getActionMap();
am.get("selectPreviousColumnCell").setEnabled(false);
am.get("selectNextColumnCell").setEnabled(false);

(没有测试)

这种方法的好处是可以启用/禁用的行为,因为你需要它,而无需维护旧的参考Actions



Answer 2:

该倒班/选项卡的密钥组件之间的transfering焦点默认使用。 JTable的明确请求在内部处理的倒班/选项卡(通过提供套不包括那些focusTraversalKeys的)。

按照一般规则( 如果有新疆特色可用的API的任务,用它来代替滚动您自己 ),解决的办法是设置遍历键又含有它们:

Set<AWTKeyStroke> forward = new HashSet<AWTKeyStroke>(
        table.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
forward.add(KeyStroke.getKeyStroke("TAB"));
table.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, forward);
Set<AWTKeyStroke> backward = new HashSet<AWTKeyStroke>(
        table.getFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS));
backward.add(KeyStroke.getKeyStroke("shift TAB"));
table.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, backward);


Answer 3:

  • 默认情况下(实施KeyBindingJTable )大约是下一个单元格和最后一个单元格,首先,

  • 你可以到设置为空值删除键绑定



Answer 4:

要重置为标准键盘绑定(通常TAB和SHIFT + TAB),只需指定nullkeystrokes参数Component.setFocusTraversalKeys

table.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, null);
table.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, null);


文章来源: Change focus to next component in JTable using TAB