当前位置: 首页 > 面试题库 >

使用Tab键从JTextArea移动焦点

曾沛
2023-03-14
问题内容

如前所述,我想更改内的默认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.
 * <br/>
 * Here s how to use this class to override the "component's default"
 * behavior:
 * <pre>
 * JTextArea  area  = new JTextArea(..);
 * <b>TransferFocus.patch( area );</b>
 * </pre>
 * 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) {
        Set<KeyStroke> 
        strokes = new HashSet<KeyStroke>(Arrays.asList(KeyStroke.getKeyStroke("pressed TAB")));
        c.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, strokes);
        strokes = new HashSet<KeyStroke>(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);

这用于问题“
我如何修改标签中的Tab键的行为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(); 可能是您错过了使其适合您的情况的原因。



 类似资料:
  • 本文向大家介绍WinForm中变Enter键为Tab键实现焦点转移的方法,包括了WinForm中变Enter键为Tab键实现焦点转移的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了WinForm中变Enter键为Tab键实现焦点转移的方法,在进行C#应用程序开发时有一定的实用价值。分享给大家供大家参考。 具体实现代码如下: 希望本文所述变Enter键为Tab键的方法对大家C#程序设计

  • 当页面加载Javascript事件时,我试图聚焦一个简单的输入文本,我的目标是聚焦并打开移动浏览器上的虚拟键盘,但我没有成功。 我的代码看起来很简单,比如: 我也试过jQuery... 在android上,输入得到了关注,但在iPhone上却没有。在这两种情况下,我都不会在页面加载时使用键盘。我不知道我还得做什么。

  • 我有一个GUI,左侧有一列按钮,右侧有文本输入框,页脚有一些通用GUI按钮(新建/删除/保存/退出)。左侧的按钮分别向右侧的文本输入小部件提供一组单词。我希望能够在文本输入小部件中使用control tab或control shift tab,并将焦点返回到输入文本输入小部件的按钮。我在谷歌上搜索过,也做过实验,但在使用tab键组合后,我找不到一种方法来强制聚焦某个特定的按钮。 文本选项卡和填充文

  • 问题内容: 我正在Java Swing中创建一个表单,其中一个字段是。当我在所有其他字段上使用键时,它将焦点移至下一个小部件,但在中,它将在文本中插入制表符(水平空格)。 如何修改此行为? 问题答案:

  • 我正在用Java编程一个聊天客户机,在那里我希望有一个单独的JDialog用于所有打开的聊天。所以我决定使用一个JTabbedPane,其中一个选项卡代表一个单独的聊天。 我在每个选项卡中都放了一个JPanel,它只包含一个用于消息历史记录的JTextPane和一个用户输入消息的JTextArea。 为了更好的可用性,我实现了一个特性,当 打开新的ChatTab 用户在chattab之间进行更改(

  • 我有一个内部滚动条的div组件,我想防止向上/向下箭头键在元素聚焦时滚动(鼠标单击元素),因为它们用于其他事件(例如缩放)。 我找到的唯一解决方案是将事件侦听器附加到文档,但是,它禁用所有默认的箭头键事件,例如在输入字段中移动光标。 以下是一个示例(在React中):https://codesandbox.io/s/rsc-live-example-fze6z 如何复制: 用鼠标点击内部div(有