Risposte:
A è JTextField
stato progettato per utilizzare un ActionListener
proprio come JButton
è. Vedi il addActionListener()
metodo di JTextField
.
Per esempio:
Action action = new AbstractAction()
{
@Override
public void actionPerformed(ActionEvent e)
{
System.out.println("some action");
}
};
JTextField textField = new JTextField(10);
textField.addActionListener( action );
Ora l'evento viene generato quando Enterviene utilizzata la chiave.
Inoltre, un ulteriore vantaggio è che puoi condividere l'ascoltatore con un pulsante anche se non vuoi rendere il pulsante un pulsante predefinito.
JButton button = new JButton("Do Something");
button.addActionListener( action );
Nota, questo esempio utilizza un Action
, che implementa ActionListener
perché Action
è un'API più recente con funzionalità aggiuntive. Ad esempio potresti disabilitare il Action
che disabiliterà l'evento sia per il campo di testo che per il pulsante.
JTextField function=new JTextField(8);
function.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//statements!!!
}});
tutto quello che devi fare è aggiungereActionListener a JTextField come sopra! Dopo aver premuto, Enterl'azione eseguirà ciò che desideri nell'istruzione!
Aggiungi un evento per KeyPressed
.
private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {
if(evt.getKeyCode() == KeyEvent.VK_ENTER) {
// Enter was pressed. Your code goes here.
}
}
KeyListeners
hanno molti difetti, che vengono risolti in misura maggiore da KeyBindings
, ad esempio, relativi al focus, relativi al copia / incolla e molti molti altri. È da evitare, per compiti banali, come, come richiesto in OP.
Vuoi fare qualcosa di simile?
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();
}
}
});
Per prima cosa aggiungi il comando di azione su JButton o JTextField da:
JButton.setActionCommand("name of command");
JTextField.setActionCommand("name of command");
Quindi aggiungi ActionListener sia a JTextField che a JButton.
JButton.addActionListener(listener);
JTextField.addActionListener(listener);
Dopodiché, scrivi su di te l'implementazione di 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
}
}
Le altre risposte (comprese quelle accettate) sono buone, ma se usi già Java8, puoi fare quanto segue (in un modo più breve, più nuovo):
textField.addActionListener(
ae -> {
//dostuff
}
);
Come diceva la risposta accettata, puoi semplicemente reagire con un ActionListener
, che cattura il tasto Invio.
Tuttavia, il mio approccio trae vantaggio dai concetti funzionali introdotti in Java 8.
Se desideri utilizzare la stessa azione, ad esempio, per un pulsante e JTextField, puoi eseguire le seguenti operazioni:
ActionListener l = ae -> {
//do stuff
}
button.addActionListener(l);
textField.addActionListener(l);
Se sono necessarie ulteriori spiegazioni, fatemelo sapere!
Se vuoi impostare un'azione predefinita del pulsante in un ingresso JTextField, devi farlo:
//put this after initComponents();
textField.addActionListener(button.getActionListeners()[0]);
È [0] perché un pulsante può avere molte azioni, ma normalmente ne ha solo una (ActionPerformed).
Per ogni campo di testo nel frame, richiama il metodo addKeyListener. Quindi implementare e sovrascrivere il metodo keyPressed, come altri hanno indicato. Ora puoi premere Invio da qualsiasi campo nel riquadro per attivare la tua azione.
@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();
}
}
Per scrivere la logica per "premere Invio" in JTextField
, è meglio mantenere la logica all'interno del keyReleased()
blocco invece di keyTyped()
& keyPressed()
.
KeyListeners
Sono di livello troppo basso dal Swing
punto di vista di. Utilizza l'API che è intesa per essere usato con Swing
:-)
Usa questo codice:
SwingUtilities.getRootPane(myButton).setDefaultButton(myButton);