【问题标题】:How to replace a Jbutton with Escape key in java?如何在java中用Escape键替换Jbutton?
【发布时间】:2023-04-03 20:56:01
【问题描述】:

在我的程序中,我有一个 Jbutton(名为“Clear”),用于清除 GUI 中的多个文本字段。我想用 Escape 键替换此按钮,以便按 Escape 键与按该按钮相同。 (我不想在我的程序中使用那个 Jbutton)

【问题讨论】:

标签: java replace jbutton


【解决方案1】:

基本上,您想从使用key bindings 开始。

现在,就我个人而言,我会为您的“清除”按钮附加一个绑定,这样用户就有两个选择……例如……

JButton clear = new JButton("Clear");

InputMap im = clear .getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
ActionMap am = clear .getActionMap();

im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "clear");
am.put("clear", new ClearFieldsAction());

【讨论】:

    【解决方案2】:

    如果要移除按钮并监听孔应用的按键事件,可以创建一个

    EventQueue

    并在

    处注册此 EventQueue

    Toolkit.getDefaultToolkit().getSystemEventQueue().push(INSTANCE_EVENT_QUEUE);

    方法

    protected void dispatchEvent(AWTEvent e)

    将获得您可以处理的 AWTEvent。 喜欢:

    @Override
    protected void dispatchEvent(AWTEvent e) {
        // handle event and/or
        super.dispatchEvent(e);
    }
    

    你喜欢处理的关键事件

        private void handleAWTEvent(AWTEvent event) {
    
        if (event instanceof KeyEvent) {
            KeyEvent keyEvent = (KeyEvent)event;
    
            if (keyEvent.getID() != KeyEvent.KEY_PRESSED) {
                return;
            }
    
            if (keyEvent.isAltDown() ^ keyEvent.isControlDown() && !keyEvent.isShiftDown()) {
       ...
    

    【讨论】:

      【解决方案3】:

      试试这个,它对我有用

      InputMap im = clear.getRootPane().getInputMap(...
      ActionMap am = clear.getRootPane().getActionMap(...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-16
        • 2019-03-12
        相关资源
        最近更新 更多