----- snip -----
import java.awt.*;
import java.awt.event.*;
public class Mis extends Frame implements MouseListener {
static Point origin = new Point();
public static void main(String args[])
{
Frame frame = new Mis();
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.addMouseListener(new Mis());
frame.setSize(500, 500);
frame.show();
}
public void mouseExited(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {
origin.x = e.getX();
origin.y = e.getY();
repaint();
}
public void paint(Graphics g) {
g.setColor(Color.black);
g.fillOval((origin.x-25), (origin.y-25), 50, 50);
}
}
----- snip -----
Hehe, kako podmuklo prikriven bug, već sam (opet) psovao AWT na sav glas :)
Dakle, problem je u tome što originalnoj instanci Framea predaješ kao
MouseListener novu instancu Misa. Kada se u toj novoj instanci pozove
repaint on utječe na nju, a ne na onu prvu koja je prikazana.
Metoda main treba izgledati ovako:
----------8<----------8<----------8<----------8<----------8<----------
public static void main(String args[])
{
Mis frame = new Mis(); // ova linija je promjenjena
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
frame.addMouseListener(frame); // i ova linija je promjenjena
frame.setSize(500, 500);
frame.show();
}
---------->8---------->8---------->8---------->8---------->8----------
Ako ne želis da "briše" prethodne točke, trebat ćeš umjesto jednog
Pointa - listu Pointova, ili točke crtaj na BufferedImage npr. ovako:
----------8<----------8<----------8<----------8<----------8<----------
private BufferedImage image;
public void paint(Graphics g) {
if (image == null) {
image = new BufferedImage(500, 500, BufferedImage.TYPE_INT_RGB);
}
image.getGraphics().fillOval(
(origin.x - 25), (origin.y - 25), 50, 50);
g.drawImage(image, 0, 0, this);
}
---------->8---------->8---------->8---------->8---------->8----------
Naravno zavisi što želiš postići u konačnici...
Zoran
>Oto wrote:
>> Pozdrav grupi.
>> Imam problem sa Java paint metodom pa bi molio za pomoc. Dolje kopirani kod
>> iscrtava crnu tocku na mjestu gdje je kliknuto misem ali iscrtava je valjda
>> u "pozadini" tako da tocka nije vidljiva. Kako ga natjerati da crta tocku u
>> prvom planu. Bonus bi bila mogucnost da ne brise predhodno poklikane tocke.
>> Hvala.
>
>Hehe, kako podmuklo prikriven bug, već sam (opet) psovao AWT na sav glas :)
>
>Dakle, problem je u tome što originalnoj instanci Framea predaješ kao
>MouseListener novu instancu Misa. Kada se u toj novoj instanci pozove
>repaint on utječe na nju, a ne na onu prvu koja je prikazana.
Zorane, sto se ono kaze, zahvalan sam ti do groba. :)