ここでは必要ないと思うので、コードなしで説明してみます。
スクロールペインのコンテンツhの高さが で、ビューポートの高さが であるとしましょうv。の場合h = v、コンテンツはビューポートに完全に収まり、スクロールバーは必要ありません。この状況 (スクロールバーが動かない場合) で、要素を中央に配置するには、スクロールペインのコンテンツの中央に配置する必要があります。スクロールしてビューポートの中心に移動することはできません。
ここで(つまり)hの 2 倍のサイズであると考えてください。この状況では、スクロールペインのコンテンツの上部 1/4 と下部 1/4 をスクロールしても中央に配置できませんでした。vh = 2v
(どうしてもコンポーネントをスクロールして中央に配置する必要がある場合は、コンテンツ ペインのパディングを検討する必要がありますが、ここではパディングなしのソリューションを続けます)
考えてみると、スクロールバーの可能なスクロール距離は であることがわかります。1.0h - vに設定することで、その量をスクロールしますvvalue。
ポイントを中央に配置するyには (ここで、ポイント y はスクロールペインのコンテンツ ペインの座標です)、次の vvalue を使用できます。
vvalue = (y - 0.5 * v) / (h - v)
この式の分子は、点 y がビューポートの中心にあるときにビューポートの上部に表示されるものの y 座標です。分母は、スクロール可能な距離の合計です。
編集:とにかくコードを追加してください!
public void centerNodeInScrollPane(ScrollPane scrollPane, Node node) {
double h = scrollPane.getContent().getBoundsInLocal().getHeight();
double y = (node.getBoundsInParent().getMaxY() +
node.getBoundsInParent().getMinY()) / 2.0;
double v = scrollPane.getViewportBounds().getHeight();
scrollPane.setVvalue(scrollPane.getVmax() * ((y - 0.5 * v) / (h - v)));
}
(これは、ノードがスクロールペインのコンテンツペインの直接の子であると仮定していることに注意してください)
お役に立てれば!:)