0

テキスト ボックスを含むモーダル ダイアログが表示されます。ユーザーがテキスト ボックスの上にマウスを置き (TEXT カーソルが表示される)、Enter キーを押してダイアログを閉じると、カーソルは TEXT 状態のままになります。これまでのところ、プログラムで DEFAULT 状態に戻す方法は見つかりませんでした。メイン シーンで他のカーソル (HAND や MOVE など) を試してみると、うまくいきます。しかし、DEFAULT はそうではありません。

過去数か月以内にダウンロードしたときに「新鮮」だった JavaFx / JDK 1.7 を使用しています。私はWindows 8.1を使用しています。

私はウェブをかなり検索しましたが、それについての言及は見つかりませんでした。これは既知のバグですか? 誰かが回避策を提案したり、何が起こっているのか説明できますか?

コードサンプルは次のとおりです。ダイアログのテキスト編集をクリックし、カーソルがテキストになるようにマウスをテキストボックスの上に置き、Enter キーを押します。

package jfxtest;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Cursor;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Modality;
import javafx.stage.Stage;

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

    @Override public void start(final Stage primaryStage) {
        Button btn = new Button();
        btn.setText("Open Dialog");
        btn.setOnAction(
            new EventHandler<ActionEvent>() {
                @Override public void handle(ActionEvent event) {
                    final Stage dialog = new Stage();
                    dialog.initModality(Modality.APPLICATION_MODAL);
                    dialog.initOwner(primaryStage);

                    final TextField txt = new TextField("Hit Enter while I have focus and the mouse is over me!");
                    txt.setMinWidth(280);

                    Button btnOk = new Button("OK");
                    btnOk.setDefaultButton(true);
                    btnOk.setOnAction(
                        new EventHandler<ActionEvent>() {
                            @Override public void handle(ActionEvent event) {
                                // these don't work
                                txt.setCursor(Cursor.DEFAULT);
                                dialog.getScene().setCursor(Cursor.DEFAULT);
                                primaryStage.getScene().setCursor(Cursor.DEFAULT);

                                dialog.close();

                                // and these don't work
                                txt.setCursor(Cursor.DEFAULT);
                                dialog.getScene().setCursor(Cursor.DEFAULT);
                                primaryStage.getScene().setCursor(Cursor.DEFAULT);
                            }
                        } );

                    VBox dialogVbox = new VBox(20);
                    dialogVbox.getChildren().add(txt);
                    dialogVbox.getChildren().add(btnOk);

                    Scene dialogScene = new Scene(dialogVbox, 300, 200);
                    dialog.setScene(dialogScene);
                    dialog.showAndWait();

                    // and these doesn't work
                    dialogScene.setCursor(Cursor.DEFAULT);
                    primaryStage.getScene().setCursor(Cursor.DEFAULT);

                    // but this works as expected (!), although it doesn't solve my problem
//                  primaryStage.getScene().setCursor(Cursor.HAND);
                }
            } );

        VBox vbox = new VBox(20);
        vbox.getChildren().add(btn);

        Scene scene = new Scene (vbox, 400, 300);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}
4

0 に答える 0