Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Paint problem molim pomoc

2 views
Skip to first unread message

Oto

unread,
Oct 26, 2008, 11:08:19 AM10/26/08
to
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.

----- 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 -----

Zoran Stojanović

unread,
Oct 26, 2008, 1:42:00 PM10/26/08
to
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.

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

unread,
Oct 26, 2008, 3:23:27 PM10/26/08
to
On Sun, 26 Oct 2008 18:42:00 +0100, Zoran Stojanović <spam.b...@mail.hr>
wrote:

>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. :)

0 new messages