如上所述,我想更改a中的默认TAB行为JTextArea
(以便它像一个JTextField
或类似的组件)
这是事件动作
private void diagInputKeyPressed(java.awt.event.KeyEvent evt) { if(evt.KEY_PRESSED == java.awt.event.KeyEvent.VK_TAB) { actionInput.transferFocus(); } }
这是听众
diagInput.addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(java.awt.event.KeyEvent evt) { diagInputKeyPressed(evt); } });
我也尝试过evt.KEY_TYPED,没有任何快乐.
有任何想法吗?
快速编辑:我也试过requestFocus()
代替transferFocus()
根据这个类:
/** * Some components treat tabulator (TAB key) in their own way. * Sometimes the tabulator is supposed to simply transfer the focus * to the next focusable component. *
* Here s how to use this class to override the "component's default" * behavior: ** JTextArea area = new JTextArea(..); * TransferFocus.patch( area ); ** This should do the trick. * This time the KeyStrokes are used. * More elegant solution than TabTransfersFocus(). * * @author kaimu * @since 2006-05-14 * @version 1.0 */ public class TransferFocus { /** * Patch the behaviour of a component. * TAB transfers focus to the next focusable component, * SHIFT+TAB transfers focus to the previous focusable component. * * @param c The component to be patched. */ public static void patch(Component c) { Setstrokes = new HashSet (Arrays.asList(KeyStroke.getKeyStroke("pressed TAB"))); c.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, strokes); strokes = new HashSet (Arrays.asList(KeyStroke.getKeyStroke("shift pressed TAB"))); c.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, strokes); } }
需要注意的是patch()
还可以更短,根据约书亚·戈德堡的意见,因为我们的目标是要回默认行为,通过覆盖JTextArea
:
component.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERS??AL_KEYS, null); component.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERS??AL_KEYS, null);
这用于问题" 我如何修改标签键的行为JTextArea
? "
在以前的实现确实是一个参与Listener
,和一个transferFocus()
:
/** * Override the behaviour so that TAB key transfers the focus * to the next focusable component. */ @Override public void keyPressed(KeyEvent e) { if(e.getKeyCode() == KeyEvent.VK_TAB) { System.out.println(e.getModifiers()); if(e.getModifiers() > 0) a.transferFocusBackward(); else a.transferFocus(); e.consume(); } }
e.consume();
可能是你错过了让它在你的情况下工作.