0

JScrollPane を含む JPanel で構成されるイメージ読み込みコンポーネントを作成しています。これには別の JPanel が含まれます。このコンポーネントが行うことは、その上に画像をドロップできるようにすることです。その後、画像がロードされ、最も内側の JPanel がドロップされた画像のサイズに設定されます。これにより、スクロール バーが表示され、ユーザーは画像をスクロールできるようになります。これはすべてうまくいきます。JPanel の外側の最大表示領域に画像を自動縮小しようとすると、問題が発生します。この場合、画像の均一なスケールを、外側の JPanel の幅と高さ以下にします。これで、水平スクロール バーと垂直スクロール バーの両方が表示され、内部の JPanel が表示領域よりも大きいことが示されます (これは正しくないはずです)。画像が適切な寸法にスケーリングされていることを確認しました(つまり、最大の幅と高さが尊重されます)。また、最大高さを 3 ピクセル減らすと、スクロール バーが表示されなくなることも確認しました。

私が問題だと思うのは、 panel.getWidth() と panel.getHeight() が、サブコンポーネントが占めることができる可視領域(最大領域)を実際には返さないことです。すなわち。JPanel の周囲の境界線またはそのようなものによって、さらに幅と高さが占有される可能性があります。

私の質問は、どうすればこの問題を回避できるかです。機能的には、JPanel が JScrollPane に入れることができる最大サイズを決定し、パネルをそのサイズに設定し、その上に画像をペイントして、スクロール ペインのスクロール バーが表示されないようにするだけです。現在、スクロール バーは AS_NEEDED に設定されています。

コードの一部を次に示します。

JPanel. Insets insets = getInsets();
int width = getWidth() - insets.left - insets.right;
int height = getHeight() - insets.top - insets.bottom;
imageScaled = ImageUtils.uniformScaleImage(imageOriginal, width, height);

ありがとう!

4

1 に答える 1

1

機能的に私が欲しいのは、JPanelがJScrollPaneに入れることができる最大サイズを決定することです

scrollPane.getViewport().getViewSize();
于 2010-04-30T15:31:25.033 に答える