Tava precisando da ajuda de voces denovo…
Entao, baseado nesse codigo:
http://www.java2s.com/Code/Java/2D-Graphics-GUI/Imagewithmousedragandmoveevent.htm
eu evolui ele um pouco e cheguei nisso:
[code]import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class BufferedImageMouseDrag extends JFrame {
public BufferedImageMouseDrag() {
add(new DisplayCanvas());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300, 700);
setVisible(true);
}
public static void main(String arg[]) {
new BufferedImageMouseDrag();
}
}
class DisplayCanvas extends JPanel {
int x = 140, y = 500;
BufferedImage bi;
boolean mousePressed = false;
DisplayCanvas() {
setBorder(BorderFactory.createLineBorder(Color.red));
setBackground(Color.black);
Image image = getToolkit().getImage("disk.jpg");
MediaTracker mt = new MediaTracker(this);
mt.addImage(image, 1);
try {
mt.waitForAll();
} catch (Exception e) {
System.out.println("Exception while loading image.");
}
if (image.getWidth(this) == -1) {
System.out.println("no gif file");
System.exit(0);
}
bi = new BufferedImage(image.getWidth(this), image.getHeight(this), BufferedImage.TYPE_INT_ARGB);
Graphics2D big = bi.createGraphics();
big.drawImage(image, 0, 0, this);
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if ((e.getX()>x && e.getX()<x+26) && (e.getY()>y && e.getY()<y+26)) {
mousePressed = true;
x = e.getX() - 15;
y = e.getY() - 13;
repaint();
}
}
public void mouseReleased(MouseEvent e) {
if (mousePressed == true) {
double finalPos = 500 - Math.pow((e.getY() - 500), 1.1);
int ArrastoY = e.getY();
while (ArrastoY > finalPos) {
y = ArrastoY;
repaint();
ArrastoY--;
}
}
mousePressed = false;
}
});
addMouseMotionListener(new MouseAdapter() {
public void mouseDragged(MouseEvent e) {
if (mousePressed == true) {
x = e.getX() - 15;
y = e.getY() - 13;
repaint();
}
}
});
}
public Dimension getPreferredSize() {
return new Dimension(300, 620);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2D = (Graphics2D) g;
if (mousePressed == true) {
g2D.setColor(Color.yellow);
g2D.drawLine(150, 500, x + 13, y + 10);
}
g2D.drawImage(bi, x, y, this);
}
}[/code]
OBS: Figura do codigo:
[URL=http://img13.imageshack.us/my.php?image=disk.jpg][/URL]
Enfim. Ta quase do jeito que eu preciso. O resto do codigo eu ja sei como fazer.
O problema que estou tendo eh porque o disco, quando arrastado pra baixo da posicao original, eh pra ser lancado pra cima, mas animado, ou seja, a cada (x,y) que ele sobe ele eh mostrado. O problema eh que isso nao ta acontecendo, aparece de vez no destino final.
Alguem tem alguma ideia? Usar thread.sleep(1000) como ja me indicaram nao funciona.