2

「無限」の JScrollPanes に関連する別の質問があることは認識していますが、私が探しているのは微妙に異なるものだと思います。

基本的に、任意の方向にドラッグできるオブジェクトのコレクションがあり、スクロールするビューポートの範囲は、これらすべてのオブジェクトの境界矩形を常に包含する必要があります。別の言い方をすれば、ドキュメントには固定された「原点」がありません。したがって、オブジェクトを画面の端から左にドラッグすると、ビューポートの範囲が負の方向に拡張され、そのオブジェクトの新しい位置が取り込まれます。(ドラッグすると自動スクロールするはずですが、それは私が認識している別の問題です。)

JScrollPane API を使用してこれを行う方法がわかりません。これは、基になるコンポーネントの適切なサイズを設定する必要があるようですが、そのコンポーネントのオフセットまたは原点の概念がないようです。(基礎となる JViewport はそれができるように見えますが、JViewport API を実際に把握することはできません。)

4

2 に答える 2

4

スクロール ペインとビュー ポートは実際には関係ありません。必要なのは、ビュー ポート ビューの優先サイズを変更し、スクロール ペイン/ビュー ポートに残りを任せることです。

基本的に、コンポーネントの最も広いポイントと最も高いポイントを計算し、ビュー ポートを無効にして、レイアウト要件を強制的に再計算する必要があります。

カスタム コンポーネントを (JPanelたとえば、を使用して) 自分で作成し、getPreferredSizeメソッドをオーバーライドします。このメソッドは、コンポーネントの必要なサイズを返す必要があります。

サイズ要件が変更された場合は、revalidate()

于 2013-01-08T08:44:57.380 に答える
1

OK、簡単な答えは、スクロールペインは負の座標にスクロールできないということです。@MadProgrammerが提案したように、あなたがしなければならないことは、ポイントである別のオフセット座標を維持することです。オフセットには、ドキュメント全体の左上の座標が格納されます。個々のオブジェクトをレンダリングするときは、Graphics2Dオブジェクトの変換を、オフセット量だけ右下にシフトするように設定します。これにより、実際には負の座標に配置されている場合でも、すべてのオブジェクトが正の数の座標で描画されます。 。同様に、スクロールペインのpreferredSizeを計算するときは、ドキュメントの幅と高さにオフセットを追加します。スクロールバーイベントからの座標も、必要に応じてオフセットする必要があります。

これにより、ドキュメントの境界が正の数に制限されておらず、ドキュメントの境界が任意の方向に無限に拡張できるという錯覚を維持できます。

于 2013-01-22T03:45:30.107 に答える