Odpowiedzi:
A JTextField
został zaprojektowany do używania takiego ActionListener
samego jak a JButton
jest. Zobacz addActionListener()
metodę JTextField
.
Na przykład:
Action action = new AbstractAction()
{
@Override
public void actionPerformed(ActionEvent e)
{
System.out.println("some action");
}
};
JTextField textField = new JTextField(10);
textField.addActionListener( action );
Teraz zdarzenie jest uruchamiane, gdy Enterklucz jest używany.
Dodatkową korzyścią jest to, że możesz udostępnić odbiornikowi przycisk, nawet jeśli nie chcesz, aby przycisk był przyciskiem domyślnym.
JButton button = new JButton("Do Something");
button.addActionListener( action );
Należy zauważyć, że w tym przykładzie zastosowano Action
, który implementuje, ActionListener
ponieważ Action
jest nowszym interfejsem API z dodatkowymi funkcjami. Na przykład możesz wyłączyć to, Action
co wyłączyłoby zdarzenie zarówno dla pola tekstowego, jak i dla przycisku.
JTextField function=new JTextField(8);
function.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//statements!!!
}});
wszystko, co musisz zrobić, to dodaćActionListener do JTextField jak powyżej! Po naciśnięciu Enterakcja wykona to, co chcesz na wyciągu!
Dodaj wydarzenie dla KeyPressed
.
private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {
if(evt.getKeyCode() == KeyEvent.VK_ENTER) {
// Enter was pressed. Your code goes here.
}
}
KeyListeners
ma wiele niedociągnięć, które są usuwane w większym stopniu przez KeyBindings
, takie jak związane z fokusem, związane z kopiowaniem / wklejaniem i wiele innych. Należy go unikać w przypadku błahych zadań, takich jak zadane w PO.
Chcesz zrobić coś takiego?
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();
}
}
});
Najpierw dodaj polecenie akcji na JButton lub JTextField przez:
JButton.setActionCommand("name of command");
JTextField.setActionCommand("name of command");
Następnie dodaj ActionListener do JTextField i JButton.
JButton.addActionListener(listener);
JTextField.addActionListener(listener);
Następnie napiszesz o implementacji 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
}
}
Pozostałe odpowiedzi (w tym zaakceptowane) są dobre, ale jeśli korzystasz już z Java8, możesz wykonać następujące czynności (w krótszy, nowszy sposób):
textField.addActionListener(
ae -> {
//dostuff
}
);
Zgodnie z przyjętą odpowiedzią możesz po prostu zareagować ActionListener
, naciskając klawisz Enter.
Jednak moje podejście wykorzystuje koncepcje funkcjonalne, które zostały wprowadzone w Javie 8.
Jeśli chcesz użyć tej samej akcji, na przykład dla przycisku i JTextField, możesz wykonać następujące czynności:
ActionListener l = ae -> {
//do stuff
}
button.addActionListener(l);
textField.addActionListener(l);
Jeśli potrzebne są dalsze wyjaśnienia, daj mi znać!
Jeśli chcesz ustawić domyślną akcję przycisku w enter JTextField, musisz to zrobić:
//put this after initComponents();
textField.addActionListener(button.getActionListeners()[0]);
Jest to [0], ponieważ przycisk może mieć wiele akcji, ale zwykle ma tylko jedną (ActionPerformed).
Dla każdego pola tekstowego w ramce wywołaj metodę addKeyListener. Następnie zaimplementuj i nadpisz metodę keyPressed, jak wskazali inni. Teraz możesz nacisnąć enter w dowolnym polu w ramce, aby aktywować akcję.
@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();
}
}
Aby zapisać logikę dla „Enter, naciśnij” JTextField
, lepiej jest zachować logikę wewnątrz keyReleased()
bloku zamiast keyTyped()
& keyPressed()
.
KeyListeners
Z Swing
punktu widzenia jest to zdecydowanie zbyt niski poziom . Użyj API, które ma być używany z Swing
:-)
Po prostu użyj tego kodu:
SwingUtilities.getRootPane(myButton).setDefaultButton(myButton);