Вы НЕ должны вызывать getRootPane().setDefaultButton(jButton1);
внутри ActionListener
текстового поля (на самом деле вам не нужно ActionListener
для текстового поля).
Вы должны вызывать getRootPane().setDefaultButton(jButton1);
при инициализации пользовательского интерфейса.
setDefaultButton(jButton1)
НЕ существует, чтобы "запустить" событие ввода клавиши.Здесь нужно «указать», что вы хотите, чтобы jButton1
была кнопкой «по умолчанию».
См. Демонстрацию ниже.
import javax.swing.*;
import java.awt.FlowLayout;
public class DefaultButton {
public static void main(String[] args) {
JButton button = new JButton("Button 1");
button.addActionListener(DefaultButton::jButton1ActionPerformed);
JTextField textField = new JTextField(20);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new FlowLayout());
frame.getContentPane().add(button);
frame.getContentPane().add(textField);
frame.getRootPane().setDefaultButton(button);
frame.setBounds(300, 200, 400, 300);
frame.setVisible(true);
}
private static void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
JOptionPane.showMessageDialog(null, "Hi!");
}
}
ОБНОВЛЕНИЕ:
Если вы не хотите делать button
кнопкой по умолчанию и просто хотите показать диалоговое окно сообщения, когда пользователь нажимает клавишу Enter, тогда вы можете вызвать тот же jButton1ActionPerformed()
из ActionListener текстового поля, какэто:
JTextField textField = new JTextField(20);
textField.addActionListener(DefaultButton::jButton1ActionPerformed);
и уберите эту строку:
frame.getRootPane().setDefaultButton(button);