Как реализовать постоянно активный цикл для проверки изменений? - PullRequest
0 голосов
/ 24 декабря 2018

Я создал пустой TextField test и пустой TextField test2 в методе "start"

public void start(Stage primaryStage) throws Exception {}

Теперь я хочу постоянно проверять, если test.getText().equals("").Если это так, test2.setEditable(false), в противном случае test2.setEditable(true).

Я не знаю, как это реализовать, поскольку его нужно постоянно проверять.

Я уже пытался реализовать оператор if в методе start, и он фактически установил test2 в notEditable в начале, поскольку test пусто, но когда test.getText().equals("") изменено на !test.getText().equals("") test2, все еще не было доступно для редактирования.

Ответы [ 2 ]

0 голосов
/ 24 декабря 2018

Это можно сделать, связав свойство editable test2 со свойством text test.

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 (унаследованный StringExpression), который возвращает BooleanBinding, который будет содержать true, если значение StringProperty пусто или равно нулю.Вызов not() отменяет значение BooleanBinding, что означает, что test2 будет редактируемым, только если текст test не пуст.

0 голосов
/ 24 декабря 2018

Вместо того, чтобы постоянно проверять, вы можете просто прослушать такие изменения:

test.textProperty().addListener((observable, oldValue, newValue) -> {
  if (newValue.equals("")) {
     test2.setEditable(false);
  } 

);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...