Java jFrame Numberfieldauslesen?
Hallo, ich würde gerne ein numberfield von java auslesen, um dieses dann auf eine zahl zu addieren. Ich bräuchte also den wert des numberfield + eine variable
1 Antwort
Swing (und auch AWT) besitzen keine Standardimplementation eines NumberFields. Es gibt allerhöchstens die Komponenten JSlider oder die JSpinner, mit denen ein bestimmter Wertebereich abgedeckt werden kann.
Folgend einmal ein Beispiel mit einem JSpinner:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
var frame = new JFrame("Spinner example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
var model = new SpinnerNumberModel(1, 0, 2d, 0.1);
var spinner = new JSpinner(model);
spinner.addChangeListener(event -> {
var value = (double)spinner.getValue();
System.out.println(value);
});
frame.add(spinner);
frame.pack();
frame.setVisible(true);
});
}
}
Dieser deckt den Wertebereich von 1.0 bis 2.0 in 0.1-Schritten ab. Die Nutzereingabe kannst du im Callback eines Event Listeners einholen. Im obigen Fall warte ich auf eine Änderung des Feldwerts (change). Genauso könntest du aber auch einen Button zum Frame hinzufügen und diesem einen ActionListener anhängen, um bei Buttonklick den Wert aus dem Spinner auszulesen.
Wenn du mit einem einfachen JTextField arbeitest, lies die Eingabe erst als String und parse diesen anschließend.
var text = textField.getText();
var value = Double.parseDouble(text);
Solltest du beim Parsen bestimmte kulturelle Abhängigkeiten berücksichtigen müssen (z.B. wenn ein Komma als Dezimaltrenner verwendet werden soll), dann nimm einen Formatter beim Parsen zu Hilfe:
var format = NumberFormat.getInstance(Locale.GERMANY);
var value = format.parse(text);
var doubleValue = value.doubleValue();
Solltest du bei dir irgendeinen NumberField-Komponententyp vorliegen haben, dann schau nach, wie dieser Typ definiert ist. Er muss wie gesagt aus einer anderen Quelle als AWT/Swing kommen. Es ist in diesem Fall sehr wahrscheinlich, dass er bereits eine Methode bereithält, um die Eingabe als numerischen Wert zurückzugeben.