1

パネルに合わせてサイズを変更するJPanelに背景画像を設定しようとしています。写真を表示するのに問題はありませんが、使用するとすぐに:

background = background.getScaledInstance(300, -1, Image.SCALE_SMOOTH );

何も表示されません。理由について何かアイデアはありますか?

コード:

import javax.swing.*;
import java.awt.*;

public class LoginJPanel extends JPanel
{
  private Image background;

  public LoginJPanel()
  {
    super();

    background = new ImageIcon("C:\\ASYS\\Stories\\Authentication UI\\AVDsplashscreen_tiny.jpg").getImage();
  }

  @Override
  protected void paintComponent(Graphics g)
  {
    super.paintComponent(g);
    background = background.getScaledInstance(300, -1, Image.SCALE_SMOOTH );
    g.drawImage(background, 0, 0, this);
  }

  public static void main (String[] args)
  {
         LoginJPanel ip = new LoginJPanel();
        JFrame jf = new JFrame ();
        jf.setLayout (new BorderLayout ());
        jf.add (ip, BorderLayout.CENTER);
        jf.setSize (1000, 600);
        jf.setLocation (150, 150);
        jf.setVisible (true);
        jf.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
  }
}
4

1 に答える 1

0

結局、私が作ったのは(コメントで示唆されているように)スケーリングをペイントメソッドの外に移動することです。親コンポーネントから呼び出されるパブリックメソッドを作成して、新しいサイズについてパネルに通知し、それに応じて画像を拡大縮小します。

 public void initSize(int _width, int _height)
  {
    int h = background.getHeight(null);
    int w = background.getWidth(null);

    if (w - _width > h - _height)
    {
      scaleVertically(_width, _height);
    }
    else
    {
      scaleHorizontally(_width, _height);
    }
  }

これはあまりエレガントではないので、一部のリスナーでこれを行う必要があると思いますが、その方法がわかりませんでした。

于 2012-07-13T07:01:50.083 に答える