JavaFX Bind StringProperty zu IntegerProperty mit Formatierung

godi

Aktives Mitglied
Hallo,
ich habe ein StringProperty welches von einem IntegerProperty abhängig sein sollte. Dazwischen soll aber eine Formatierung ausgeführt werden.
Z.B. Beinhaltet mein IntegerProperty eine Zeit in ms und in meinen StringProperty soll die Zeit in Sekunden mit zwei Nachkommastellen und sec als Unit angehängt sein.

Mit Listener könnte es folgend umgesetzt werden:
Java:
public class UnitBinding {

    private static IntegerProperty time = new SimpleIntegerProperty(0);
    private static StringProperty timeStr = new SimpleStringProperty();
    
    
    public static void main(String[] args) {
        // Add time listener
        time.addListener((obs, oldVal, newVal) -> updateTimeStr());
                
        // Init timeStr
        updateTimeStr();
        
        // Test
        System.out.println(timeStr.get());
        time.set(1234);
        System.out.println(timeStr.get());
        
    }
    
    private static void updateTimeStr() {
        timeStr.set(String.format("%.2f", time.get()/1000.0) + "sec");
    }

}

Mit Binding "timeStr.bind" und irgendein Formatter sollte dies doch auch funktioniere. Ich finde da aber leider nicht den richtigen Ansatz, deshalb meine Frage:

Wie funktioniert dies mit Binding?
 

mihe7

Top Contributor
Bin zwar nicht in JavaFX unterwegs, aber wenn ich es richtig sehe, könntest Du
Java:
StringExpression expr = Bindings.format(".2f", time).concat(timeStr);
verwenden.

Nachtrag: die Division fehlt...
Java:
StringExpression expr = Bindings.format(".2f", Binings.divide(time, 1000.0)).concat(timeStr);
 

godi

Aktives Mitglied
Danke, ja so klappts:

Java:
timeStr.bind(Bindings.format("%.2f", Bindings.divide(time, 1000.0)).concat("sec"));

Bzw der ganze Code Vollständigkeitshalber:

Code:
public class UnitBinding {

    private static IntegerProperty time = new SimpleIntegerProperty(200);
    private static StringProperty timeStr = new SimpleStringProperty();
    
    
    public static void main(String[] args) {
        
        timeStr.bind(Bindings.format("%.2f", Bindings.divide(time, 1000.0)).concat("sec"));
        
        // Test
        System.out.println(timeStr.get());
        time.set(1234);
        System.out.println(timeStr.get());
                
    }
    
}
 

Ähnliche Java Themen


Oben