Wert ändern Listener zu JTextField
Ich soll die message-box erscheint sofort, nachdem der Benutzer ändert den Wert in das textfield. Derzeit muss ich die enter-Taste drücken, um die Nachricht Kontrollkästchen, um pop-out. Gibt es etwas falsch mit meinem code?
textField.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if (Integer.parseInt(textField.getText())<=0){
JOptionPane.showMessageDialog(null,
"Error: Please enter number bigger than 0", "Error Message",
JOptionPane.ERROR_MESSAGE);
}
}
}
Jede mögliche Hilfe würde geschätzt!
InformationsquelleAutor der Frage user236501 | 2010-10-17
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fügen Sie einen listener hinzu, um das zugrunde liegende Dokument, die automatisch für Sie erstellt.
InformationsquelleAutor der Antwort Codemwnci
Ist die übliche Antwort zu diesem ist "verwenden Sie ein
DocumentListener
". Allerdings finde ich immer, dass die Benutzeroberfläche umständlich. Wahrheitsgemäß die Schnittstelle ist over-engineered. Es verfügt über drei Methoden zum einfügen, entfernen und ersetzen von text, wenn er benötigt nur eine Methode: der Ersatz. (Eine insertion kann gesehen werden, als Ersatz ohne text mit text, und eine Entfernung angesehen werden kann, als Ersatz für text ohne text.)Regel alles, was Sie wollen, ist zu wissen, ist wenn der text in der box geändert hatso eine typische
DocumentListener
Implementierung der drei Methoden eine Methode aufrufen.Daher machte ich die folgenden utility-Methode, die ermöglicht es Ihnen, eine einfachere
ChangeListener
eher als eineDocumentListener
. (Es verwendet die Java-8 - lambda-syntax, aber Sie können anpassen, es für die alten Java, wenn nötig.)Anders als beim hinzufügen eines Listeners, der direkt zu dem Dokument, wird dieses verarbeitet die (seltenen) Fall, dass Sie installieren ein neues Dokument-Objekt auf einer text-Komponente. Zusätzlich, es funktioniert, um das problem erwähnt in Jean-Marc Astesana Antwortwo das Dokument manchmal feuert, mehr Ereignisse, als es nötig ist.
Sowieso, mit dieser Methode können Sie ersetzen die lästige code der wie folgt aussieht:
Mit:
Code freigegeben (public domain). Spaß haben!
InformationsquelleAutor der Antwort Boann
Sich bewusst sein, dass, wenn der Benutzer das Feld ändern, der DocumentListener können, irgendwann, erhalten zwei Veranstaltungen. Zum Beispiel, wenn der Benutzer markiert den gesamten Feldinhalt, dann eine Taste drücken, erhalten Sie eine removeUpdate (alle Inhalte entfernen) und eine insertUpdate.
In deinem Fall denke ich nicht, dass es ein problem ist, aber, allgemein gesprochen, ist es.
Leider, es scheint, gibt es keinen Weg, um den Inhalt des textField-ohne Unterklassen von JTextField.
Hier ist der code einer Klasse, die eine "text" - Eigenschaft :
InformationsquelleAutor der Antwort Jean-Marc Astesana
Ich weiß, das bezieht sich auf ein wirklich altes problem, aber es verursachte mir einige Probleme. Als kleopatra antwortete in einem Kommentar oben, ich löste das problem mit einem
JFormattedTextField
. Aber die Lösung erfordert ein bisschen mehr Arbeit, ist aber sauberer.Den
JFormattedTextField
nicht standardmäßig trigger eine Eigenschaft ändern, nach jeder ändert sich der text in das Feld ein. Der default-Konstruktor derJFormattedTextField
nicht erstelle einen Formatierer.Jedoch, das zu tun, was die OP vorgeschlagen, den Sie benötigen, um ein Formatierer, die berufen sich auf die
commitEdit()
Methode, nach der jeweils gültigen Bearbeiten des Feldes. DiecommitEdit()
Methode ist, was löst die änderung der Eigenschaft von dem, was ich sehen kann, und ohne den formatter, dieses wird ausgelöst, standardmäßig auf einen Fokus ändern oder wenn Sie die enter-Taste gedrückt wird.Sehen http://docs.oracle.com/javase/tutorial/uiswing/components/formattedtextfield.html#value für mehr details.
Erstellen Sie eine Standard-formatter (
DefaultFormatter
) - Objekt übergeben werden, um dieJFormattedTextField
entweder über den Konstruktor oder eine setter-Methode. Eine Methode, die Standard-formattersetCommitsOnValidEdit(boolean commit)
wird der formatter für das auslösen dercommitEdit()
Methode jedes mal, wenn der text geändert wird. Diese können dann abgeholt werden mit einemPropertyChangeListener
und diepropertyChange()
Methode.InformationsquelleAutor der Antwort Astridax
Kiste nur eine Schnittstelle, die erweitert DocumentListener und DocumentListener implementiert alle Methoden:
dann:
oder Sie können sogar mit lambda-Ausdruck:
InformationsquelleAutor der Antwort Andrey Megvinov
Können Sie auch "MouseExited" zu kontrollieren.
Beispiel:
InformationsquelleAutor der Antwort fishgold192
war es die update-version von Codemwnci. sein code ist ganz Prima und funktioniert Super, außer der Fehlermeldung. So vermeiden Sie Fehler, die Sie ändern müssen, die Bedingungsanweisung.
InformationsquelleAutor der Antwort Bipul Chandra Dev Nath
Aber ich würde nicht nur analysieren alles, was der Benutzer (vielleicht durch Zufall) berührt auf seine Tastatur in ein
Integer
. Sie fangen sollte jederException
s geworfen, und stellen Sie sicher, dass dieJTextField
ist nicht leer.InformationsquelleAutor der Antwort DerBobby
Verwenden Sie einen KeyListener (die Trigger für jede Taste) anstatt den ActionListener (was löst Sie die EINGABETASTE)
InformationsquelleAutor der Antwort nick
Ich bin ganz neu auf WindowBuilder, und, in der Tat, nur immer wieder in Java nach ein paar Jahren, aber ich umgesetzt habe "etwas", dann dachte, ich würde es nachschlagen und stieß auf diesen thread.
Ich bin mitten in der Prüfung, also, basierend auf neu, um all dies, ich bin sicher, ich muss etwas fehlen.
Hier ist, was ich Tat, wo "runTxt" ist ein Textfeld und "runName" ist ein Datenelement der Klasse:
Scheint viel einfacher als das, was hier so weit, und scheint zu funktionieren, aber da bin ich in der Mitte, dies zu schreiben, würde ich schätzen, hören irgendwelche Fallstricke übersehen. Ist es ein Problem, dass die Benutzer geben könnte & verlassen der textbox w/o einer änderung? Ich denke, alles, was Sie getan haben, ist eine unnötige Belegung.
InformationsquelleAutor der Antwort RocketMan
DocumentFilter ? Es gibt Ihnen die Fähigkeit zu manipulieren.
[ http://www.java2s.com/Tutorial/Java/0240__Swing/FormatJTextFieldstexttouppercase.htm ]
Sorry. J bin mit Jython (Python in Java) - aber leicht zu verstehen
InformationsquelleAutor der Antwort papuga