2013-11-28 26 views
9

Tôi có một fxml đơn giản với một trường văn bản và một nút. Tôi muốn tắt nút nếu trường văn bản trống. Vì vậy, tôi chèn một cái gì đó như sau trong bộ điều khiển của tôi:JavaFX liên kết với nhiều thuộc tính

@Override 
public void initialize(URL url, ResourceBundle bundle) { 
    button.disableProperty().bind(textField.textProperty().isEqualTo("")); 
} 

..và hoạt động tốt. Vấn đề là khi tôi thêm một trường văn bản thứ hai và muốn nút của tôi bị vô hiệu hóa nếu một trong hai trường văn bản trống. Vậy phải làm gì? Tôi cố gắng điều sau đây, nhưng điều đó không làm việc:

@Override 
public void initialize(URL url, ResourceBundle bundle) { 
    button.disableProperty().bind(textField.textProperty().isEqualTo("")); 
    button.disableProperty().bind(textField2.textProperty().isEqualTo("")); 
} 

Trả lời

15

Điều này có thể bằng cách gắn vào một biểu thức boolean qua Bindings:

button.disableProperty().bind(
    Bindings.and(
     textField.textProperty().isEqualTo(""), 
     textField2.textProperty().isEqualTo(""))); 
+1

.textProperty(). IsEmpty() - có vẻ là một cách tiếp cận tốt hơn cho tôi. –

5

Ngoài cách tiếp cận Andreys, tôi thấy rằng bạn cũng có thể làm điều đó như thế này:

BooleanBinding booleanBinding = 
     textField.textProperty().isEqualTo("").or(
     textField2.textProperty().isEqualTo("")); 

    button.disableProperty().bind(booleanBinding); 
1

Ngoài martin_dk câu trả lời, nếu bạn muốn để ràng buộc hơn hai thuộc tính bạn sẽ nhận được mã như dưới đây, trông lạ, nhưng nó hoạt động.

BooleanBinding booleanBinding 
     = finalEditor.selectedProperty().or(
       staticEditor.selectedProperty().or(
         syncEditor.selectedProperty().or(
           nativeEditor.selectedProperty().or(
             strictEditor.selectedProperty())))); 

abstractEditor.disableProperty().bind(booleanBinding); 
Các vấn đề liên quan