是否可以检测到有人Enter在 java 中输入 JTextField 时按下了什么?无需创建按钮并将其设置为默认值。
10 回答
AJTextField
被设计为ActionListener
像 a 一样使用 a JButton
。见addActionListener()
方法JTextField
。
例如:
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 );
请注意,此示例使用Action
,它实现了ActionListener
因为Action
是具有附加功能的较新 API。例如,您可以禁用Action
这将禁用文本字段和按钮的事件。
JTextField function=new JTextField(8);
function.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//statements!!!
}});
您需要做的就是将ActionListener 添加到上面的JTextField 中!在你按下Enter动作后会执行你想要的语句!
为 .添加事件KeyPressed
。
private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {
if(evt.getKeyCode() == KeyEvent.VK_ENTER) {
// Enter was pressed. Your code goes here.
}
}
你想做这样的事情吗?
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-Key 的 做出反应。
但是,我的方法利用了 Java 8 中引入的函数概念。
如果您想对按钮和 JTextField 使用相同的操作,则可以执行以下操作:
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
}
}
如果要在 JTextField 输入中设置默认按钮操作,则必须执行以下操作:
//put this after initComponents();
textField.addActionListener(button.getActionListeners()[0]);
它是 [0] 因为一个按钮可以有很多动作,但通常只有一个(ActionPerformed)。
对于框架中的每个文本字段,调用 addKeyListener 方法。然后实现并覆盖 keyPressed 方法,正如其他人所指出的那样。现在,您可以从框架中的任何字段按 Enter 键来激活您的操作。
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
//perform action
}
}
public void keyReleased(KeyEvent e)
{
int key=e.getKeyCode();
if(e.getSource()==textField)
{
if(key==KeyEvent.VK_ENTER)
{
Toolkit.getDefaultToolkit().beep();
textField_1.requestFocusInWindow();
}
}
要为 'Enter press' 编写逻辑,JTextField
最好将逻辑保留在keyReleased()
块内而不是keyTyped()
& keyPressed()
。
只需使用以下代码:
SwingUtilities.getRootPane(myButton).setDefaultButton(myButton);