Ответы:
A JTextField
был разработан для использования в ActionListener
точности как 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.
}
}
KeyListeners
имеет много недостатков, о которых в большей степени заботятся KeyBindings
, например, связанные с фокусом, копированием / вставкой и многими другими. Этого следует избегать для тривиальных задач, например, как указано в OP.
Вы хотите сделать что-то подобное?
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();
}
}
});
Сначала добавьте команду действия в 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
}
}
Другие ответы (включая принятые) хороши, но если вы уже используете Java8, вы можете сделать следующее (более коротким и новым способом):
textField.addActionListener(
ae -> {
//dostuff
}
);
Как сказано в принятом ответе, вы можете просто отреагировать с помощью ActionListener
, который улавливает клавишу Enter.
Однако в моем подходе используются функциональные концепции, представленные в Java 8.
Если вы хотите использовать одно и то же действие, например, для кнопки и JTextField, вы можете сделать следующее:
ActionListener l = ae -> {
//do stuff
}
button.addActionListener(l);
textField.addActionListener(l);
Если потребуется дополнительное объяснение, дайте мне знать!
Если вы хотите установить действие кнопки по умолчанию во вводе 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()
.
KeyListeners
Слишком низкий уровень Swing
с точки зрения России. Используйте API, который предназначен для используется с Swing
:-)
Просто используйте этот код:
SwingUtilities.getRootPane(myButton).setDefaultButton(myButton);