Jeg har lavet følgende lille class som holder styr på et billede:
package imgtesting;
import java.awt.*;
import java.io.*;
import javax.imageio.*;
import java.awt.image.*;
public class SimpleImage extends Component {
BufferedImage image;
int xpos = 0;
int ypos = 0;
Point position = new Point(0, 0);
SimpleImage(String filename) {
try {
image = ImageIO.read(new File(filename));
}
catch (IOException e) { System.out.println("Error in IO!");
}
}
public void SetPosition(Point pos) {
xpos = pos.x;
ypos = pos.y;
}
public void SetPosition(int x, int y) {
xpos = x;
ypos = y;
}
public Point GetPosition() {
return new Point(xpos, ypos);
}
@Override public void paint(Graphics g) {
g.drawImage(image, xpos, ypos, null);
}
}
Og følgende kode som bruger den:
package imgtesting;
import javax.swing.*;
import java.awt.*;
public class ImgTest extends JFrame {
ImgTest() {
setPreferredSize(new Dimension(600, 600));
}
public static void main(String[] args) throws InterruptedException {
ImgTest test = new ImgTest();
SimpleImage si = new SimpleImage("Test.bmp");
//Add image and setup
test.add(si);
test.pack();
test.setVisible(true);
si.SetPosition(150, 150);
//Wait some time.
Thread.currentThread().sleep(1000);
//New position
si.SetPosition(50, 50);
test.validate();
si.invalidate();
}
}
Problemet er billedets nye position ikke bliver opdateret. Hverken validate eller invalidate virker.
Nogen der har en løsning til problemet?