2014-06-09 68 views
2

我有三個JavaFX TextField,一個用於名稱,一個用於域,最後用於FQDN(完全限定域名)。將JavaFX TextField綁定到來自兩個SimpleStringValues的String值

我有一個包含名稱,域和FQDN的SimpleStringProperties的類。我無法爲FQDN創建綁定,該綁定採用在SimpleStringProperty名稱和SimpleStringProperty域中設置的值並創建SimpleStringProperty name @ domain。我試圖通過組合名稱和域來添加@然後添加@但我無法將它返回到SimpleStringProperty發送到FQDN的GUI。

我已經包含了我所做的一個粗略的例子。我有GUI和許多其他組件工作,我只是無法獲得FQDN正確報告。

我之前在Java Swing中通過添加一個ActionListener來監聽鼠標移動,然後更新該字段。我正在努力改善這一點。

public class Data { 
static SimpleStringProperty name = new SimpleStringProperty(); 
static SimpleStringProperty domain = new SimpleStringProperty(); 
static SimpleStringProperty FQDN = new SimpleStringProperty(); 

public static void setName(String string) { 
    name.set(string); 
} 

public static void setDomain(String string) { 
    domain.set(string); 
} 

public static ObservableStringValue getFQDN() { 
    FQDN.set(name.get() + "@" + domain.get()); 
    return FQDN; 
} 

}

public class GUI { 
TextField name = new TextField(); 
TextField domain = new TextField(); 
TextField FQDN = new TextField(); 

name.textProperty().addListener(new NameChange()); 
domain.textProperty().addListener(new DomainChange()); 
FQDN.textProperty().bind(Data.getFQDN()); 
} 

public class NameChange implements ChangeListener<String> { 

@Override 
public void changed(ObservableValue<? extends String> observable, 
                  String oldValue, 
                  String newValue) { 
    Data.setName(newValue); 
} 

}

public class DomainChange implements ChangeListener<String> { 

@Override 
public void changed(ObservableValue<? extends String> observable, 
                String oldValue, 
                String newValue) { 
    Data.setDomain(newValue); 
} 

}

回答

5

實在看不出爲什麼你會永遠做在Data類的一切靜態,但是:

public class Data { 
static StringProperty name = new SimpleStringProperty(); 
static StringProperty domain = new SimpleStringProperty(); 
static StringProperty FQDN = new SimpleStringProperty(); 

static { 
    FQDN.bind(Bindings.format("%[email protected]%s", name, domain)); 
} 

public static String setName(String string) { 
    name.set(string); 
} 

public static String setDomain(String string) { 
    domain.set(string); 
} 

public static ObservableStringValue getFQDN() { 
    return FQDN; 
} 
} 
+0

感謝您的幫助,我一直在挖掘這幾天試圖弄清楚這一點! – n0manarmy

相關問題