簡體   English   中英

將JavaFX TextField綁定到兩個SimpleStringValues的String值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM