的了setPreferredSize我試圖理解爲什麼下面的一小段代碼不起作用。 我明白,當沒有佈局或組件的大小爲0時,不調用繪畫組件方法。的paintComponent()不叫儘管JPanel的
但是,這是不是這裏的情況。
你能解釋爲什麼我不能爲這種背景?
public class Login extends JPanel {
private BufferedImage bgImage;
public Login() {
super();
initImages();
setLayout(new BorderLayout());
setPreferredSize(new Dimension(600, 600));
add(new JLabel("Hi"), BorderLayout.CENTER);
}
private void initImages() {
try {
bgImage = ImageIO.read(new File("images/login.jpg"));
System.out.println("image loaded");
} catch (IOException e) {
e.printStackTrace();
System.out.println("image not loaded");
}
}
@Override
public void paintComponents(Graphics g) {
super.paintComponents(g);
g.drawImage(bgImage, 0, 0, null);
System.out.println("repaint");
}
public static void createAndShowGui() {
JFrame frame = new JFrame();
Login login = new Login();
frame.add(login, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
'paintComponents'應是'paintComponent' – MadProgrammer
所以我改變了'paintComponents'爲'paintComponent'和它的作品對我很好 - 而且,明白了什麼'paintComponent'呢,如果你嘗試繪畫調用它的'super'方法之前,任何事情你的油漆將被刪除 – MadProgrammer
哦哇所以paintComponents不同於paintComponent .. 因此,paint,paintComponents和paintComponent ..如果您發佈您的評論作爲答案。我會選擇你的。謝謝。 – zcahfg2