[英]Bind JavaFX TextField to a String value from two SimpleStringValues
我有三個JavaFX TextField,一個用於名稱,一個用於域,最后一個用於FQDN(完全限定域名)。
我有一個包含名稱,域和FQDN的SimpleStringProperties的類。 我無法為FQDN創建綁定,該綁定采用SimpleStringProperty name和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);
}
}
無法真正理解為什么你會將Data
類中的所有內容設為靜態,但是:
public class Data {
static StringProperty name = new SimpleStringProperty();
static StringProperty domain = new SimpleStringProperty();
static StringProperty FQDN = new SimpleStringProperty();
static {
FQDN.bind(Bindings.format("%s@%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;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.