下面是一個簡單的Swing應用程序中,我嘗試了某些自定義techniques.The代碼如下: -在我的Swing應用程序清除一些疑問需要幫助
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class ThemeComponents extends JFrame{
public static void main(String args[])
{
SwingUtilities.invokeLater(new Runnable(){public void run(){new ThemeComponents();}});
}
public ThemeComponents()
{
super("HACK 1:Creating Image Themed Components ");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new FlowLayout());
CustomPanel p1=new CustomPanel();
p1.add(new CustomLabel());
add(p1);
pack();
setVisible(true);
}
}
class CustomPanel extends JPanel
{
BufferedImage img;
CustomPanel()
{
try
{
img=ImageIO.read(new File("src/background.jpg"));
} catch(IOException e){
System.out.println("Error in loading background image "+e);
}
}
public void paintComponent(Graphics g)
{
g.drawImage(img,0,0,getWidth(),getHeight(),null);
}
public Dimension getPreferredSize()
{
return new Dimension(img.getWidth(),img.getHeight());
}
}
class CustomLabel extends JLabel
{
ImageIcon img;
CustomLabel()
{
img=new ImageIcon("src/tornado.gif");
setSize(img.getIconWidth(),getHeight());
setIcon((Icon) img);
//setOpaque(false);
//setIconTextGap(0);
setLocation(10,10);
}
}
現在我以下的問題: -
1)當我設置佈局,我的主類爲null setLayout(null)
ThemeComponents
那麼爲什麼幀尺寸的縮小,只有標題欄爲空?我期望它採取的CustomPanel
的大小,因爲我已經使用pack()
的框架。(使用佈局,例如flowlayout,borderlayout可以產生正確的輸出)
2)正在使用getPreferredSize()
更好地設置組件的大小而不是setPreferredSize()
。實際上我沒有發現它們之間的任何區別。
:是!但即使沒有佈局,面板應該在那裏,它必須給框架的大小 –