2016-05-24 1 views
4

この問題をWebで検索した後、数時間を費やした後、私はあなたの助けが必要だと決めました。JavaFX TableColumnsのヘッダーが垂直スクロールバーのためにセルと整列していない

問題は、このトピックのようになります。Javafx: Tableview header is not aligned with rows

無回答が提供されていないし、また、私が思うに、私の場合は若干異なります。

Screenshot directly after launch

Screenshot after scrolling or clicking

私は再利用されたCellFactoriesとCellValueFactoriesを持つTableViewを適切に設定してください。データによると、すべてのことが私が意図した通りに100%動作します。しかし、私のビューが示すことができるより多くの行をテーブルに取り込んだら、自然に垂直スクロールバーを表示し始めました。その瞬間から(最初のスクリーンショットを参照)、列ヘッダーは列ともう整列しませんでした。それは正確に幅の分布を歪めたスクロールバーの幅であるように思えます(私はConstraintResizePolicyをいくつかの固定幅の列で、残りは計算された幅に頼ります、それ以外は完璧に動作します)。

マウスホイールでスクロールしたり、エントリをクリックしたり、タブにフォーカスを合わせたり、ウィンドウ/ビューのサイズを変更したりすると、ヘッダーが所定の位置にスナップします(2番目のスクリーンショット参照)。

最初に投稿されたトピックに基づいて、私はこれがバグだと思うので、私は解決策(存在しないかもしれない)だけでなく、回避策を探しています。私が試した:

  • table.scrollTo()
  • table.scrollToColumnIndex()
  • table.layout()
  • table.requestFocus()
  • table.requestLayout()
  • テーブル.refresh()

私はこれらのすべてが意味をなさないとは思っていますが、まだ試してみましたそのうちの1人は、アプリケーションの起動時に列見出しを列に合わせるようにしました。

すべての提案が歓迎されます。 私はここでコードを共有することは役に立たないと思っていますが、何か具体的にしたいのか尋ねます。ビューはSceneBuilder 8で構築され、アンカーパネル、中央のTableView、6つのTableColumnsで構成されています。

ありがとうございました!

+0

編集のための@ ganchito55ありがとうございます。 –

答えて

3

私は同じ問題を抱えています。それはバグのようです。これを試して。それは私のために働く

Platform.runLater(() -> tableView.refresh()); 
+0

ありがとう、それは働いた!奇妙な私は既にtable.refresh()を使っていましたが(元の投稿を参照)、うまくいきませんでした。たぶん主なスレッドが本当に問題だったのかもしれません。 –

+1

まだ疑問がある場合:コードが完了した後、javafxスレッドにスクロールバーが追加されます。 Platform.runLaterは、他のすべてのレイアウト操作が完了した後で*表示が更新されるようにします。 – Xerus

関連する問題