栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

当我对JPanel使用键绑定时,为什么无法获得KeyEvent.VK_TAB

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

当我对JPanel使用键绑定时,为什么无法获得KeyEvent.VK_TAB

引自《如何使用Focus子系统》(Java™教程>使用JFC /
Swing创建GUI>使用其他Swing功能)
(由@
alex2410建议(链接到@camickr帖子)和@mKorbel建议):

在大多数外观模型中,使用Tab和Shift-Tab键浏览组件。这些键是默认的焦点遍历键,可以通过编程更改。

选项卡将焦点向前移动。Shift-
Tab键可将焦点向后移动。Tab键将焦点通过按钮移动到文本区域。附加的制表符会将光标移动到文本区域内,但不能移出文本区域,因为在文本区域内,Tab不是焦点遍历键。但是,Control-
Tab键可将焦点移出文本区域并移至第一个文本字段。同样,Control-Shift-Tab键可将焦点移出文本区域并移至上一个组件。

按惯例,Control键用于将焦点移出以特殊方式处理Tab的任何组件,例如JTable。
您刚刚收到了有关焦点体系结构的简短介绍。如果您需要更多详细信息,请参阅Focus
Subsystem的规范。

因此,如果要使Tab键绑定动作在面板中起作用,则需要从面板中删除Tab键焦点导航。

import java.awt.*;import java.awt.event.*;import java.util.*;import javax.swing.*;//http://stackoverflow.com/q/24800417/714968public class KeyBindingTest3 {  public static void main(String[] args) {    EventQueue.invokeLater(new Runnable() {      @Override public void run() {        createAndShowGUI();      }    });  }  public static void createAndShowGUI() {    Jframe f = new Jframe("KeyBinding Test");    f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);    f.getContentPane().add(new MainPanel());    f.setSize(320, 240);    f.setLocationRelativeTo(null);    f.setVisible(true);  }}class MainPanel extends JPanel {  public MainPanel() {    super();    //@see JTable constructor    Set<KeyStroke> forwardKeys = new HashSet<KeyStroke>(1);    forwardKeys.add(KeyStroke.getKeyStroke(        KeyEvent.VK_TAB, InputEvent.CTRL_MASK));    setFocusTraversalKeys(        KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, forwardKeys);    Set<KeyStroke> backwardKeys = new HashSet<KeyStroke>(1);    backwardKeys.add(KeyStroke.getKeyStroke(        KeyEvent.VK_TAB, InputEvent.SHIFT_MASK | InputEvent.CTRL_MASK));    setFocusTraversalKeys(        KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, backwardKeys);    setPreferredSize(new Dimension(200, 200));    String aString = "aStr";    getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_A, 0), aString);    getActionMap().put(aString, new AbstractAction() {      @Override public void actionPerformed(ActionEvent e) {        System.out.println("a is typed");      }    });    String tabString = "TAB";    getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(      KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0), tabString);    getActionMap().put(tabString, new AbstractAction() {      @Override public void actionPerformed(ActionEvent e) {        System.out.println("tab is typed");      }    });  }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/516077.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号