我在“开始”方法中创建了一个空的TextField test
和一个空的TextField test2
public void start(Stage primaryStage) throws Exception {}
现在,我想不断检查是否test.getText().equals("")
。如果是,则为test2.setEditable(false)
,否则为test2.setEditable(true)
。
我不知道如何实现它,因为它需要不断检查。
我已经尝试在start
方法中实现if语句,并且实际上在开始时将test2
上的notEditable
设置为test
为空,但是当{ {1}}更改为test.getText().equals("")
!test.getText().equals("")
仍不可编辑。
答案 0 :(得分:1)
您可以通过将editable
的{{1}}属性绑定到test2
的{{1}}属性来实现。
text
test
的{{1}}属性是import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
TextField test = new TextField();
TextField test2 = new TextField();
// do the binding
test2.editableProperty().bind(test.textProperty().isEmpty().not());
VBox root = new VBox(20, test, test2);
root.setAlignment(Pos.CENTER);
root.setPadding(new Insets(50));
primaryStage.setScene(new Scene(root, 300, 150));
primaryStage.setTitle("Example");
primaryStage.show();
}
}
。此类具有方法text
(由TextField
继承),该方法返回StringProperty
,如果isEmpty
的值为空或null,则该StringExpression
将容纳BooleanBinding
。 true
调用会否定StringProperty
的值,这意味着not()
仅在BooleanBinding
的文本为 not 为空时才可编辑。>
答案 1 :(得分:0)
您不必一直检查,而是可以听这样的更改:
test.textProperty().addListener((observable, oldValue, newValue) -> {
if (newValue.equals("")) {
test2.setEditable(false);
}
);