2013-08-07 18 views
5

自分のシーンにScrollPaneがあり、それに一連のノードを追加したいと思います。正確な量は動的でなければなりません。私はラベルノードを使ってコンセプトをテストしていますが、ScrollPaneのコンテンツ(現在はVBox)に必要な数のラベルを追加できます。JavaFX - 正しいスクロール方向でスクロールペインにノードを追加する

私の問題は、ユーザーがスクロールペインを使って正常にスクロールできるようにする方法を考え出したことです。コンテンツはスクロールバーとペースに合っています。つまり、下にスクロールすると、コンテンツが下に移動します。私はスクロールアップ、コンテンツがスクロールアップ。だから私は10ラベルがある場合は、現在表示されている5つのうち、他の5つを見て本能的な行動は、下にスクロールすることです。残念ながら、これはコンテンツ全体を下に移動させ、空白を上にしてラベルの多くを隠すだけです。

ことができますが、攻撃の私の計画の要旨はこの場合、私はいくつかのサンプルコードを投稿することができます:私はVBoxのを使用しているため

ScrollPane sp = new ScrollPane(); 
VBox content = new VBox(); 
sp.setContent(content); 
for (int i = 0; i < 10; i++) 
{ 
    Label label = new Label("Label " + i); 
    content.setPrefHeight(content.getPrefHeight() + label.getPrefHeight()); 
    content.getChildren().add(label); 
} 

、ラベルを1つの上に(Y軸方向に)積層されていますもう一つは、私が欲しいものです。より多くのラベルが追加されるにつれ、ScrollBarはVBoxの増加したサイズを反映する必要があります。 ScrollPane.setVmax()メソッドを含む、これを動作させるためのいくつかのアプローチを試しましたが、スクロール方向が間違った方向に移動する問題があります。私はEventHandlerEventFilterを試してみましたが、正しい方向にコンテンツを移動しないスクロールの問題を解決することなく、それに応じて値を修正しました。

答えはとてもシンプルですが、多くの長い時間がコードを迷惑にしても、私はそれを避けています。

EDIT:私の問題を解決しListViewを使用しての

jewelseaの提案。しかし、私はなぜScrollPaneを使ってもそれほどうまくいきませんでしたか?さらに、私はListViewの実装で奇妙な振る舞いに遭遇しました。私はボタンを使って手動で新しいLabelをビューに追加します。今度は新しいLabelを追加した後、ビューがフリーズします。スクロール位置を更新するか、新しく追加されたLabelを表示する前に、数秒間ロックアップします。私はこれがそうであるかどうかわからない。Labelのインスタンスがビューによって管理されているか、もっと狡猾なものが遊んでいるからです。

+2

これを実装するために 'ListView 'を使用しない理由は何ですか?私はそれがあなたのためにこれらの種類の問題の世話をするかもしれないと思います。 – jewelsea

+2

@ jewelsea、あなたはそれを解決しました!私はいつもこれらの問題の大半がどんなに大きいように見えるのか驚いていますが、その解決策はとてもシンプルです。私は 'ListView

答えて

0

スクロールペーンの問題に関して、私は非常に似たようなことをしているので、あなたがやろうとしていることは可能です。上に示したコードスニペットに基づいて、私はいくつかのことを試してみることをお勧めします...

  • ScrollPaneには適切な高さと幅を指定します。
  • 内容が大きくなるので、内容の高さのサイジングの設定をコンテンツVBoxに与えないでください。コンテンツの追加後に高さを更新する必要はありません。
  • その内容を整列させるのVBoxのsetAlignmentメソッドを使用してのいずれかTOP_LEFTTOP_CENTER、またはTOP_RIGHT。あなたがsetPrefHeightを()を使用していない場合は事前に私はそれが-1を返します信じているからgetPrefHeight()メソッドを使用している場合
  • は注意が必要です。

これがあなたを助けてくれることを願っています!

+0

上記のスニペットには記載されていませんが、私はScrollPaneのディメンションを明示的に設定していました(Scene Builderと私のコード)。私はまた、コンテンツの高さをつぶすことの間でトグルし、私は指定されたアラインメントを持っていた。私は、いくつかの周辺をうまくやった後に、うまく追加することができましたが、私が望むやり方をまだスクロールできませんでした。 –

関連する問題