在Java中,是否有可能检测到当某人在JTextField中输入时按下Enter键?而不必创建一个按钮并将其设置为默认按钮。
在Java中,是否有可能检测到当某人在JTextField中输入时按下Enter键?而不必创建一个按钮并将其设置为默认按钮。
JTextField
的设计与 JButton
相似,可以使用 ActionListener
。请见 JTextField
的 addActionListener()
方法。
例如:
Action action = new AbstractAction()
{
@Override
public void actionPerformed(ActionEvent e)
{
System.out.println("some action");
}
};
JTextField textField = new JTextField(10);
textField.addActionListener( action );
现在当使用 Enter 键时,事件会被触发。
另外一个好处是,即使您不想将按钮设置为默认按钮,您也可以与按钮共享侦听器。
JButton button = new JButton("Do Something");
button.addActionListener( action );
请注意,此示例使用一个实现了ActionListener
接口的Action
类,因为Action
是一个拥有额外功能的新API。例如,您可以禁用Action
,这将禁用文本字段和按钮的事件。
JTextField function=new JTextField(8);
function.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//statements!!!
}});
你所需要做的就是像上面那样对JTextField添加addActionListener!当你按下Enter键时,该操作将会在语句中执行你想要的操作!
添加一个KeyPressed
事件。
private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {
if(evt.getKeyCode() == KeyEvent.VK_ENTER) {
// Enter was pressed. Your code goes here.
}
}
KeyListeners(键盘监听器)
存在许多缺陷,这些缺陷往往被KeyBindings(键绑定)
更好地解决,比如与焦点相关的问题、复制/粘贴相关的问题等等。因此,在处理像OP所询问的这种琐碎任务时应避免使用KeyListeners
。 - nIcE cOw你想做类似这样的事情吗?
JTextField mTextField = new JTextField();
mTextField.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
// something like...
//mTextField.getText();
// or...
//mButton.doClick();
}
}
});
其他答案(包括被采纳的)都很好,但如果您已经使用Java8,您可以按照以下方式进行操作(更短、更新的方式):
textField.addActionListener(
ae -> {
//dostuff
}
);
ActionListener
来响应捕获Enter键。然而,我的方法利用了Java 8引入的函数概念。ActionListener l = ae -> {
//do stuff
}
button.addActionListener(l);
textField.addActionListener(l);
首先通过以下方式在JButton或JTextField上添加操作命令:
JButton.setActionCommand("name of command");
JTextField.setActionCommand("name of command");
然后将ActionListener添加到JTextField和JButton。
JButton.addActionListener(listener);
JTextField.addActionListener(listener);
接下来,在你的ActionListener实现中编写
@Override
public void actionPerformed(ActionEvent e)
{
String actionCommand = e.getActionCommand();
if(actionCommand.equals("Your actionCommand for JButton") || actionCommand.equals("Your actionCommand for press Enter"))
{
//Do something
}
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
//perform action
}
}
//put this after initComponents();
textField.addActionListener(button.getActionListeners()[0]);
这是因为一个按钮可以有很多操作,但通常只有一个(ActionPerformed)。
只需使用此代码:
SwingUtilities.getRootPane(myButton).setDefaultButton(myButton);
public void keyReleased(KeyEvent e)
{
int key=e.getKeyCode();
if(e.getSource()==textField)
{
if(key==KeyEvent.VK_ENTER)
{
Toolkit.getDefaultToolkit().beep();
textField_1.requestFocusInWindow();
}
}
在JTextField
中编写“Enter键按下”的逻辑时,最好将逻辑放在keyReleased()
块内,而不是keyTyped()
和keyPressed()
。
textField.addActionListener()
方法中调用button.doClick();
,而不是将该操作添加到两个方法中。 - Mohammad Kholghi