我有三个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;
}
}