1

JDesktopPaneに自作のDesktopPaneUIを使用していて、クラスに適切なメソッドを記述しましたが、問題が発生しています。JDesktopPaneのサイズを変更すると、背景画像のサイズがフレームに合わせて変更されません。画像は、ウィンドウを最初に開いたときのサイズでクリップされているように見えます。ウィンドウよりも大きい画像を表示していますが、まだこの問題が発生しています。

これが私のdesktopUIクラスのコンストラクター内の私のメソッド呼び出しです。

super();
this.background = javax.imageio.ImageIO.read(new File(fileName));

UIを設定するメインクラス、またはJDesktopPaneのサイズが変更されたときに背景がウィンドウ全体に表示されるようにmyDesktopPaneUIクラスを変更する方法はありますか?

setUI(new myDesktopPaneUI("media/bg.jpg"));
4

3 に答える 3

6

画像をペインのサイズに拡大縮小する方法でpaint()呼び出すようにオーバーライドします。drawImage()

@Override
public void paint(Graphics g, JComponent c) {
    g.drawImage(image, 0, 0, c.getWidth(), c.getHeight(), null);
}
于 2010-05-25T15:43:18.663 に答える
4

背景画像を追加するためのカスタムUIのみを作成する場合、より簡単なアプローチは、すべてのLAFで機能するようにJDesktopPaneのカスタムペイントを行うことです。

JDesktopPane desktop = new JDesktopPane()
{
    protected void paintComponent(Graphics g)
    {
        g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
    }

};

通常、最初にsuper.paintComponent(g)を呼び出しますが、画像は背景全体をカバーするため、これを行う必要はありません。

于 2010-05-25T16:01:12.007 に答える
1

コンポーネントリスナーを使用して、ウィンドウのサイズが変更されたことを確認し、を使用して画像を再スケーリングします。

image.getScaledInstance(getWidth(), getHeight(), 0);
于 2011-11-19T17:56:45.467 に答える