0

私のプログラムにはいくつかのテキストフィールドがあります.ウェイターはランダムなテキストフィールドに製品の量を書き込む必要があり(テキストフィールドは数字のみを許可する必要があります)、どのテキストフィールドが入力されたかを知り、数字を取得する必要があります..いくつかのテキストフィールドが入力されています..

何か案は ?前もって感謝します..

4

1 に答える 1

1

このメソッドにより、TextField はすべての処理を完了できます (コピー/貼り付け/元に戻すことができます)。拡張クラスを作成する必要はありません。また、変更のたびに新しいテキストをどうするか (ロジックにプッシュするか、以前の値に戻すか、さらには変更するか) を決定できます。

  // fired by every text property change
textField.textProperty().addListener(
  (observable, oldValue, newValue) -> {
    // Your validation rules, anything you like
      // (! note 1 !) make sure that empty string (newValue.equals("")) 
      //   or initial text is always valid
      //   to prevent inifinity loop
    // do whatever you want with newValue

    // If newValue is not valid for your rules
    ((StringProperty)observable).setValue(oldValue);
      // (! note 2 !) do not bind textProperty (textProperty().bind(someProperty))
      //   to anything in your code.  TextProperty implementation
      //   of StringProperty in TextFieldControl
      //   will throw RuntimeException in this case on setValue(string) call.
      //   Or catch and handle this exception.

    // If you want to change something in text
      // When it is valid for you with some changes that can be automated.
      // For example change it to upper case
    ((StringProperty)observable).setValue(newValue.toUpperCase());
  }
);

あなたの場合、このロジックを内部に入れ、このリスナーをすべてのテキスト フィールドに追加します。完璧に動作します。

   if (newValue.equals("")) return; 
   try {
       // ammount entered
     Integer i = Integer.valueOf(newValue); 
       // TextField used
     TextField field = (TextField)((StringProperty)observable).getBean();
     // do what you want with this i and field
   } catch (Exception e) {
     ((StringProperty)observable).setValue(oldValue);
   }
于 2014-10-31T11:44:01.597 に答える