¿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 JTextFieldfue diseñado para usar un ActionListenertal como JButtones. 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 ActionListenerporque Actiones una API más nueva con características adicionales. Por ejemplo, podría deshabilitar Actionlo 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.
}
}
KeyListenerstienen 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().
KeyListenersSon de un nivel demasiado bajo desde Swingla perspectiva de. Use la API que está destinada a ser usado con Swing :-)
Solo usa este código:
SwingUtilities.getRootPane(myButton).setDefaultButton(myButton);