私はJavaFX 2について少し勉強しましたが、解決策が見つからない編集可能なテーブルセルで問題が発生しました。 JavaFXのドキュメントからのみテーブルビューの例を含むプロジェクトを作成しましたI多くのコードに貼り付けを保存するには:Java FX 2テーブルのセルの編集とフォーカス
- 行をクリック:あなたはこのコードを実行した場合http://docs.oracle.com/javafx/2/ui_controls/table-view.htm
あなたは、この動作を参照してくださいその行を選択します。
- 選択した行のセルをクリックすると、セルをテキストフィールドに変換して編集できる状態にします。
- テキストフィールドをクリックすると、内容を編集することができます。
問題は、セルを編集できるポイントまで3回クリックすることです。達成したいのは、作成されたテキストフィールド(例:ステップ2)がテキストフィールドに直接切り替わるときです。これを実現する方法について
私の最高の推測では、startEditing()
方法の終わりにtextField.requestFocus()
を追加しました:
@Override
public void startEdit() {
super.startEdit();
if (textField == null) {
createTextField();
}
setGraphic(textField);
setContentDisplay(ContentDisplay.GRAPHIC_ONLY);
textField.selectAll();
textField.requestFocus();
}
が、これは動作しません。テキストフィールドにフォーカスリスナーを追加すると、フォーカスが得られますが、フォーカスが戻ってきます。リスナーにブレークポイントを設定すると、テキストフィールドが表示される前にTableViewがフォーカスを戻しているように見えます。
質問は、編集開始時にテキストフィールドにどのように焦点を当てるのですか?
ありがとう、Uluk、それはそれを修正しました。 runLaterのドキュメントを見ても、いつ実行されるかは保証されていないので、これは失敗する可能性があります。おそらく、テーブル取得の前に実行される可能性があります。 – wobblycogs
私はwobblycogsに同意します、私はrunlaterトリックを使って過去数回のフォーカスを要求してきましたが、それはいつも私のために働いていましたが、それが動作し続けるという確かさの欠如は、それについての気分。 (代わりにタイムラインを使用してフォーカス要求を後で戻すこともできますが、そのアプローチには独自の問題があります)。 – jewelsea