6

私はJavaFX 2について少し学んでいますが、編集可能なテーブルセルで解決策が見つからないという問題に遭遇しました。多くのコードの貼り付けを節約するために、JavaFX ドキュメントの TableView の例のみを含むプロジェクトを作成しました: http://docs.oracle.com/javafx/2/ui_controls/table-view.htm

このコードを実行すると、次の動作が見られます。

  1. 行をクリックすると、その行が選択されます。
  2. 選択した行のセルをクリックすると、セルがテキスト フィールドに変換され、編集できるようになります。
  3. テキストフィールドをクリックすると、内容を編集できます。

問題は、セルを編集できるようになるまでに 3 回クリックする必要があることです。私が達成したいのは、作成されたテキスト フィールド (ステップ 2 など) のフォーカスがテキスト フィールドに直接切り替わるときです。

これを達成する方法に関する私の最善の推測はtextField.requestFocus()、メソッドの最後に追加することでしたstartEditing():

@Override
public void startEdit() {
    super.startEdit();

    if (textField == null) {
        createTextField();
    }
    setGraphic(textField);
    setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
    textField.selectAll();
    textField.requestFocus();
}

しかし、これは機能しません。フォーカス リスナーをテキスト フィールドに追加すると、フォーカスが得られますが、再び失われます。リスナーにブレークポイントを貼り付けることは、テキストフィールドが表示される前に TableView がフォーカスを取り戻していることを示しているようです。

したがって、問題は、編集の開始時にテキスト フィールドにフォーカスを与えるにはどうすればよいかということです。

4

1 に答える 1

8

textField.requestFocus();行を次 のように置き換えてください。

      Platform.runLater(new Runnable() {
            @Override
            public void run() {
                textField.requestFocus();
            }
       });

そしてさらに試みる。

于 2012-04-26T10:27:38.373 に答える