Відповіді:
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!!!
}});
все, що вам потрібно зробити, це 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.
}
}
KeyListeners
має багато недоліків, за якими в більшій мірі усунені KeyBindings
такі, як, наприклад, пов’язані з фокусом, копіювання / вставка та багато інших. Цього слід уникати для тривіальних завдань, таких як запитання в ОП.
Ви хочете зробити щось подібне?
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. Потім реалізуйте та перекрийте метод keyPress, як показали інші. Тепер ви можете натиснути клавішу 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);