以下の短いピースコードが機能しない理由を理解しようとしています。 レイアウトがない場合、またはコンポーネントのサイズが0の場合、ペイントコンポーネントメソッドは呼び出されません。JPanelのsetPreferredSizeにもかかわらず、PaintComponent()が呼び出されていない
ただし、ここには該当しません。
理由を説明できない理由を説明できますか?より
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(bgImage, 0, 0, this);
}
paintComponent
...のようなものに
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
' paintComponent'を 'paintComponent'に変更しました。それはうまく動作します - ' paintComponent'が何をするのか理解しています。 'super'メソッドを呼び出す前にペイントしようとするとペイントは削除されます。 – MadProgrammer
うわー、paintComponentはpaintComponentと違います。 なので、paint、paintComponents、paintComponent ..あなたは答えとしてあなたのコメントを投稿してください。私はあなたを選ぶでしょう。ありがとうございました。 – zcahfg2