Witam,
chcialem napisac applet , w ktorym za pomoca myszki mozna przesuwac poszczegolne graficzne komponenty. Oto co do tej pory udalo mi sie skodzic:
import javax.swing.;
import java.awt.;
import java.awt.event.*;public class panl extends JPanel implements MouseMotionListener
{
ImageIcon obraz;
JLabel etyk;int m; int n; public panl() { setLayout(null); setBackground(Color.white); obraz = new ImageIcon("button.gif"); etyk = new JLabel(obraz); etyk.setBounds(50, 50, 30, 30); add(etyk); setVisible(true); addMouseMotionListener(this); } public void mouseMoved(MouseEvent evt) { } public void mouseDragged(MouseEvent evt) { m = evt.getX(); n = evt.getY(); if(etyk.contains(m, n)) { etyk.setBounds(m, n, 30, 30); } }
}
Problem polega na tym, ze "etyk.contains" sprawdza, czy m i n jest zawarte nie w rzeczywistym polozeniu JLabela etyk, ustawionym przez setBounds, ale traktuje go, jakby znajdowal sie na poczatku ukladu wspolrzednych (w lewym gornym rogu). Przez to obrazek zmienia swoje polozenie nie po klikniecu na obrazek, ale po klikniecu na pole ograniczone przez setBounds, rozpoczynajace sie w punktach 0,0.
Byc moze "etyk.contains" jest zlym rozwiazaniem. Probowalem z "etyk.addMotionListener(this)". Rzeczywiscie - komponent przesuwal sie dopiero po kliknieciu na niego myszka, jednak zaczynal wowczas "wariowac", czyli pojawiac sie w roznych miejscach. Mysle, ze jest to spowodowane tym, ze wspolrzedne kursora sa odczytywane w takim przypadku tylko z tego komponentu, a nie z calego panela, przez co maja wartosci np. minusowe, ktore se przypisywane do m i n.
Prosze o propozycje rozwiazania problemu.
Pozdrawiam.