KeyListener in Textfield nicht feuern, wenn Sie drücken Sie die EINGABETASTE
Ich versuche zu machen ein Programm, das die Umwandlung von fahrenheit zu Celsius in java. Im Programm habe ich 2 Labels und 1 Textfeld für die Eingabe. Ich möchte konvertieren Temperatur, wenn der Benutzer die Typen die Temperatur und drückt auf Enter. Um das zu tun, ich habe einen key-listener zu meinem textfield, aber es funktioniert nicht. Wenn ich drücken Sie die Taste Enter listener feuern nicht auf alle.
Und hier ist mein code.
public class TempConv extends JFrame{
private JLabel info;
private JLabel result;
private JTextField input;
private String outcome;
public TempConv(){
super("Temperature Converter");
setLayout(new BorderLayout());
info = new JLabel("Enter Fahrenheit Temperature");
add(info, BorderLayout.NORTH);
input = new JTextField(12);
add(input, BorderLayout.CENTER);
result = new JLabel("Temperature in Celcius is: " + outcome);
add(result, BorderLayout.SOUTH);
input.addKeyListener(
new KeyListener(){
public void keyPressed(KeyEvent e){
if(e.getKeyChar() == KeyEvent.VK_ENTER){
outcome = input.getText();
}
}
}
);
}
public static void main(String[] args) {
TempConv ftc = new TempConv();
ftc.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ftc.setLocationRelativeTo(null);
ftc.setSize(370, 100);
ftc.setVisible(true);
}
}
Edit: funktioniert Es mit ActionListener aber ich muss es tun mit anonymen Klasse. Ohne anonyme Klasse feuert Sie mit Enter.
- Die Veranstaltung ist verbraucht wurde weiter oben in der event-Kette, daher ist es nie, um Sie zu erreichen, besser zu Tastaturkürzel - Eigentlich ist es besser, eine
ActionListener
für das, was Sie versuchen zu tun - das ist, was es ist entworfen, für - denken Sie daran, Sie [Enter] ist nicht immer die "akzeptieren" - Taste für jede Plattform 😉 - Ich war versucht, action-listener. Alles ging so gut, bis ich kann nicht herausfinden, wie um zu prüfen, ob Eingabe-Taste gedrückt wird oder nicht im ActionListener.
- Spielt es eine Rolle? Von einer Plattform unabhängige Sicht, die
ActionListener
wird ausgelöst, wenn der Benutzer löst den "akzeptieren" - Aktion für die Plattform. Es passiert einfach so, dass für die meisten Plattformen, ist es die [Enter] - Taste. - In diesem Fall sollte das Programm nur ausführen, wenn der Benutzer drückt die Eingabe-Taste. Ich habe versucht, ActionListener, aber das führt mich zu KeyListener, das hört key-Aktionen. Bin ich falsch?
- "Bin ich falsch?" Ja..und Nein.
KeyListener
ist auf niedrigem Niveau eine API für das, was Sie versuchen zu erreichen. Wenn Sie WIRKLICH wollen, überwachen Sie die [Enter] - Taste, dann sind Sie gehen zu müssen, ersetzen Sie die Tastenkombination beginnen, vom text-Feld. Dies wird sich jedoch ändern, wenn die Art und Weise, dass die Anwendung funktioniert möglicherweise auch auf anderen Plattformen, daher auch der Grund für dieActionListener
. Dies ermöglicht das Aussehen und das Gefühl um zu entscheiden, unter welchen Bedingungen derActionListener
ausgelöst wird. Unter den meisten Plattformen, das ist der [Enter] - Taste... - Hmm.. ich bekomme Ihren Punkt. Ich werde mich darauf konzentrieren ActionListener dann.
- Ok, ich fand eine Antwort in diesem Thema:link. Jetzt funktioniert es perfekt. Vielen Dank für die Ideen.
InformationsquelleAutor Miral | 2013-01-13
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen eine Email.getKeyCode() anstelle von e.getKeyChar(). Die Konstante KeyEvent.VK_ENTER ist ein int, kein char.
In anderen Worten:
statt
Späte Antwort, aber ich habe versucht mit dem code in der Frage der KeyPressed Tat auslösen, aber da das JLabel nicht aktualisieren, Sie angenommen, dass der KeyEvent war nicht abgefeuert.
Nur nach
hinzufügen
so das label selbst aktualisieren.
Tasten nicht benötigen eine
KeyListener
(und zum größten Teil sollte Sie nicht benutzen), Sie verwenden einActionListener
zu reagieren, um alle Aktivierungs-events, einschließlich der Enter, Maus-Klicks und Tastatur-shortcuts, es ist viel mehr eine vereinfachte API.Sehen How to Use Buttons, Check-Boxen und Radio-Buttons, Wie Schreibt man einen Action-Listener und Wie Sie Aktionen Verwenden für mehr details
Können Sie auch einen button als "default" - Taste, die aktiviert werden kann, wenn man sich nicht (so lange wie die aktuell fokussierte Komponente nicht verwenden/verbrauchen, die Enter - Taste)
Sehen
JRootPane#setDefaultButton
und How to Use Root Panes für mehr detailsErste von allen, müssen Sie implementieren alle Methoden von KeyListener. Sie haben nicht umgesetzt, keyTyped und keyReleased. Eine andere Sache ist, Sie sollten überprüfen Sie die Schlüssel-code, anstatt den key char, weil die "Enter" - char ist nicht sichtbar, also vorzugsweise sollten Sie überprüfen, ob Sie den Schlüssel-code entspricht KeyEvent.VK_ENTER. Die Letzte Sache ist, wenn Sie die EINGABETASTE drücken, aktualisieren Sie das Ergebnis die String-variable, aber Sie sieht ihn nicht überall, so müssen Sie den text auf dem JLabel Ergebnis. Sie auch vergessen, um die Konvertierung zu machen. Meine Erklärung könnte verwirrend sein, aber unten ist der code: