0 / 0 / 0
Регистрация: 25.02.2018
Сообщений: 16
1

Реакция аплетов на курсор мыши

25.02.2018, 15:32. Показов 1114. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста уже 9 часов сижу над этой проблемой. Есть код где кнопка убегает от курсора мыши! Но нужно чтобы был не прямоугольник а КРУГ любого цвета и так же убегал от курсора. Пробывал переопределять методы для рисование формы JBUTTON но тогда вылезает куча ошибок в конструкторе. Помогите буду очень благодарен!!

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
 
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
//////////////////////////////////////////////////////////////////
public class MAIN extends JPanel implements MouseMotionListener//Наследуем главный класс от JPanel и переопределяем слушания мышки
{
    protected JButton cmd;
    //////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////
    MAIN()//Конструктор
    {
        JFrame frm =new JFrame();//Создание формы
        frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//Выход по Alt+F4
        frm.setSize(1000, 1000);//начальный размер формы
        frm.add(this);
       // this.setLayout(new FlowLayout());
        this.add(cmd=new JButton("Жмякни меня !!!"));
        cmd.setFocusPainted(false);
       // cmd.setIcon(getImageIcon("a.png"));
        cmd.addActionListener(new ActionListener(){
 
            public void actionPerformed(ActionEvent arg0) {
                cmd.setText("Ты победил!");
                cmd.setBackground(new Color(200,255,200));
                //cmd.setIcon(getImageIcon("b.png"));
            }
            
        });
        frm.getContentPane().addMouseMotionListener(this);
        frm.setVisible(true);//Показываем окно
    }
    
    ImageIcon getImageIcon(String file)
    {
        return new ImageIcon(file);
    }
    //////////////////////////////////////////////////////////////////////
    //Основная функция
    //////////////////////////////////////////////////////////////////////
    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new MAIN();//инициализируем элемент нашего класса в отдельном потоке
            }
        });
    }
    //////////////////////////////////////////////////////////////////////
    //Контроллеры
    //////////////////////////////////////////////////////////////////////
    public void mouseDragged(MouseEvent e) {
        if(e.getModifiers()==16)this.MoveGetdirection(e.getX(), e.getY());
        
    }
    public void mouseMoved(MouseEvent e)
    {
        this.MoveGetdirection(e.getX(), e.getY());
    }
    //////////////////////////////////////////////////////////////////////
    //Функция анализирующая положение кнопки и мыши и действие
    //////////////////////////////////////////////////////////////////////
    int Rad; //радиус окружности в которой находится кнопка
    protected void MoveGetdirection(int x_position,int y_position)//функция анализирует близость мышки к нопке
    {
         Rad=(int)(this.cmd.getWidth()*1.2);
        int x_centerbutton=this.cmd.getLocation().x+(this.cmd.getWidth()/2);//Абсцисса середины кнопки
        int y_centerbutton=this.cmd.getLocation().y+(this.cmd.getHeight()/2);//Ордината середины кнопки       
        int rast=(int) (2*Math.sqrt(Math.pow(x_position-x_centerbutton, 2)+Math.pow(y_position-y_centerbutton, 2)));
        if (rast < Rad)
        {
            int dx = Rad - rast;//приращение по икс
            int dy = Rad - rast;//приращение по игрек
            //меняем на обратное если вверх и влево
            if(x_position>x_centerbutton){dx=-dx;}
            if(y_position>y_centerbutton){dy=-dy;}          
           this.MoveDCmd(dx, dy, x_centerbutton, y_centerbutton);//Далее двигаем кнопку, проверяя есть место для перемещения
        }
    }
    //////////////////////////////////////////////////////////////////////
    //Функция анализирующая свободное расстояние для перемещения
    //////////////////////////////////////////////////////////////////////
    int bonus = 10;
    protected void MoveDCmd(int dx, int dy, int x_centerbutton, int y_centerbutton) 
    {
        //если двигать вправо
        if (dx > 0) {//если справа есть место
            if (x_centerbutton + this.cmd.getWidth() / 2 + dx < this.getWidth()) {
                this.cmd.setLocation(this.cmd.getLocation().x += dx, this.cmd.getLocation().y);//Двигаем
            }else{
                this.cmd.setLocation(bonus, this.cmd.getLocation().y);
            }
        }
        //если двигать вниз
        if (dy > 0) {//если внизу есть место
            if (y_centerbutton + this.cmd.getHeight() / 2 + dy < this.getHeight()) {
                this.cmd.setLocation(this.cmd.getLocation().x, this.cmd.getLocation().y += dy);//Двигаем
            }else{
                this.cmd.setLocation(this.cmd.getLocation().x,bonus);
            }
        }
        //если двигать влево
        if (dx < 0) {//если слева есть место
            if (x_centerbutton - this.cmd.getWidth() / 2 > -dx) {
                this.cmd.setLocation(this.cmd.getLocation().x += dx, this.cmd.getLocation().y);//Двигаем
            }else{
                this.cmd.setLocation(this.getWidth()-(this.cmd.getWidth()+bonus),this.cmd.getLocation().y );
            }
        }
        //если двигать вверх
        if (dy < 0) {//если вверху есть место
            if (y_centerbutton - (this.cmd.getHeight() / 2) > -dy) {
                this.cmd.setLocation(this.cmd.getLocation().x, this.cmd.getLocation().y += dy);//Двигаем
            }else{
                this.cmd.setLocation(this.cmd.getLocation().x,this.getHeight()-(this.cmd.getHeight()+bonus));
            }
        }
    }
}
0
25.02.2018, 15:32
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.02.2018, 15:32
Ответы с готовыми решениями:

Плавает курсор мыши. Задержка мыши при игре в шутеры (игры)
Мучаюсь с проблемой две недели. Совершенно запутался и кажется начинаю терять нервные клетки. Попробую описать проблему детальнее, чтобы...

Как скрыть курсор мыши и захватить мышку, чтобы не было стрелки мыши и получать команды?
Искал статью в инете и команды: Как сделать захват мыши, чтобы сделать видеоугру от первого лица и избавится от двигающегося курсора мыши....

Реакция на события мыши
Здравствуйте. Можно ли на c++ реализовать реакцию на спуск/отпуск левой/правой кнопки мыши? Например, по типу getch()

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.02.2018, 15:32
Помогаю со студенческими работами здесь

Реакция на наведение мыши
Здравствуйте! У меня есть Image и Rectangle под ним. Как сделать, чтоб первый был виден только тогда, когда курсор мыши находится над...

Реакция объекта по клику мыши
По примеру Кучки пытался сделать Я не могу врубиться как делается выделение и перетаскивание если открыть метки // из выражений где...

Реакция на нажатие клавиш мыши
У меня есть программа, на которой есть 4 сектора. При нажатии на каждый сектор вылезает надпись. Мне нужно разделить на 2 сектора(по...

Реакция TListBox на правую кнопку мыши
Друзья, кто подскажет, как изменить поведение TListBox в ответ на нажатие правой кнопки мыши? Мне нужно, чтобы вызываемое по правому клику...

Реакция glTranslatef по Z на колёсико мыши в mousewheel
Всем привет! Не пойму в чём дело : в перспективной проекции перемещение по оси Z работает великолепно(событие от колесика мыши в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Использование кэша Laravel - полный гайд
bytestream 18.02.2025
Кэширование - один из наиболее эффективных способов повышения производительности веб-приложений. В современном мире, где скорость загрузки страниц напрямую влияет на удержание пользователей и. . .
Создаем REST API в Laravel с аутентификацией и Passport
bytestream 18.02.2025
Разработка современных веб-приложений все чаще требует создания надежного и хорошо структурированного API. REST API стал стандартом де-факто для построения взаимодействия между клиентской и серверной. . .
Пайплайны в Laravel - полный гайд
bytestream 18.02.2025
Разработка современных веб-приложений часто требует обработки сложных процессов, состоящих из множества последовательных шагов. Например, при создании системы комментариев может потребоваться. . .
Как правильно использовать @required в Symfony
bytestream 18.02.2025
При разработке приложений на Symfony мы часто сталкиваемся с необходимостью внедрения зависимостей. Фреймворк предоставляет несколько способов управления этим процессом, и одним из таких инструментов. . .
Система безопасности в Laravel: возможности и примеры
Wired 18.02.2025
Каждый день появляются новые виды атак и уязвимостей, которые могут поставить под угрозу конфиденциальные данные пользователей и функционирование всей системы. В этом контексте выбор надежного. . .
Давайте сравним Django и Laravel
Wired 18.02.2025
Django и Laravel - два мощных инструмента, которые часто сравнивают между собой. Оба фреймворка предлагают разработчикам богатый набор возможностей для создания масштабируемых веб-приложений, но. . .
Laravel или React - что лучше?
Wired 18.02.2025
В разработке веб выбор правильного инструмента часто определяет успех всего проекта. Особенно интересным представляется сравнение Laravel и React - двух популярных технологий, которые часто. . .
Laravel 11: новые возможности, гайд по обновлению
Wired 18.02.2025
Laravel 11 - это новая масштабная версия одного из самых популярных PHP-фреймворков, выпущенная в марте 2024 года. Эта версия продолжает традицию внедрения передовых технологий и методологий. . .
Миграции в Laravel
Wired 18.02.2025
Разработка веб-приложений на Laravel неразрывно связана с управлением структурой базы данных. При работе над проектом часто возникает необходимость вносить изменения в схему базы данных - добавлять. . .
Аутентификация в Laravel
Wired 18.02.2025
В современном мире веб-разработки безопасность пользовательских данных становится критически важным аспектом любого приложения. Laravel, как один из самых популярных PHP-фреймворков, предоставляет. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru