2017-04-04 6 views
1

JavaFXテキストフォーマッタに問題が発生しました。私が何か間違っているのか、Java JDKにバグがあるのか​​不思議でした。ボタンを数回クリックしJavaFX TextFormatterのヌルテキストでの問題

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.TextField; 
import javafx.scene.control.TextFormatter; 
import javafx.scene.layout.BorderPane; 
import javafx.stage.Stage; 

public class TestApp extends Application { 
    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage primaryStage) { 
     TextField field = new TextField("test0"); 
     field.setTextFormatter(new TestTextFormatter()); 
     Button btn = new Button(); 
     btn.setText("Test"); 
     btn.setOnAction(e -> { 
      field.setText(null); 
      field.setText("test"); 
     }); 
     BorderPane root = new BorderPane(); 
     root.setTop(btn); 
     root.setCenter(field); 
     primaryStage.setScene(new Scene(root, 300, 250)); 
     primaryStage.show(); 
    } 
    class TestTextFormatter extends TextFormatter<String> { 
     public TestTextFormatter() { 
      super(c -> { 
       System.out.println("newControlText=" + c.getControlNewText()); 
       return c; 
      }); 
     } 
    } 
} 

:ここ

は、問題を示したコードです。 初めて期待 出力があるように動作します: newControlText = TEST0 newControlText = newControlText =テスト

第二に、すべての次の試みは、例外が発生します。問題がどこにある

Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: The start must be <= the end 
    at javafx.scene.control.TextInputControl.getText(TextInputControl.java:446) 
    at javafx.scene.control.TextInputControl$TextInputControlFromatterAccessor.getText(TextInputControl.java:1609) 
    at javafx.scene.control.TextFormatter$Change.getControlNewText(TextFormatter.java:453) 
    at TestApp$TestTextFormatter.lambda$0(TestApp.java:34) 
    at javafx.scene.control.TextInputControl.filterAndSet(TextInputControl.java:1165) 
    at javafx.scene.control.TextInputControl.access$900(TextInputControl.java:79) 
    at javafx.scene.control.TextInputControl$TextProperty.doSet(TextInputControl.java:1410) 
    at javafx.scene.control.TextInputControl$TextProperty.set(TextInputControl.java:1323) 
    at javafx.scene.control.TextInputControl.setText(TextInputControl.java:349) 
    at TestApp.lambda$0(TestApp.java:21) 
    at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) 
    at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) 
... 

あなたは私を理解するのに役立つてもらえ(私のコードまたはJDK)?

答えて

1

あなたはイベント内のテキストを変更しようとしているこの回答https://stackoverflow.com/a/32893573/814304

に見てください、それは正確にあなたがすると仮定ではありません。

+1

この問題は、テキストプロパティ変更リスナー内のテキストフィールドのテキスト値を変更することに関連しています。これは、質問のサンプルコードが行うべきことではなく、少なくとも直接的ではありません。スタックトレースではこれが正しいとはいえ、この問題は投稿されたコードではなくJavaFXライブラリコードにあるように見えます。おそらく何か:http://bugreport.java.com – jewelsea

+0

ボタンアクションEventHandlerのテキストフィールドのテキストを変更します。私はそうする権利がありますか? 回避策の一種はnullの代わりに空の文字列 ""を設定することです - その後、私は例外なしで何度もボタンをクリックできます。 また、私はそれをオラクルに報告しました。 – Wojtek

+0

textfield.clear()も正しく動作します – Wojtek

関連する問題