2016-07-08 6 views
2

これは実際には既知のバグで、JavaFXのバグレポートを開きました。 hereです。TableView.CONSTRAINED_RESIZE_POLICYを使用したときのTableViewヘッダーの幅が正しくない

説明は以下のとおりです(垂直スクロールが表示されている)可能なテーブルビューの高さに収まらないデータは、その後のヘッダーが不適切な幅を持っているColumnResizePolicyがCONSTRAINED_RESIZE_POLICY、テーブルにsettedさ

- だけテーブルビューがフォーカスされていないとき。 TableViewがフォーカスを取得すると、ヘッダーは適切な幅になります。

問題は、何とか解決する必要がありますが、それを行うための回避策が見つかりません。

私が試した:

refresh() とちょうどと

otherGUIObject.requestFocus(); 
tableView.requestFocus(); //or getSelectionModel().Select(0)  
otherGUIObject.requestFocus(); 

tableView.setColumnResizePolicy(TableView.UNCONSTRAINED_RESIZE_POLICY); 
tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); 

に "ジャンプ" しかし、何も動いていないようにみえます。いくつかのアイデアがありますか? ありがとう!

答えて

2

正しいトラックにいる:TableViewrequestFocus()と電話する必要があります。

(あなたの質問から)次のスニペットに問題

otherGUIObject.requestFocus(); 
tableView.requestFocus(); //or getSelectionModel().Select(0)  
otherGUIObject.requestFocus(); 

が制御することを、あなたはrequestFocus()を呼び出すときに、NodefocusedPropertyが期待通りtrueに設定されているが、それは意味しないということです実際にはGUIに集中しています(レイアウトは更新されています)。これは、JavaFXアプリケーションスレッドに更新が必要なときにのみ更新されるためです。スニペットでは、1つの行に3つのrequestFocusコールを作成します。最初の2つは最適化されるため、最後のものだけが実行されます(たぶん)。

TableViewrequestLayoutメソッドを呼び出すのは、フォーカスがGUIで更新されていることを確認した後です。その後、Nodeにフォーカスを設定することができます(この例では、Nodeが現在選択されているのSceneを使用しています)。TableViewのフォーカスが当たった後、再びNodeにフォーカスします。

// The current focus owner on the Scene 
Node focusOwner = scene.getFocusOwner(); 

table.requestFocus(); 
table.requestLayout(); 

// Request focus on the currently focused Node 
if(focusOwner != null) 
    focusOwner.requestFocus(); 
else 
    // request focus on any Node you want 
    textField.requestFocus(); 
+0

偉大な答え。どうもありがとう! –

関連する問題