Czy można wykryć, kiedy ktoś naciska Enterpodczas pisania w JTextField w java? Bez konieczności tworzenia przycisku i ustawiania go jako domyślnego.
źródło
Czy można wykryć, kiedy ktoś naciska Enterpodczas pisania w JTextField w java? Bez konieczności tworzenia przycisku i ustawiania go jako domyślnego.
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.
wszystko, co musisz zrobić, to dodaćActionListener do JTextField jak powyżej! Po naciśnięciu Enterakcja wykona to, co chcesz na wyciągu!
źródło
Dodaj wydarzenie dla
KeyPressed
.źródło
KeyListeners
ma wiele niedociągnięć, które są usuwane w większym stopniu przezKeyBindings
, 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?
źródło
Najpierw dodaj polecenie akcji na JButton lub JTextField przez:
Następnie dodaj ActionListener do JTextField i JButton.
Następnie napiszesz o implementacji ActionListener
źródło
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):
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:
Jeśli potrzebne są dalsze wyjaśnienia, daj mi znać!
źródło
Jeśli chcesz ustawić domyślną akcję przycisku w enter JTextField, musisz to zrobić:
Jest to [0], ponieważ przycisk może mieć wiele akcji, ale zwykle ma tylko jedną (ActionPerformed).
źródło
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ę.
źródło
Aby zapisać logikę dla „Enter, naciśnij”
JTextField
, lepiej jest zachować logikę wewnątrzkeyReleased()
bloku zamiastkeyTyped()
&keyPressed()
.źródło
KeyListeners
ZSwing
punktu widzenia jest to zdecydowanie zbyt niski poziom . Użyj API, które ma być używany zSwing
:-)Po prostu użyj tego kodu:
źródło