0

私はこのようなテキストフィールドを実装しようとしています:

TextField 検証 http://imageshack.com/a/img537/8329/FSht8P.png

私の目標は、TextField のテキストが a であるDoubleか、それ以外であるかを識別することです (その後、赤で表示されます)。ControlsFXを使ってライブラリを学習し、css を編集しないようにしたいのですが、うまく機能せず、javadoc で迷っています。誰かが例を持っているか、私のコードを改善するのを手伝ってくれますか?

ここで私がやろうとしたこと:

Validator<Double> checkTextField = new Validator<Double>() {

        @Override
        public ValidationResult apply(Control t, Double u) {
            ValidationResult vd = new ValidationResult();
            if(Double.valueOf(t.toString()) != null){
                vd.addErrorIf(t, "false", false);
            }
            return vd;

        }

    };


    ValidationSupport validationSupport = new ValidationSupport();
    validationSupport.registerValidator(latitudeTextField,  checkTextField/*Validator.createEmptyValidator("Text is required")*/);
    ValidationDecoration iconDecorator = new GraphicValidationDecoration();
    ValidationDecoration cssDecorator = new StyleClassValidationDecoration();
    ValidationDecoration compoundDecorator = new CompoundValidationDecoration(cssDecorator, iconDecorator);
    validationSupport.setValidationDecorator(compoundDecorator);
4

1 に答える 1

3

あなたは確かにいくつかの間違いを犯します。まず、ControlsFX Showcaseをご覧ください。ショーケースには常にいくつかのコード例があります。

次に、あなたの例では、TextField が Double を Validator に提供することを期待していますが、おそらく TextField 自体は String でのみ動作することを知っているので、String Validator が必要になります。

次に、control.toString() が出力するものを試します。これは、おそらくそれが表すテキストではなく、コントロール自体に関する何らかの情報です。必要なのは、現在テキストフィールドに表示されているテキストです。この場合、テキスト値はすでに値パラメーター 'u' の形式で提供されているため、コントロールに問い合わせる必要はありません。

ここでやりたいことは、String を double に解析できるかどうかを確認することです。Documentionから、これが事実であるかどうかを確認するための正規表現を見つけることができます (ケースに適した正規表現があるかどうかはわかりません)。

したがって、すべてまとめると次のようになります。

    ValidationSupport support = new ValidationSupport();

    Validator<String> validator = new Validator<String>()
    {
      @Override
      public ValidationResult apply( Control control, String value )
      {
        boolean condition =
            value != null
                ? !value
                    .matches(
                        "[\\x00-\\x20]*[+-]?(((((\\p{Digit}+)(\\.)?((\\p{Digit}+)?)([eE][+-]?(\\p{Digit}+))?)|(\\.((\\p{Digit}+))([eE][+-]?(\\p{Digit}+))?)|(((0[xX](\\p{XDigit}+)(\\.)?)|(0[xX](\\p{XDigit}+)?(\\.)(\\p{XDigit}+)))[pP][+-]?(\\p{Digit}+)))[fFdD]?))[\\x00-\\x20]*" )
                : value == null;

        System.out.println( condition );

        return ValidationResult.fromMessageIf( control, "not a number", Severity.ERROR, condition );
      }
    };

    support.registerValidator( textfield, true, validator );
于 2015-04-13T16:01:00.520 に答える