检测在JTextField中inputpress
在java中inputJTextField时,是否有可能检测到有人按Enter键 ? 无需创buildbutton并将其设置为默认值。
JTextField
被devise为像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键时,事件被触发。
此外,还有一个好处是,即使不想将button设置为默认button,也可以使用button共享侦听器。
JButton button = new JButton("Do Something"); button.addActionListener( action );
注意,这个例子使用一个Action
,它实现了ActionListener
因为Action
是一个更新的API,带有附加function。 例如,您可以禁用将禁用文本字段和button的事件的Action
。
JTextField function=new JTextField(8); function.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ //statements!!! }});
所有你需要做的就是addActionListener像上面的JTextField! 在你按下Enter之后,这个动作就会在声明中执行你想要的东西!
为KeyPressed
添加一个事件。
private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) { if(evt.getKeyCode() == KeyEvent.VK_ENTER) { // Enter was pressed. Your code goes here. } }
首先通过以下方式在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 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中引入的function概念。
如果您想要为button和JTextField使用相同的操作,则可以执行以下操作:
ActionListener l = ae -> { //do stuff } button.addActionListener(l); textField.addActionListener(l);
如果需要进一步解释,请告诉我!
如果你想在JTextField中设置一个默认的button动作,你必须这样做:
//put this after initComponents(); textField.addActionListener(button.getActionListeners()[0]);
它是[0],因为button可以有很多动作,但通常只有一个(ActionPerformed)。
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
为“input新闻”编写逻辑,最好将逻辑保存在keyReleased()
块中而不是keyTyped()
和keyPressed()
。
只要使用这个代码:
SwingUtilities.getRootPane(myButton).setDefaultButton(myButton);