gpt4 book ai didi

java - 为什么JPanel的paintComponent(Graphics g)不运行?

转载 作者:行者123 更新时间:2023-12-01 07:26:08 25 4
gpt4 key购买 nike

根据我之前的经验,面板的paintComponent(Graphics g)会在我初始化它时运行,并且我可以通过调用repaint()方法使其重新绘制。但我下面的演示并不像我的经验那样工作。这是怎么回事?

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;



public class BackgroundTest {
public static void main(String[] args) {
BackgroundTest backgroundTest = new BackgroundTest();
try {
backgroundTest.createUI();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

public void createUI() throws IOException{
JFrame frame = new JFrame("Background Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(true);
JPanel mainPanel = new JPanel();

JLabel backgroundLabel = new JLabel(new ImageIcon("background.png"));
JPanel imagePanel = new ImagePanel();
imagePanel.setPreferredSize(new Dimension(626, 434)); // it's the size of house.png
JScrollPane scrollPane = new JScrollPane(imagePanel);
backgroundLabel.add(scrollPane,BorderLayout.CENTER);


mainPanel.add(backgroundLabel);
frame.add(mainPanel,BorderLayout.CENTER);

frame.getContentPane().add(backgroundLabel,BorderLayout.CENTER);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

@SuppressWarnings("serial")
class ImagePanel extends JPanel {
protected void paintComponent(Graphics g) {
System.out.println("I'm not be run");
super.paintComponent(g);
BufferedImage image = null;
try {
image = ImageIO.read(new File("house.png"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
g.drawImage(image, 0, 0, null);
}
}
}

最佳答案

But my demo below doesn't work like my experience. What's wrong with it?

永远不要加载,在paint/paintComponent中提供任何FileIO,将此Object准备为局部变量,意味着代码行

BufferedImage image = null;
try {
image = ImageIO.read(new File("house.png"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

关于java - 为什么JPanel的paintComponent(Graphics g)不运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24428218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com