私はJavaFX 2について少し学んでいますが、編集可能なテーブルセルで解決策が見つからないという問題に遭遇しました。多くのコードの貼り付けを節約するために、JavaFX ドキュメントの TableView の例のみを含むプロジェクトを作成しました: http://docs.oracle.com/javafx/2/ui_controls/table-view.htm
このコードを実行すると、次の動作が見られます。
- 行をクリックすると、その行が選択されます。
- 選択した行のセルをクリックすると、セルがテキスト フィールドに変換され、編集できるようになります。
- テキストフィールドをクリックすると、内容を編集できます。
問題は、セルを編集できるようになるまでに 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 がフォーカスを取り戻していることを示しているようです。
したがって、問題は、編集の開始時にテキスト フィールドにフォーカスを与えるにはどうすればよいかということです。