მაუსის კლიკზე იმავე ადგილზე ჩნდება ბურთი და იწყებს ვარდნას ძირს, თუ მაუსს სხვა ადგილზე ვაკლიკებ ბურთი გადადის ახალ ადგილზე და იქედან იწყებს ვარდნას
- თავდაპირველად, ფიქრის ლოგიკური პროცესი შემდეგნაირია: პირველ დაკლიკებაზე უნდა შევქმნათ ბურთი, რომელიც სულ დაბლა ეცემა და ყოველ ახალ დაკლიკებაზე წინა ბურთი ახალ პოზიციაზე გადავიყვანოთ. ასეთ მიდგომას დასჭირდება რაიმე
booleanცვლადი, რომელიც გვეტყვის ბურთი შექმნილია თუ არა.
private boolean isBallCreated = false;
public void mousePressed(MouseEvent event) {
if(isBallCreated == false){
add(ball, event.getX()-BALL_RADIUS, event.getY()-BALL_RADIUS);
isBallCreated = true;
}else{
ball.setLocation(event.getX()-BALL_RADIUS, event.getY()-BALL_RADIUS);
}
}- იდეაში შესაძლებელია ამ კოდის კიდევ უფრო შემცირება. როდესაც ობიექტი უკვე დამატებულია კანვასზე, მისი ახლიდან დამატების შემთხვევაში ობიექტი უბრალოდ პოზიციას იცვლის ახალ კოორდინატებზე (ანუ ზუსტად იმას აკეთებს რაც გვინდა). ეს განპირობებულია იმით, რომ გრაფიკს პროგრამამ უნდა აღრიცხოს ყველა ობიექტის, რომლებიც ჰიპში არიან შექმნილნი, ადგილმდებარეობა, რათა შემდგომ
getElementAt()-ის გამოყენება შეგვეძლოს. რადგან ერთ ობიექტს ორი მისამართი ვერ ექნება (ალოგიკური იქნება) ამიტომაც არ იხატება ახლიდან კანვასზე ბურთი.
- აუცილებელია
GOval-ის გარეთ განსაზღვრა, რათაmousePressed-მა დააფიქსიროს. - უმჯობესია
mouseClicked-ის ნაცვლადmousePressedგამოვიყენოთ, რადგან უფრო ეფექტურად აფიქსირებს კლიკებს. addMouseListenersბურთის ინიციალიზაციის მერე უნდა გვეწეროს, წინააღმდეგ შემთხვევაში შესაძლებელი იქნებოდაnullpointerexceptionამოეგდო.