3

私はjavafx編集可能なComboBoxを持っています。
value プロパティは、ComboBox を終了するだけでなく、Enter キーを押したときにのみ更新されます。
フォーカスされていないコントロールがその値プロパティに反映されていない値を表示するのは奇妙であるため、設計機能ではなくバグのように思えます。

問題を示す SSCE を次に示します。

import javafx.application.Application;
import javafx.beans.*;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class T02 extends Application {

public static void main (String [] args) { launch(args); }

@Override public void start(Stage stage) throws Exception {

    System.out.println("javafx.runtime.version: " + System.getProperties().get("javafx.runtime.version"));

    VBox vbox = new VBox();

    //this combobox is the object of the investigation
    final ComboBox comboBox = new ComboBox();
    comboBox.setEditable(true);
    vbox.getChildren().add(comboBox);

    //I need another component just to allow the ComboBox to loose the focus
    TextField textField = new TextField();
    vbox.getChildren().add(textField);

    //And here it is: when comboBox looses focus, i print its state
    comboBox.focusedProperty().addListener(new InvalidationListener() {
        @Override public void invalidated(Observable observable) {
            //return if it has the focus: i am just interested on focus lost
            if (comboBox.focusedProperty().get()) {return;}
            System.out.println(comboBox.getValue());
        }
    } );

    stage.setScene(new Scene(vbox));
    stage.show();
}

}


output:
[コンボに何か書いて、もう一方のコントロールをクリックします (またはタブを押します。同じです)]
null
[コンボを元に戻し、Enter キーを押してテキスト フィールドをクリックします]
こんにちは

、最初の null は奇妙です。おそらくバグがあります。私が前に言ったように。ジラで簡単に検索しましたが、この動作は見つかりませんでした。(たぶん気づいてない)

更新
OK、追加しました

System.out.println("javafx.runtime.version: " + System.getProperties().get("javafx.runtime.version"));

そして結果を得る:

javafx.runtime.version: 2.1.something

利用可能な最後のバージョンでバージョンをアップグレードしました:

javafx.runtime.version: 2.2.3-b05

そして、問題は消えます。

4

1 に答える 1

2

RT-21454 ComboBox 値で修正された関連するバグは、フォーカスが離れると更新されるはずです。

アップデート

AgostinoX は、にアップグレードすることで問題が解決したと報告していJavaFX 2.2.3-b05ます。

JavaFX アプリケーションの start メソッド内に次のコードを配置することで、使用している javafx のバージョンを確認できます。

System.out.println("javafx.runtime.version: " + System.getProperties().get("javafx.runtime.version"));
于 2012-11-13T03:00:39.283 に答える