2013-06-25 14 views
8

Ho una domanda sulla funzionalità di bind in JavaFX. Quello che voglio è associare 2 proprietà di stringa. Ma i loro valori non dovrebbero essere uguali.JavaFX: Bind StringProperty con prefisso di stringa costante

Let me di fare un esempio:

Ho uno StringProperty con rappresenta l'ultimo progetto aperto nella mia applicazione.
Il valore è come "C: \ temp \ myProject.prj".
Voglio mostrare questo percorso nel titolo della mia finestra.
E 'facile: stage.titleProperty().bind(lastprojectProperty());
Ma io non voglio mostrare solo il percorso del progetto, ma anche il nome dell'applicazione,
es .: MyApplication 2.2.4 - C: \ temp \ myProject.prj.

È possibile utilizzare la rilegatura e aggiungere una stringa di prefisso costante? O devo usare un ChangeListerner?

La soluzione con il ChangeListener ha il problema con i valori iniziali ...

final StringProperty path = new SimpleStringProperty("untitled"); 
    final StringProperty title = new SimpleStringProperty("App 2.0.0"); 

    path.addListener(new ChangeListener<String>() 
    { 
     @Override 
     public void changed(ObservableValue<? extends String> ov, String t, String newValue) 
     { 
      title.setValue("App 2.0.0 - " + newValue); 
     } 
    });     

    // My title shows "App 2.0.0" since there is now change event throws until now... 
    // Of course I could call path.setValue("untitled"); 
    // And above path = new SimpleStringProperty(""); 
    System.out.println(title.getValue()); 

    // Now the title is correct: "App 2.0.0 - C:\temp\myProject.prj" 
    path.setValue("C:\\temp\\myProject.prj"); 
    System.out.println(title.getValue()); 

risposta

18

Se fate qualcosa di simile

StringProperty prop = new SimpleStringProperty(); 
StringProperty other = new SimpleStringProperty(); 

prop.bind(Bindings.concat("your prefix").concat(other)); 

vostra proprietà sarà legano con il prefisso si desidera

+0

agonist_ grazie mille! Sei grande! Questo è exactyl quello che volevo !!! Funziona! Molto più facile senza ChangeListener. –

+0

Nessun problema, i binding JavaFX sono davvero potenti, puoi fare probabilmente tutto ciò che vuoi –