我想读取一个文件来获取一些点,然后在图像上绘制这些点。目前,我能够在图像上绘制值,但文件被读取三次,矩形被绘制三次。我不知道问题出在哪里。下面是代码。 Read()函数可以单独运行,因此我没有在代码中包含它。
P.S:我是JAVA的初学者,对JFrame和Jcomponent了解不多。
public class LoadImageApp extends JComponent {
BufferedImage img;
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(img, 0, 0, null);
Read(g);// This is the function in which I read a file.
}
public LoadImageApp() {
try {
img = ImageIO.read(this.getClass().getResource("/New York.jpg"));
} catch (IOException e) {
}
}
public Dimension getPreferredSize() {
if (img == null) {
return new Dimension(100,100);
} else {
return new Dimension(img.getWidth(null), img.getHeight(null));
}
}
public static void main(String[] args) {
JFrame f = new JFrame("Load Image Sample");
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
LoadImageApp img = new LoadImageApp();
f.add(img);
f.pack();
f.setVisible(true);
}
}
答案 0 :(得分:3)
不要,不要,不要从任何绘画方法(例如paintComponent(...)
)中读取文件。 :)
相反
ArrayList<Point>
中,然后在paintComponent方法内部,使用for循环遍历该ArrayList并绘制它们。其他建议:
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);