¿Es posible detectar cuando alguien presiona Entermientras escribe un JTextField en java? Sin tener que crear un botón y configurarlo como predeterminado.
¿Es posible detectar cuando alguien presiona Entermientras escribe un JTextField en java? Sin tener que crear un botón y configurarlo como predeterminado.
Respuestas:
A JTextField
fue diseñado para usar un ActionListener
tal como JButton
es. Vea el addActionListener()
método de JTextField
.
Por ejemplo:
Action action = new AbstractAction()
{
@Override
public void actionPerformed(ActionEvent e)
{
System.out.println("some action");
}
};
JTextField textField = new JTextField(10);
textField.addActionListener( action );
Ahora el evento se dispara cuando Enterse usa la clave.
Además, un beneficio adicional es que puede compartir el oyente con un botón incluso si no desea que el botón sea un botón predeterminado.
JButton button = new JButton("Do Something");
button.addActionListener( action );
Tenga en cuenta que este ejemplo usa un Action
, que se implementa ActionListener
porque Action
es una API más nueva con características adicionales. Por ejemplo, podría deshabilitar Action
lo que deshabilitaría el evento tanto para el campo de texto como para el botón.
JTextField function=new JTextField(8);
function.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//statements!!!
}});
¡todo lo que necesita hacer es agregarActionListener al JTextField como arriba! Después de presionar, Enterla acción realizará lo que desee en el estado de cuenta.
Agrega un evento para KeyPressed
.
private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {
if(evt.getKeyCode() == KeyEvent.VK_ENTER) {
// Enter was pressed. Your code goes here.
}
}
KeyListeners
tienen muchas deficiencias, de las que se solucionan en mayor medida KeyBindings
, como las relacionadas con el enfoque, las relacionadas con copiar / pegar y muchas muchas más. Debe evitarse, para tareas triviales, como, como se pide en OP.
¿Quieres hacer algo como esto?
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();
}
}
});
Primero agregue el comando de acción en JButton o JTextField por:
JButton.setActionCommand("name of command");
JTextField.setActionCommand("name of command");
Luego agregue ActionListener tanto a JTextField como a JButton.
JButton.addActionListener(listener);
JTextField.addActionListener(listener);
Después de eso, en tu implementación de ActionListener escribe
@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
}
}
Las otras respuestas (incluidas las aceptadas) son buenas, pero si ya usa Java8, puede hacer lo siguiente (de una manera más corta y nueva):
textField.addActionListener(
ae -> {
//dostuff
}
);
Como dice la respuesta aceptada, simplemente puede reaccionar con un ActionListener
, que captura la tecla Enter.
Sin embargo, mi enfoque se beneficia de los conceptos funcionales que se introdujeron en Java 8.
Si desea utilizar la misma acción, por ejemplo, para un botón y JTextField, puede hacer lo siguiente:
ActionListener l = ae -> {
//do stuff
}
button.addActionListener(l);
textField.addActionListener(l);
Si necesita más explicaciones, ¡hágamelo saber!
Si desea establecer una acción de botón predeterminada en una entrada de JTextField, debe hacer esto:
//put this after initComponents();
textField.addActionListener(button.getActionListeners()[0]);
Es [0] porque un botón puede tener muchas acciones, pero normalmente solo tiene una (ActionPerformed).
Para cada campo de texto de su marco, invoque el método addKeyListener. Luego implemente y anule el método keyPressed, como otros han indicado. Ahora puede presionar enter desde cualquier campo en su marco para activar su acción.
@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();
}
}
Para escribir la lógica para 'Enter press' JTextField
, es mejor mantener la lógica dentro del keyReleased()
bloque en lugar de keyTyped()
& keyPressed()
.
KeyListeners
Son de un nivel demasiado bajo desde Swing
la perspectiva de. Use la API que está destinada a ser usado con Swing
:-)
Solo usa este código:
SwingUtilities.getRootPane(myButton).setDefaultButton(myButton);