Swing Wert in JTextField wird falsch ausgegeben

ralfb1105

Bekanntes Mitglied
Hallo zusammen,

ich verzweifle gerade an einem Problem mit einem JTextField in das ich einen Wert eingebe der zum erstellen einen TableSpace herangezogen wird.

Hier das Code zum JTextField:
Java:
private JTextField getJTFTSsize() {
        if(jTFTSsize == null) {
            jTFTSsize = new JTextField();
            jTFTSsize.setHorizontalAlignment(JTextField.RIGHT);
            jTFTSsize.setText("100");
            jTFTSsize.setBounds(289, 155, 39, 23);
            jTFTSsize.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, null, null, null, null));
            jTFTSsize.setFont(new java.awt.Font("Segoe UI",0,12));
            System.out.println(Integer.valueOf(jTFTSsize.getText()));
            jTFTSsize.addKeyListener(new KeyAdapter() {
                public void keyTyped(KeyEvent e1) {
                    System.out.println(Integer.valueOf(jTFTSsize.getText()));
                    setDataJComboBox1();
                }
            });
        }
        return jTFTSsize;
    }

Im initGUI() wird das TextField folgendermassen initialisiert:
Java:
getContentPane().add(getJTFTSsize());

Wenn ich das GUI starte wird der Wert 100 gesetzt und zur Kontrolle auch so auf der Konsole ausgegeben.

Ändere ich nun den Wert im TextField, wird auf Grund des KeyEvent der neue Wert auf der Konsole ausgegeben, aber leider immer /10 !? Klingt komisch, ist aber so.
Wenn ich aus der 100 eine 10 mache ist es noch OK - Ausgabe 10. Weiter auf 1 - auch OK -> 1. Gehe ich dann wieder hoch auf 10 wird eine 1 ausgegeben, hoch auf 100 eine 10, usw. Ist auch bei anderen Werten wie 109 -> 10 so.

Ich muss sagen ich habe keine Idee warum das so ist?
Was mache ich hier falsch, wo liegt mein blöder Fehler - ich vermute mal es hat mit dem KeyEvent zu tun, denn das hab eich neu hinzugefügt.

Bin dankbar für jede Hilfe und jeden Tipp!!

Gruß

Ralf
 

mihe7

Top Contributor
Erst mal ein wenig Erklärung: das JTextField wird selbst von einem KeyListener aufgrund von "key-typed"-Events aktualisiert (tatsächlich ist es komplizierter aber fürs Verständnis soll das reichen). Wenn Du einen weiteren KeyListener registrierst, wird auch dieser über KeyEvents informiert. Allerdings ist die Reihenfolge der Benachrichtigungen nicht spezifiziert, d. h. es gibt keine Garantie, welcher Listener zuerst benachrichtigt wird.

Es kann also sein, dass dein Listener im Fall des "Einfügens" benachrichtigt wird, bevor das JTextField den Text geändert hat. Dann fehlt bei getText() die letzte Änderung (wenn man einer Zahl eine Stelle hinzufügt, fehlt diese bei getText(), das sieht dann so aus, als würde getText() nur ein Zehntel zurückgeben).

Das ist ein Grund, warum der KeyListener für Dein Vorhaben nicht geeignet ist. Der andere ist, dass KeyEvents auch auftreten, wenn sich am Text nichts ändert, beispielsweise bei Steuertasten.

Du willst auf Änderungen des Texts reagieren, nicht auf das Tippen irgendwelcher Tasten. Das JTextField verwaltet den Text nicht selbst, sondern verwendet hierfür ein Document. Das Document kann DocumentListener über DocumentEvents informieren.

Letzteres ist so auch dokumentiert (https://docs.oracle.com/javase/8/docs/api/javax/swing/JTextField.html):

In the JTextComponent based components, changes are broadcasted from the model via a DocumentEvent to DocumentListeners. The DocumentEvent gives the location of the change and the kind of change if desired. The code fragment might look something like:

Java:
     DocumentListener myListener = ??;
     JTextField myArea = ??;
     myArea.getDocument().addDocumentListener(myListener);
 

ralfb1105

Bekanntes Mitglied
Hallo mihe7,

Vielen Dank für die ausführliche Erklärung des Verhaltens - wieder mal sehr viel gelernt :)
Ich habe dem JTextField nun einen DocumentListener hinzugefügt und damit wird die JComboBox über die Methode
setDataJComboBox1() neu aufgebaut wenn sich die Werte in dem JTextField ändern - so wie gewollt!

Hier der neue Code:

Java:
private JTextField getJTFTSmaxSize() {
        if(jTFTSmaxSize == null) {
            jTFTSmaxSize = new JTextField();
            jTFTSmaxSize.setHorizontalAlignment(JTextField.RIGHT);
            jTFTSmaxSize.setText("200");
            jTFTSmaxSize.setBounds(417, 155, 39, 23);
            jTFTSmaxSize.setBorder(new SoftBevelBorder(BevelBorder.LOWERED, null, null, null, null));
            jTFTSmaxSize.setFont(new java.awt.Font("Segoe UI",0,12));
           
            //add a DocumentListener to the JTextField and on the events call setDataJComboBox1() to modify ComboBox and
            //  re-calculate the values in the ComboBox
            DocumentListener documentListenerjTFTSmaxSize = new DocumentListener() {
                  public void changedUpdate(DocumentEvent documentEvent) {
                      setDataJComboBox1();
                  }
                  public void insertUpdate(DocumentEvent documentEvent) {
                      setDataJComboBox1();
                  }
                  public void removeUpdate(DocumentEvent documentEvent) {
                      setDataJComboBox1();
                  }
                };
            jTFTSmaxSize.getDocument().addDocumentListener(documentListenerjTFTSmaxSize);
               
        }
        return jTFTSmaxSize;
    }

Danke nochmal für Deine Hilfe!

Gruß

Ralf
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O JTextfield und JComboBox Wert in SQL Database speichern AWT, Swing, JavaFX & SWT 4
W JTextfield - Wert lässt sich nicht setzen AWT, Swing, JavaFX & SWT 3
S JTextField. Bei Abbruch vorherigen Wert wiederherstellen AWT, Swing, JavaFX & SWT 2
M JTextField auslesen und Wert vergleichen? AWT, Swing, JavaFX & SWT 2
W JTextfield aktualisieren / Wert aus Datenbank neu abfragen AWT, Swing, JavaFX & SWT 2
G Setzen wert in JTextField AWT, Swing, JavaFX & SWT 11
_user_q ThreadPool schedule Wert auf false setzen AWT, Swing, JavaFX & SWT 1
S ChoiceBox aus ArrayList per setValue() mit Wert belegen funktioniert nicht. AWT, Swing, JavaFX & SWT 0
G JavaFX Wert aus DB lesen, wenn erfolgreich automatisch eine fxml laden, möglich? AWT, Swing, JavaFX & SWT 2
L Swing Wert vom Textfield in Array List hinzufügen AWT, Swing, JavaFX & SWT 2
P Swing ActionListener überschreibt einen Wert aus der Hauptklasse nicht AWT, Swing, JavaFX & SWT 5
S hashCode int wert AWT, Swing, JavaFX & SWT 6
B Slider-Wert an anderen Slider übergeben AWT, Swing, JavaFX & SWT 5
F Wie bekomme ich den Wert der ComboBox in eine Variable gespeichert welche ich für meinen ActionListener nutzen kann? AWT, Swing, JavaFX & SWT 3
S Caps-Lock Überprüfung gibt falschen Wert zurück AWT, Swing, JavaFX & SWT 1
Z Swing Wert aus Textfeld auslesen -- null Fehler AWT, Swing, JavaFX & SWT 4
Hatsi09 JCombobox default wert AWT, Swing, JavaFX & SWT 6
Bluedaishi TableView mit Combox wert wird nicht in die TableView gesetzt AWT, Swing, JavaFX & SWT 38
B AWT GUI nimmt nur 19 Ziffern an, obwohl Max Wert von Double größer ist AWT, Swing, JavaFX & SWT 7
B JavaFX JavaFX Table gespeichertes Wert auswählen/anvisieren AWT, Swing, JavaFX & SWT 3
K Swing DefaultListModel braucht zu lange, um Wert zu setzen AWT, Swing, JavaFX & SWT 7
T JavaFX Falscher Wert getLayoutBounds? + Tipps zum Code-Aufbau? AWT, Swing, JavaFX & SWT 8
G JavaFX TableView Wert in Spalte ändern AWT, Swing, JavaFX & SWT 0
L ComboBox Wert automatisch auswählen AWT, Swing, JavaFX & SWT 6
C JavaFX mit .setText() befülltes Textfield liefert anschließend mit .getText() den ursprünglichen Wert? AWT, Swing, JavaFX & SWT 1
M JavaFX berechneten Wert in TableView schreiben AWT, Swing, JavaFX & SWT 1
M Jtable gibt -1 wert bei selectedRow und Column AWT, Swing, JavaFX & SWT 3
J Slider Wert anzeigen AWT, Swing, JavaFX & SWT 15
M Event Handling vertical ValueProperty() alter Wert gleich neuer Wert AWT, Swing, JavaFX & SWT 4
M Wert einer Zelle aus JTable ziehen AWT, Swing, JavaFX & SWT 4
A Slider soll einen Wert übergeben AWT, Swing, JavaFX & SWT 1
R JavaFX Wert einer ChoiceBox bekommen ohne Lambdas AWT, Swing, JavaFX & SWT 11
M JavaFX Wert aus Tabellenzelle auslesen AWT, Swing, JavaFX & SWT 4
T SWT Mysql Tabelle zeigt immer nur den ersten Wert immer wieder an AWT, Swing, JavaFX & SWT 3
A Unterklasse schreibt Wert in JFrame AWT, Swing, JavaFX & SWT 4
M SWT CCombo immer so groß wie der größte Wert! AWT, Swing, JavaFX & SWT 0
T Int-Wert aktualisieren? AWT, Swing, JavaFX & SWT 9
T Einen Variablen Wert in einem TextField AWT, Swing, JavaFX & SWT 4
M Swing Alter Wert von einer Variable wird verwendet AWT, Swing, JavaFX & SWT 8
J Zwei GUIs - Nach button-Klick soll ein Wert an die andere GUI übergeben werden AWT, Swing, JavaFX & SWT 15
M JSlider-Wert ändern, ohne ein ChangeEvent auszulösen AWT, Swing, JavaFX & SWT 4
E Wert aus ActionListener geben AWT, Swing, JavaFX & SWT 4
A Ermittelter Wert auf Formular übertragen. AWT, Swing, JavaFX & SWT 2
F Wert durch ActionListener an Klasse übergeben AWT, Swing, JavaFX & SWT 3
E Wert eines selektierten Knotens in einem JTree auslesen AWT, Swing, JavaFX & SWT 3
N Button Wert zuweisen AWT, Swing, JavaFX & SWT 3
Y JSlider Wert auslesen (Kategorien) AWT, Swing, JavaFX & SWT 2
R JFreeChart: nur jeden n-ten Wert auf der X-Achse anzeigen AWT, Swing, JavaFX & SWT 5
L Swing Falscher Wert nach eigener Sortierung (JTable) AWT, Swing, JavaFX & SWT 2
N jcomboBox anderer Wert als Anzeige AWT, Swing, JavaFX & SWT 6
F Wert zu Eintrag in ComboBox speichern?! AWT, Swing, JavaFX & SWT 7
R Zeile in JTable anhand von Wert einfärben AWT, Swing, JavaFX & SWT 2
C Zwei JSpinner mit dem gleichen Wert AWT, Swing, JavaFX & SWT 2
C Swing JTable: edit Cell -> versteckten Wert ändern AWT, Swing, JavaFX & SWT 12
B JSlider - Wert am Mouszeiger anzeigen lassen AWT, Swing, JavaFX & SWT 6
X Den Wert von JSpinner setzen ohne Event AWT, Swing, JavaFX & SWT 3
P Combobox liesst falschen Wert AWT, Swing, JavaFX & SWT 10
S Frame - Panel - Dialog rückgabe wert AWT, Swing, JavaFX & SWT 5
M SWT DateTime per default null Wert ? AWT, Swing, JavaFX & SWT 3
L ArrayList Wert löschen klappt nicht AWT, Swing, JavaFX & SWT 11
C jtable hintegrundfarbe integer wert AWT, Swing, JavaFX & SWT 14
S Swing noch nicht übergebenen Wert aus JComboBox auslesen AWT, Swing, JavaFX & SWT 4
S JTable Wert so bekommen wie er angezeigt wird..? AWT, Swing, JavaFX & SWT 2
I Swing JComboBox Wert setzen AWT, Swing, JavaFX & SWT 4
S Swing In JComboBox Wert und ID integrieren AWT, Swing, JavaFX & SWT 16
M Swing JTextFeld Wert in anderer Klasse aufrufen AWT, Swing, JavaFX & SWT 13
G JTable - bei falscher Eingabe wird alter Wert genommen. AWT, Swing, JavaFX & SWT 2
P Bei JComboBox einem Eintrag Wert zuweisen AWT, Swing, JavaFX & SWT 7
A Wert einer JComboBox auslesen AWT, Swing, JavaFX & SWT 1
B JTable Wert in Vector einlesen AWT, Swing, JavaFX & SWT 4
G JComboBox - Anzeige mit Wert verknüpfen AWT, Swing, JavaFX & SWT 3
V Start Button und Wert Eingabe in ein Fenster AWT, Swing, JavaFX & SWT 2
L JTree Frage -> nur den Wert des Knotens ausgeben? AWT, Swing, JavaFX & SWT 2
L Jcombobox + value Wert AWT, Swing, JavaFX & SWT 7
M Wert von einem Fenster zum anderen übergeben AWT, Swing, JavaFX & SWT 3
J Problem mit Alpha-Wert beim Button AWT, Swing, JavaFX & SWT 3
D Wert von Kasse2 an Klasse1 übergeben AWT, Swing, JavaFX & SWT 3
D Scrollbalken Wert setzen AWT, Swing, JavaFX & SWT 6
S Eingegeben Wert wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
S Methoden return wert? AWT, Swing, JavaFX & SWT 7
O MouseListener - Wert-Übergabe AWT, Swing, JavaFX & SWT 3
G JRadioButton beim deselektieren Wert ändern. AWT, Swing, JavaFX & SWT 2
T JTable überschreibt alten Wert AWT, Swing, JavaFX & SWT 12
T Jtable falscher Wert wird übergeben AWT, Swing, JavaFX & SWT 13
O JComboBox nach erkennt Wert nach setSelectedItem() nicht AWT, Swing, JavaFX & SWT 3
D JComboBox.getSelectedIndex() liefer immer 0 als Wert zurück? AWT, Swing, JavaFX & SWT 11
D Doppelklick in JList --> Wert auslesen AWT, Swing, JavaFX & SWT 8
G jspinner schrittweite in Abhängigkeit vom aktuellen Wert AWT, Swing, JavaFX & SWT 3
B Wert bei JFormattedTextField automatisch aktualisieren AWT, Swing, JavaFX & SWT 2
G Wert aus Dialog zurückgeben AWT, Swing, JavaFX & SWT 13
R Wert von ScrollBar ausgeben AWT, Swing, JavaFX & SWT 7
R JTable - Boolean-Wert aus Zelle auslesen. AWT, Swing, JavaFX & SWT 9
H JList: Mit ausgewähltem Wert weiterarbeiten AWT, Swing, JavaFX & SWT 16
E x wert von einem vorhandenen punkt abziehen? AWT, Swing, JavaFX & SWT 3
B Wert einer JCombobox in einer JTable setzen AWT, Swing, JavaFX & SWT 2
H Den wert aus einem Text field holen AWT, Swing, JavaFX & SWT 5
R JTable valueChanged() {wert an GUI} AWT, Swing, JavaFX & SWT 5
R wert aus editable JComboBox holen AWT, Swing, JavaFX & SWT 2
P JTextField wird nur sehr klein angezeigt und verändert die Größe nicht AWT, Swing, JavaFX & SWT 3
P JTextfield Text durch Keylistener verändern AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben