【问题标题】:Java - JTextField - Call function when user press "space bar"Java - JTextField - 当用户按下“空格键”时调用函数
【发布时间】:2014-08-22 12:51:41
【问题描述】:

我进行了一些搜索,但没有找到当用户按下“空格键”键时如何调用函数,我有这个代码:

edtCodigos.addKeyListener(new KeyAdapter() {
    public void keyPressed(KeyEvent e) {
        if (e.getKeyCode() == KeyEvent.VK_SPACE){
            callFunction();
        }
    }
)};

注意:我想避免“空格”,键将用于调用函数

任何想法我该怎么做或代码示例将不胜感激;)

【问题讨论】:

  • 永远不要对 JTextComponents 使用 KeyListener,在这种情况下使用 DocumentFilter,这里有大量代码示例
  • 为什么?函数做什么?您是否尝试进行过滤或验证?只是看起来很奇怪,你的解释。如果您想结束输入并处理字段数据,更常见的方法是使用 ActionListener 并让 Enter 键开始该过程。请详细说明一下,这样就不会变成xy problem
  • 这是一个可用性问题..用户习惯于键入“空格键”来完成类似收银台付款的操作..

标签: java swing jtextfield keylistener


【解决方案1】:

“用户习惯于键入“空格键”来完成类似收银台付款的操作。”

就个人而言,我只会使用ActionListener,以便 Enter 键触发事件。只是看起来更自然。

import java.awt.event.*;
import javax.swing.*;

public class TestTextField {

    public static void main(String[] args) {
        final JTextField field = new JTextField(15);
        field.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                System.out.println("Enter Pressed: " + field.getText());
            }
        });
        JOptionPane.showMessageDialog(null, field);
    }
}

如果你想使用空格,你可以使用Key Bindings绑定字段的键

import java.awt.event.ActionEvent;
import javax.swing.*;

public class TestTextField {

    public static void main(String[] args) {
        final JTextField field = new JTextField(15);
        InputMap imap = field.getInputMap(JComponent.WHEN_FOCUSED);
        imap.put(KeyStroke.getKeyStroke("SPACE"), "spaceAction");
        ActionMap amap = field.getActionMap();
        amap.put("spaceAction", new AbstractAction(){
            public void actionPerformed(ActionEvent e) {
                System.out.println("Space Pressed: " + field.getText());
            }
        });
        JOptionPane.showMessageDialog(null, field);
    }
}

您甚至可以使用DocumentListener 来监听文本字段基础文档中的更改,并检查输入的最后一个字符是否为空格(但这似乎有点多 - 只是一些信息你来学习文本组件的工作原理:-)

选择你的口味。我喜欢第一个。

【讨论】:

  • 感谢您的回答!对此,我真的非常感激!其实我也更喜欢第一个答案......但你知道,客户......你不能反对他们......“客户永远是对的......”;)
猜你喜欢
  • 2011-06-22
  • 2012-11-05
  • 1970-01-01
  • 2020-11-16
  • 1970-01-01
  • 1970-01-01
  • 2020-03-09
  • 2015-08-22
  • 2014-05-30
相关资源
最近更新 更多