2012-04-26 3 views
6

私はJavaFX 2について少し勉強しましたが、解決策が見つからない編集可能なテーブルセルで問題が発生しました。 JavaFXのドキュメントからのみテーブルビューの例を含むプロジェクトを作成しましたI多くのコードに貼り付けを保存するには:Java FX 2テーブルのセルの編集とフォーカス

  1. 行をクリック:あなたはこのコードを実行した場合http://docs.oracle.com/javafx/2/ui_controls/table-view.htm

    あなたは、この動作を参照してくださいその行を選択します。

  2. 選択した行のセルをクリックすると、セルをテキストフィールドに変換して編集できる状態にします。
  3. テキストフィールドをクリックすると、内容を編集することができます。

問題は、セルを編集できるポイントまで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がフォーカスを戻しているように見えます。

質問は、編集開始時にテキストフィールドにどのように焦点を当てるのですか?

答えて

8

は、あなたがラインtextField.requestFocus();を交換してくださいでした:

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

し、再試行してください。

+1

ありがとう、Uluk、それはそれを修正しました。 runLaterのドキュメントを見ても、いつ実行されるかは保証されていないので、これは失敗する可能性があります。おそらく、テーブル取得の前に実行される可能性があります。 – wobblycogs

+0

私はwobblycogsに同意します、私はrunlaterトリックを使って過去数回のフォーカスを要求してきましたが、それはいつも私のために働いていましたが、それが動作し続けるという確かさの欠如は、それについての気分。 (代わりにタイムラインを使用してフォーカス要求を後で戻すこともできますが、そのアプローチには独自の問題があります)。 – jewelsea

関連する問題