Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как добавить обработчик нажатия мыши?  (Прочитано 6050 раз)
0 Пользователей и 1 Гость смотрят эту тему.
abdruxa
Интересующийся

ua
Offline Offline

« : 03-01-2014 06:45 » 

Всем привет.  Есть программа которая берёт автоматически точку в заданой области и кликает по ней, и как только движущая точка станет на эти координаты то мы получаем новую точку и так бесконечно.Нужно чтоб когда рандомом было задано координаты движения, можна было б их изменить с помощю нажатия кнопки мыши на новую точку. Подскажте начинающему как добавить MouseListener чтоб переменным xr и yr передавались значения координат нажатия мыши.
Код программы:
Код: (Java)
import java.awt.AWTException;
import java.awt.Color;
import java.awt.Container;
import java.awt.Point;
import java.awt.Robot;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.event.MouseEvent;

class Zoro{
       
    Robot r;
    Point pkon;
    public int getx(){return xr;}
    public int gety(){return yr;}
    public int setx(int w){xr=w;return xr;}
    public int sety(int w){yr=w;return yr;}
    int k1=0;
    int k=0;
   int xr=0;int yr=0;
    int amin=828;int amax=995;int bmin=599;int bmax=690;
    public void zoro(){
        try {
            r = new Robot();
        } catch (AWTException ex) {
        }
       
        xr=((int)(Math.random()*(amax-amin+1)+amin));
        yr=((int)(Math.random()*(bmax-bmin+1)+bmin));
        r.mouseMove(xr, yr);
        r.mousePress(InputEvent.BUTTON1_MASK);
        r.mouseRelease(InputEvent.BUTTON1_MASK);
        pkon=new Point(xr,yr);
        System.out.println(pkon);
        k++;
        System.out.println(k);
    }
}
 class myFrame extends JFrame {
       
         int x=0;int y=0;
         Point poin;
         Point p;
         
         Zoro m= new Zoro();
            public myFrame() {
                setTitle("Test");
                JPanel panel = new JPanel();
                final JButton bt1 = new JButton("Start");
                panel.add(bt1);
                bt1.addActionListener(new ActionListener() {
                    public void actionPerformed(ActionEvent e) {
         
                        System.out.println("Start");
                        new Thread(new Runnable() {
                            @Override
                            public void run() {
                                m.zoro();
                               for(;;){ Color col = new Color(90, 90, 90);
                                        for (int i =824; i <= 997; i++) {
                                                Color c1 = m.r.getPixelColor(i, 595);
                                                if (c1.equals(col)) {x=i;}}
                                        for (int j =594; j < 700; j++) {
                                                Color c1 = m.r.getPixelColor(823, j);
                                                if (c1.equals(col)) {y=j;
                                                p=new Point(x,y);
                                                if((x==m.getx())&(y==m.gety())/*p.equals(m.pkon)*/) m.zoro();
                                                }}
                                               
                                }
                               }}).start();
                    }
                });
                Container pane = getContentPane();
                pane.add(panel);
               
                pack();
            }
        }
         
        public class MiniMap {
            public static void main(String[] args) {
                myFrame frame = new myFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.show();
            }
        }
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 03-01-2014 12:00 » 

Цитата: abdruxa
когда рандомом было задано координаты движения, можна было б их изменить с помощю нажатия кнопки мыши на новую точку.
Непонятно рассказываешь. Что такое "координата движения"? Я знаю лишь "координаты точки".

Цитата: abdruxa
Подскажте начинающему как добавить MouseListener чтоб переменным xr и yr передавались значения координат нажатия мыши.
В твоём коде нет MouseListener. Ты его сначала добавь и покажи, где у тебя проблема. Потому что я лично проблем с передачами чего-то куда-то не вижу.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
abdruxa
Интересующийся

ua
Offline Offline

« Ответ #2 : 03-01-2014 14:08 » 

Цитата: abdruxa
когда рандомом было задано координаты движения, можна было б их изменить с помощю нажатия кнопки мыши на новую точку.
Непонятно рассказываешь. Что такое "координата движения"? Я знаю лишь "координаты точки".

Цитата: abdruxa
Подскажте начинающему как добавить MouseListener чтоб переменным xr и yr передавались значения координат нажатия мыши.

В твоём коде нет MouseListener. Ты его сначала добавь и покажи, где у тебя проблема. Потому что я лично проблем с передачами чего-то куда-то не вижу.

Я спрашиваю что и куда нужно добавить чтоб решить мой вопрос? "Подскажте начинающему как добавить MouseListener чтоб переменным xr и yr передавались значения координат нажатия мыши."
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 03-01-2014 16:31 » 

abdruxa, сначала расскажи русским языком, что у тебя есть, и как оно связано между собой. Одно дело - читать твой код, который ты, похоже, сам плохо понимаешь. Другое дело разговаривать на общем языке об одних и тех же вещах.

Любой Listener - это в переводе с английского "слушатель". Кого должен слушать MouseListener, и кого должен знать, чтобы выполнить задачу?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
abdruxa
Интересующийся

ua
Offline Offline

« Ответ #4 : 03-01-2014 17:31 » 

abdruxa, сначала расскажи русским языком, что у тебя есть, и как оно связано между собой. Одно дело - читать твой код, который ты, похоже, сам плохо понимаешь. Другое дело разговаривать на общем языке об одних и тех же вещах.

Любой Listener - это в переводе с английского "слушатель". Кого должен слушать MouseListener, и кого должен знать, чтобы выполнить задачу?

Клас Zoro  используя метот random() выбирает число  xr и yr которые будут кооднинатами нажатия мыши mouseMove(xr, yr). class myFrame создаёт фрейм в котором есть только одна кнопка которая  запускает поток. Поток в свою очередь делает такое:
1) вызывает метод m.zoro() - выбираем точку и нажимаем на неё;
2)запускает вечный цыкл
3)вложеный цыкл проходит по пикселям и сравнивает цвет каждого с искомым и как только есть совпадение то мыполучаем координаты Х точьки
4)второй цыкл делает то же самое но для Y
5)в итоге я получаю координаты перемещения обекта (в моём случае это обект который перемещается на мини карте в игре)
6)проводиться сравнения координат заданой точьки с точкой которую я получаю в пункте 3 и 4. И как только они совпадут то будет вызнан опять метод m.zoro().
Мне нужно чтоб когда был вызван метод m.zoro() и у меня уже переменные xr и yr имели свои значения я мог бы изменить их при помощью нажатия кнопки мыши  в даной области, координаты мыши были б переданы xr=X ; yr=Y.
Как мне это зделать?
« Последнее редактирование: 03-01-2014 17:46 от abdruxa » Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 03-01-2014 18:34 » new

abdruxa, ты описал алгоритм, а я предлагаю описать структуру объектов. Если ты с этим не разберёшься, ты раз за разом будешь продолжать задавать однотипные вопросы: как сделать.

Почему важны объекты? Потому что сама Java и вообще вся её библиотека - фреймы, элементы интерфейса, потоки - это всё объекты, сопрягающиеся по определённым принципам архитектуры.

Итак:

1) Ты понимаешь, чем класс отличается от объекта? Если да, то чем?
2) Какие у тебя есть объекты, и какие обязанности возложены на каждый объект (зачем он существует, какие задачи решает)?
3) Каков жизненный цикл каждого объекта: что в каком порядке делается (или должно делаться)?
4) Ты пишешь, что xr,yr устанавливаются Random'омом, и (судя по коду) в это место перемещается мышь. Непонятно, причём тут Listener, если ты сам двигаешь мышь, а не наблюдаешь за тем, как её двигает пользователь?

Постарайся сосредоточиться на проблеме с Listener'ом и не приплетай сюда цикл в потоке - эту проблему ты решал в другой теме. Т.е. отделяй важное и нужное от второстепенного и несущественного. В противном случае тут концов не найдёшь: за что браться, а за что нет.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines