6

シーンに ScrollPane があり、それに一連のノードを追加したいと考えています。正確な量は動的でなければなりません。私は Label ノードを使用してコンセプトをテストしており、ScrollPane (現在は VBox) のコンテンツに必要な数のラベルを正常に追加できます。

私の問題は、ノードでいっぱいの ScrollPane をユーザーが正常にスクロールできるようにする方法を考え出すことです。コンテンツはスクロールバーのペースに合わせます。つまり、下にスクロールすると、コンテンツが下に移動します。上にスクロールすると、コンテンツが上にスクロールします。したがって、10 個のラベルがあり、そのうちの 5 つだけが現在表示されている場合、残りの 5 つを見るための本能的なアクションは下にスクロールすることです。残念ながら、これはコンテンツ全体を下に移動するだけで、空のスペースが上部に表示され、より多くのラベルが非表示になります。

サンプルコードが役立つ場合は投稿できますが、私の攻撃計画の要点は次のとおりです。

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);
}

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

答えはとてもシンプルに思えますが、何時間もコードをいじった後でも、私を回避し続けています。

編集:

を使用するというjewelseaの提案は、ListView私の問題を解決しました。しかし、なぜ a の使用がScrollPaneそれほどうまくいかなかったのか、私はまだ興味があります。さらに、実装で奇妙な動作に遭遇しましListViewた。ボタンを使用して手動でビューに新しいものを追加しLabelます。新しい を追加すると、ビューがフリーズすることがありLabelます。スクロール位置を更新するか、新しく追加されたを表示する前に、数秒間ロックしLabelます。Labelこれが約 20 ほどのインスタンスがビューによって管理されているためなのか、それとももっと陰湿なことが行われているのかはわかりません。

4

1 に答える 1

1

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

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

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

于 2013-08-09T19:34:16.607 に答える