JavaFX Textfeld nur Zahlen und nur von 5 bis 30

nook87

Mitglied
Hallo ich bin noch programmier anfänger und ich habe eine Frage ich habe eine GUI programmiert und möchte gerne die Textfelder so programmieren das nur Zahlen und nur Zahlen von 5 - 30 eingegeben werden können um dem User bei der einstellung der FPS nur eben diese möglichkeit zu geben.

Sowie eine überprüfung das im Feld Email adresse auch eine email adresse eingegeben wurde also über @ und . überprüfen dürfte schon reichen.

Java:
Label lblfps = new Label("FPS :");
		final TextField txtfps = new TextField();
		HBox hbfps = new HBox();
		hbfps.getChildren().addAll(lblfps,txtfps);
		hbfps.setSpacing(10);

Label lblmail = new Label("E-Mail Adresse :");
		final TextField txtmail = new TextField();
		HBox hbmail = new HBox();
		hbmail.getChildren().addAll(lblmail,txtmail);
		hbmail.setSpacing(10);

Vielen dank im Vorraus
 
Hier noch der komplette code

Java:
public class JavaFXMenu extends Application{
	
	public static void main(String[] args) {
		
	    launch(args);
	}

	public void start(final Stage primaryStage) {
	
		// primarystage erstellen und formatieren => FensterElement
		primaryStage.setTitle("Java FX Menue Test");
		primaryStage.setHeight(400);
		primaryStage.setWidth(700);
		// Gruppe erstellen - Der Behälter der Alle Steuerelement aufnimmt
		Group root = new Group();								 
		// Layouttabelle zum positionieren der Elemente
		GridPane Layouttab = new GridPane();
		Layouttab.setMinHeight(400);
		Layouttab.setMinWidth(700);
		Layouttab.setHgap(10);
		Layouttab.setVgap(10);
		Layouttab.setMaxHeight(10);
		Layouttab.setMaxWidth(10);
		Layouttab.prefWidthProperty().bind(primaryStage.widthProperty());
		//Die Anzeigefläche die das Behälterelement aufnimmt - also die Gruppe an Elementen 
		Scene Anzeigefl = new Scene(root, 400,700,Color.ALICEBLUE); 
		//Menu - Leiste erstellen
		MenuBar mleiste = new MenuBar(); 
		//Das Menü das in die Leiste soll
		Menu menu1 = new Menu("Menu");
		//Menüpunkt mit Eventhändler zum Schliessen des Programms
		MenuItem menuItem3 = new MenuItem("Exit");
		menuItem3.setOnAction(new EventHandler<ActionEvent>() {
			public void handle(ActionEvent e) {
				System.exit(0);
			}
    	});
		
		//Mediaplayer zum abspielen des Streams ===== >>>> 
		//Media Streamplayer = new Media("");
		//MediaPlayer medPlay = new MediaPlayer(Streamplayer);
		//medPlay.setAutoPlay(false);
		//MediaView mediaView = new MediaView(medPlay);
		//HBox hbmed = new HBox();
		//hbmed.getChildren().addAll(btn1,mediaView);
		//hbmed.setSpacing(10);
		// HBox enthält die Elemente label zur beschriftung Speicherort und das Textfeld dazu
				final TextField txtsave = new TextField();		
				Label lblsave = new Label("Speicherort :");
				final HBox hbsave = new HBox();
				hbsave.getChildren().addAll(lblsave,txtsave);
				hbsave.setSpacing(10);
		//Speichern Knopf über Durchsuchen Speichern Dialog öffnet sich
		Button btnsave = new Button();
		btnsave.setLayoutX(200);
		btnsave.setLayoutY(80);
		btnsave.setText("Durchsuchen");
		btnsave.setOnAction(new EventHandler<ActionEvent>() {
			public void handle(ActionEvent event) {
				String StrSpeicherpfad =" ";
				FileChooser fileChooser = new FileChooser();
				fileChooser.setTitle("Save Stream");
				File file = fileChooser.showSaveDialog(primaryStage);
				StrSpeicherpfad = file.getAbsolutePath();
				txtsave.setText(StrSpeicherpfad);
				///////////////////////////////// Hier Aufruf der Speichern Klasse über Dialogfenster - oben öffnen Dialogfenster ////////////////////////
			}
		});
		//Das Menü nimmt die menüpunkte auf
		menu1.getItems().add(menuItem3); 
		//Die Menüleiste nimmt das Menü auf
		mleiste.getMenus().add(menu1); 
		//Die Menüleiste wird an die Fensterbreite angepasst
		mleiste.prefWidthProperty().bind(primaryStage.widthProperty());
		// HBox enthält die Elemente label zur beschriftung Bitrate und das Textfeld dazu
		Label lblrating = new Label("Bitrate :");
		final TextField txtrating = new TextField();
		HBox hbrating = new HBox();
		hbrating.getChildren().addAll(lblrating,txtrating);
		hbrating.setSpacing(10);
		// HBox enthält die Elemente label zur beschriftung FPS und das Textfeld dazu
		Label lblfps = new Label("FPS :");
		final TextField txtfps = new TextField();
		HBox hbfps = new HBox();
		hbfps.getChildren().addAll(lblfps,txtfps);
		hbfps.setSpacing(10);
		// HBox enthält die Elemente label zur beschriftung Aufnahmedauer und das Textfeld dazu
		Label lblrec = new Label("Aufnahmedauer :");
		final TextField txtrec = new TextField();
		HBox hbrec = new HBox();
		hbrec.getChildren().addAll(lblrec,txtrec);
		hbrec.setSpacing(10);
		// HBox enthält die Elemente label zur beschriftung E-MailAdresse und das Textfeld dazu
		Label lblmail = new Label("E-Mail Adresse :");
		final TextField txtmail = new TextField();
		HBox hbmail = new HBox();
		hbmail.getChildren().addAll(lblmail,txtmail);
		hbmail.setSpacing(10);
		// HBox enthält die Elemente label zur beschriftung Passwort und das Textfeld dazu
		Label lblpass = new Label("Passwort :");
		final TextField txtpass = new TextField();
		HBox hbpass = new HBox();
		hbpass.getChildren().addAll(lblpass, txtpass);
		hbmail.setSpacing(10);
		//Knopf zum übernehmen der gesamten einstellungen 
				Button btnaccept = new Button();
				btnaccept.setLayoutX(200);
				btnaccept.setLayoutY(80);
				btnaccept.setText("Einstellungen übernehmen");
				btnaccept.setOnAction(new EventHandler<ActionEvent>(){
						public void handle(ActionEvent event) {
							// Hier Klassenaufruf für Einstellungen übernehmen ===>>> Auslesen allerfelder+übergabe Start
							try {
								JavaFXSchreiber schreibjetzt = new JavaFXSchreiber("START",txtsave.getText(),txtrating.getText(),txtfps.getText(),txtrec.getText(),txtmail.getText(),txtpass.getText());
							} catch (IOException e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
						}
				});
				// btn1 - der Startknopf - an dem das Unheil seinen Lauf nimmt
				Button btn1 = new Button();
				btn1.setLayoutX(100);
				btn1.setLayoutY(80);
				btn1.setText("START");
				btn1.setOnAction(new EventHandler<ActionEvent>()  {
					public void handle(ActionEvent event) {
						//////////////////////////// Hier Aufruf der START Klasse zum starten des Streams ///////////////////////////////////////
						String stru = txtmail.getText();
						String strpw = txtpass.getText();
						try {
						JavaFXmailer KamMail = new JavaFXmailer(stru,strpw);
						} catch (Exception e){
					
						}
				}
				});
		// Die Gruppe root nimmt die Menüleiste auf
		//root.getChildren().add(mleiste);  ====  >>>>>>>>>>>>>>>>>>>>> geopfert wg. Formatierung
		// Die Gruppe root nimmt zusätzlich die Layouttabelle auf - Wichtig die Reihenfolge beachten
		root.getChildren().add(Layouttab);
		//Ab hier nimmt die Layouttabelle die einzelnen Elemente auf und positioniert sie über X,Y koordinaten
		Layouttab.add(btn1,0,3); // ===== >>>>> Rausnehmen wenn Media Player bereit
		//Layouttab.add(hbmed,0,3); ==== >>>> Einfügen wenn Media Player bereit
		Layouttab.add(hbsave,0,6);
		Layouttab.add(btnsave, 1, 6);
		//Layouttab.add(mleiste, 0, 0);  ========= >>>>>>>>>>>>  geopfert wg Formatierung
		Layouttab.add(hbrating, 0, 4);
		Layouttab.add(hbfps, 0, 5);
		Layouttab.add(hbrec, 0, 7);
		Layouttab.add(hbmail, 0, 8);
		Layouttab.add(hbpass,0,9);
		Layouttab.add(btnaccept,0,10);
		//Ein-/Ausschalten der Linien der Gridpane
		Layouttab.setGridLinesVisible(false);
		//die primarystage bekommt die anzeigefläche zugewiesen mit allen Elementen die zuvor aufgenommen wurden
		primaryStage.setScene(Anzeigefl);
		//Fenster anzeigen
		primaryStage.show();
		
	}
	
	 

}
 
Du kannst dem Textfield einen Listener hinzufügen. Dieser reagiert auf jeden Tastendruck wenn das Textfield ausgewählt wurde. Überprüfe die Eingabe auf Gültigkeit fertig
 
Hallo und danke leider habe ich wirklich bisher noch nicht so die große ahnung von java und javafx wie würde der befehl in meinem code aussehen und wo wird er plaziert?
 
warum so kompliziert? lass den user einfach seine zahlen eingeben -> dann muss er auf einem button klicken. sobald der button geklickt wurde überprüfst du die eingabe auf richtigkeit, falls richtig -> neues fenster "glückwunsch war richtig", -> falls falsch "Leider liegt ihre zahl nicht zwischen 5-30!".
 
also ich habe jetzt eine neue Klasse angelegt mit dem Code

Java:
package neueGui;


	import javafx.scene.control.TextField;
	 
	public class txtfps extends TextField 
	{
	    
	    @Override public void replaceText(int start, int end, String text) {
	           if (text.matches("[0-9]") || text == "") {
	               super.replaceText(start, end, text);
	           }
	       }
	     
	       @Override public void replaceSelection(String text) {
	           if (text.matches("[0-9]") || text == "") {
	               super.replaceSelection(text);
	           }
	       }
	 
	}

Wie kann ich diesen in der main aufrufen? und ist dieser überhaupt richtig?
 
Zuletzt bearbeitet:
Wie kann ich diesen in der main aufrufen? und ist dieser überhaupt richtig?

So wie du in der main-Methode im Anfangspost dein TextField verwendest, kannst du nun stattdessen dein txtfps verwenden! 😉

Java:
package neueGui;
	import javafx.scene.control.TextField;
	 
	public class txtfps extends TextField 
	{
	    
	    @Override public void replaceText(int start, int end, String text) {
	           if (text.matches("[0-9]") || text == "") {
	               super.replaceText(start, end, text);
	           }
	       }
	     
	       @Override public void replaceSelection(String text) {
	           if (text.matches("[0-9]") || text == "") {
	               super.replaceSelection(text);
	           }
	       }
	 
	}

Klassennamen sollten Groß geschrieben werden und versuche keine Abkürzungen zu verwenden -> FramesPerSecondTextfield
Schreibe das "@Override" über die Methodensignatur nicht in die gleiche Zeile.

Generell erschließt sich mir der Nutzen dieser Klasse nicht? Warum leitest du von TextField ab? Du erweiterst die Funktionalität der Klasse nicht wirklich.
 
Zuletzt bearbeitet:
hmmm.... dann weiss ich auch nicht weiter suche jetzt schon insgesamt 6 Stunden im Internet wegen dem Zeug und mein Dozent meinte das sollte heut fertig sein ich glaube mir fehlt einfach das Grundwissen um dies 2 Aufgaben zu lösen....🙁

Wenn mir das ganze jemand zeigen könnt an hand meines Codes würde mir das ganze vllt beim Verständnis helfen.
 
Java:
hbfps.textProperty().addListener(new ChangeListener<String>() {
    @Override
    public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
        // Hier füge deine Überprüfung ein ob ein gültiger Wert eingegeben wurde, 
        // wenn ja --> passt du musst nichts tun
        // wenn nein --> dann setze den alten Wert oder zeige eine Fehlermeldung an, je nachdem was du dir gedacht hat
    }
});

Hier das sollte dir schon weiter helfen.
 

Zurück
Oben