JavaFX Textfields: Fortschritt als ProgressBar und Progressindicator

Blah123

Mitglied
Hallo zusammen,

ich arbeite mich gerade etwas in Java und JavaFx ein.
Ich will einfach eine kleine GUI entwickeln mit zwei Textfeldern, einem Progressbar sowie einem Progressindicator. Darauf soll dargestellt werden wieviel % meiner Textfelder ausgefüllt wurden.
D.h. wenn ein Textfeld mit Text befüllt ist 50%, wenn 2 befüllt sind, dann 100%.

Ich habe das über einen Button gelöst. Der ruft dann eine Methode auf, die Checkt, ob ein TF leer ist und wenn nicht, dann wird der Fortschritt erhöht.

Java:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import javafx.scene.control.*;
import javafx.event.*;
import javafx.geometry.*;
import javafx.scene.Cursor;
import javafx.scene.paint.Color;
import javafx.geometry.Insets;
import javafx.scene.layout.*;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 16.11.2017
  * @author
  */

public class fxtest extends Application {
  // Anfang Attribute
  private TextField tf_weight = new TextField();
  private TextField tf_size = new TextField();
  private Button button1 = new Button();
  private ProgressBar progressBar1 = new ProgressBar();
  private ProgressIndicator progressIndicator1 = new ProgressIndicator();
 
  //Fortschritt für die Progressindicators
  double fortschritt=0;
 
  // Ende Attribute
 
  public void start(Stage primaryStage) {
  
    Pane root = new Pane();
    Scene scene = new Scene(root, 604, 678);
    // Anfang Komponenten
  
    tf_weight.setLayoutX(152);
    tf_weight.setLayoutY(32);
    tf_weight.setPrefHeight(49);
    tf_weight.setPrefWidth(193);
    root.getChildren().add(tf_weight);
    tf_size.setLayoutX(152);
    tf_size.setLayoutY(96);
    tf_size.setPrefHeight(49);
    tf_size.setPrefWidth(193);
    root.getChildren().add(tf_size);
    button1.setLayoutX(160);
    button1.setLayoutY(176);
    button1.setPrefHeight(41);
    button1.setPrefWidth(169);
    root.getChildren().add(button1);
    button1.setOnAction(
      (event) -> {button1_Action(event);}
    );
    progressBar1.setLayoutX(96);
    progressBar1.setLayoutY(288);
    progressBar1.setPrefHeight(41);
    progressBar1.setPrefWidth(225);
  
    root.getChildren().add(progressBar1);
    progressIndicator1.setLayoutX(384);
    progressIndicator1.setLayoutY(264);
    progressIndicator1.setPrefHeight(97);
    progressIndicator1.setPrefWidth(129);
    root.getChildren().add(progressIndicator1);
    progressIndicator1.setProgress(0);
  
    tf_weight.setPromptText("weight");
    tf_weight.setText("");
    tf_size.setCursor(Cursor.DEFAULT);
    tf_size.setPromptText("size");
  
  
    // Ende Komponenten
  
    primaryStage.setOnCloseRequest(e -> System.exit(0));
    primaryStage.setTitle("fxtest");
    primaryStage.setScene(scene);
    primaryStage.show();
  } // end of public fxtest
 
  // Anfang Methoden
 
  public static void main(String[] args) {
    launch(args);
  } // end of main
 
  public void button1_Action(Event evt) {
    // TODO hier Quelltext einfügen
    progressCheck();
  
  
  } // end of button1_Action
  private Separator separator1 = new Separator();


  //Checkt, wie viele Textfelder einen Inhalt haben und passt Progressbar sowie ProgressIndicator an
  public void progressCheck(){
  
    //Je nachdem wie viele Textfelder ich habe, muss ich den Teiler anpassen
    //Bei zwei Textfeldern ist der teiler pro Textfeld 1/2. Bei Drei ist er bei 1/3
  
    double teiler=(double)1/2;
        
    if ((tf_weight.getText().trim().length()>0)) {
       fortschritt=fortschritt+teiler;
       
       progressBar1.setProgress(fortschritt);
       progressIndicator1.setProgress(fortschritt);
    } // end of if
  
    if ((tf_size.getText().trim().length()>0)) {
       fortschritt=fortschritt+teiler;
       
       progressBar1.setProgress(fortschritt);
       progressIndicator1.setProgress(fortschritt);
    } // end of if
  
    //progressIndicator1.setProgress(0.8);
    }
  // Ende Methoden
} // end of class fxtest


Dazu ein paar Fragen:
1. Im Moment muss ich immer den Umweg über den Button gehen. Wie stellt man denn sicher, dass immer wenn ich ein Textfeld verlasse, die Methode ProgressCheck() aufgerufen wird. Man benötigt sicher irgendeinen Listener?! Weiss aber nicht wie das geht.


2. Bei mir ist der Focus immer Standardmäßig auf dem Textfeld tf_weight und der PromptText ist deswegen nicht sicherbar. Kann man den Focus irgendwie entfernen (kenne nur .requestFocus(). Aber worauf soll ich den Focus setzen?


Vielen Dank schonmal
Robert
 

Tronert

Mitglied
Zu 1. Du könntest dem textProperty des Textfeldes einen ChangeListener geben, sodass ProgressCheck() immer nach einem Verändern des Textes in diesem Feld aufgerufen wird.
Java:
textField.textProperty().addListener(e->{
        //Das wird immer ausgeführt, wenn der Text im Feld verändert wird.
});

Zum 2.: Wenn die TextFelder den Fokus nicht haben, kannst du in sie (soweit ich weiß) nichts schreiben, weshalb du ihn sowieso nicht dauerhaft auf ein anderes Objekt setzten kannst.
 

dzim

Top Contributor
Das Beispiel (bzw. das Lambda) oben dürfte den InvalidationListener erfüllen, was hier gewollte ist ist eher
Java:
textField.textProperty().addListener((observable, oldValue, newValue) -> {
        //Das wird immer ausgeführt, wenn der Text im Feld verändert wird.
});
 

Tronert

Mitglied
Was unterscheidet den InvalidationListener in diesem Fall vom ChangeListener? Ich habe die beiden noch nie so richtig auseinander halten können aber bei mir erfüllen beide den Zweck.
 

dzim

Top Contributor
Naja, du willst eigentlich nicht wissen, wann ein ObservableValue invalid wird:
https://docs.oracle.com/javase/8/javafx/api/javafx/beans/InvalidationListener.html
Sondern stattdessen, wann er sich ändert:
https://docs.oracle.com/javase/8/javafx/api/index.html?javafx/beans/Observable.html
Eigentlich ist hier der Name entscheidend. Ich glaube mich zu erinnern, dass der erste Listener nicht unbedingt immer gefeuert werden muss. Wenn es bei dir klappt: Gut, aber es kann auch eben mal nicht funktionieren, daher würde ich eher einfach den dafür vorgesehenen und semantisch bereits korrekten ChangeListener verwenden.
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...
Ähnliche Java Themen
  Titel Forum Antworten Datum
S JavaFX: voneinander abhängige TextFields AWT, Swing, JavaFX & SWT 33
M If für viele TextFields AWT, Swing, JavaFX & SWT 7
F In Action Listener TextFields einlesen und prüfen. Abbruch bei falschen Eingaben. Wie mache ich das? AWT, Swing, JavaFX & SWT 2
S ComboBox-Werte aus einem Array an Textfields übergeben AWT, Swing, JavaFX & SWT 3
M Event Handling TextFields und Suchfunktion AWT, Swing, JavaFX & SWT 10
M Swing Butten & TextFields aus Applet im JFrame nicht sichtbar AWT, Swing, JavaFX & SWT 2
F KontextMenü auf allen Textfields im Frame AWT, Swing, JavaFX & SWT 2
N Eingabe eines Textfields weiterverwenden AWT, Swing, JavaFX & SWT 6
I Textfields dynamisch erzeugen AWT, Swing, JavaFX & SWT 4
S Scrollbares Bild und Unsichtbare TextFields AWT, Swing, JavaFX & SWT 7
loadbrain auslesen der Werte dynamischer Textfields AWT, Swing, JavaFX & SWT 21
V Fehlerbehandlung bei leeren TextFields AWT, Swing, JavaFX & SWT 18
H TextFields anordnen AWT, Swing, JavaFX & SWT 8
G Unterschiedliche Textfields ansprechen AWT, Swing, JavaFX & SWT 4
izoards Ordner Rekursiv kopieren - Fortschritt? AWT, Swing, JavaFX & SWT 5
1 Swing Progressbar benutzen um Fortschritt einer Methode anzuzeigen AWT, Swing, JavaFX & SWT 4
T SWT Fortschritt, GUI blockiert Abarbeitung AWT, Swing, JavaFX & SWT 0
F Progressbar Farbe AWT, Swing, JavaFX & SWT 6
T Swing Reload JPanel + darin liegende ProgressBar AWT, Swing, JavaFX & SWT 9
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
P JavaFx - Progressbar - Füllen mittels mehreren Tasks AWT, Swing, JavaFX & SWT 0
Bluedaishi JavaFX ProgressBar AWT, Swing, JavaFX & SWT 10
T Starten des Programms mit dem Progressbar AWT, Swing, JavaFX & SWT 2
L Progressbar Laufzeitveränderung AWT, Swing, JavaFX & SWT 4
MR._FIRE_Flower progressBar in ein bestehendes Programm einbauen AWT, Swing, JavaFX & SWT 3
M Wie binde ich eine JavaFX ProgressBar an eine Datei Übertragung? AWT, Swing, JavaFX & SWT 2
Z Swing Swing und die Progressbar AWT, Swing, JavaFX & SWT 1
I JavaFX Im Controller die ProgressBar mit Task updaten AWT, Swing, JavaFX & SWT 6
R LookAndFeel Wie kann man die Textfarbe der Nimbus ProgressBar nach Füllstand ändern? AWT, Swing, JavaFX & SWT 2
M JavaFX Progressbar bar und track Komponente zur Laufzeit ändern AWT, Swing, JavaFX & SWT 2
Z ProgressBar in Eclipse mit Wizard page? AWT, Swing, JavaFX & SWT 1
W Swing ProgressBar update AWT, Swing, JavaFX & SWT 4
A JavaFX Eine Task mit einer ProgressBar verbinden AWT, Swing, JavaFX & SWT 0
H Nimbus ProgressBar Colors AWT, Swing, JavaFX & SWT 9
P Swing Die ProgressBar wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
B SWT Progressbar mit Textoverlay? AWT, Swing, JavaFX & SWT 3
M ProgressBar in ActionListener AWT, Swing, JavaFX & SWT 4
T Prozessstatus in Progressbar anzeigen AWT, Swing, JavaFX & SWT 5
J Swing Progressbar aktualisiert sich nicht AWT, Swing, JavaFX & SWT 17
V Persistentes Objekt laden Progressbar AWT, Swing, JavaFX & SWT 7
V Swing Progressbar Problem AWT, Swing, JavaFX & SWT 14
B ProgressBar während Berechnung AWT, Swing, JavaFX & SWT 4
Tobse LookAndFeel [Windows7] Nativ aussehnde ProgressBar AWT, Swing, JavaFX & SWT 13
J Progressbar mit einfacher Funktion AWT, Swing, JavaFX & SWT 6
D Progressbar AWT, Swing, JavaFX & SWT 5
H Zeile in DefaultTableModel hinzufügen, ProgressBar AWT, Swing, JavaFX & SWT 4
S Upload Progressbar AWT, Swing, JavaFX & SWT 3
S Dateien kopieren mit ProgressBar AWT, Swing, JavaFX & SWT 6
S Swing ProgressBar AWT, Swing, JavaFX & SWT 3
S SWT ProgressBar: Value/Selection anzeigen AWT, Swing, JavaFX & SWT 4
D SWT JFace Wizard Progressbar AWT, Swing, JavaFX & SWT 4
S ProgressBar newRunnable (schon wieder!) AWT, Swing, JavaFX & SWT 9
ModellbahnerTT Progressbar anzeigen AWT, Swing, JavaFX & SWT 5
J Progressbar aktualisierung nach file übergabe AWT, Swing, JavaFX & SWT 7
P Progressbar in java AWT, Swing, JavaFX & SWT 3
K Frage zu ProgressBar, SwingWorker etc. AWT, Swing, JavaFX & SWT 4
V ProgressBar AWT, Swing, JavaFX & SWT 5
D Suche verticale Progressbar AWT, Swing, JavaFX & SWT 2
M Bug; Swing-Worker, Progressbar und Mouse AWT, Swing, JavaFX & SWT 22
P [SWT] - ProgressBar, Prozentzahlen live anzeigen geht nicht AWT, Swing, JavaFX & SWT 13
P JTable sortiert ProgressBar nicht AWT, Swing, JavaFX & SWT 8
L Button ändert eigenes Bild und Progressbar-Value nicht AWT, Swing, JavaFX & SWT 6
B Eine Alternative zur Steuerung einer ProgressBar? AWT, Swing, JavaFX & SWT 5
N ProgressBar --> brauche Hilfe AWT, Swing, JavaFX & SWT 4
G Progressbar aktualisiert sich nicht (vernünftig). WIESO? AWT, Swing, JavaFX & SWT 2
S Anzeige einer Progressbar. AWT, Swing, JavaFX & SWT 3
M Bild laden + ProgressBar AWT, Swing, JavaFX & SWT 2
C Problem mit ProgressBar AWT, Swing, JavaFX & SWT 4
thE_29 Problem mit ProgressBar AWT, Swing, JavaFX & SWT 2
M ProgressBar in einem Thread? AWT, Swing, JavaFX & SWT 4
C ProgressBar AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben