1
即時通訊嘗試在使用面板調整大小的JPanel上設置背景圖像。我在顯示畫面沒問題,但只要我使用: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);
}
}
油漆方法應該只用於繪畫,不要在那裏縮放圖像,將其移到您的構造函數中。不是一個答案只是建設性的批評 – 2012-07-11 13:08:49
你可以驗證繪製方法是否完成?縮放操作可能需要一定的時間才能完成 – MadProgrammer 2012-07-11 13:37:55
而不是在'JFrame'上設置大小,您可以重寫[getPreferredSize()](http://docs.oracle.com/javase/7/docs/api/ javax/swing/JComponent.html#getPreferredSize()),然後您可以添加一個[ComponentListener](http://docs.oracle.com/javase/7/docs/api/java/awt/event/ComponentListener.html ),現在在你的'componentResized(...)'裏面,你可以添加你的'ScaledImage'東西,然後調用'repaint()',以實現更改:-) – 2012-07-11 19:56:54