0 / 0 / 0
Регистрация: 24.03.2007
Сообщений: 7

Как обработать наезд мышки на кнопку?

24.03.2007, 20:31. Показов 4666. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В Вижуал J++ 6.0 Как можно обработать событие прохождение мышки над кнопкой ? Подскажите пожайлуста, специалисты !!!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.03.2007, 20:31
Ответы с готовыми решениями:

Как у панель обработать кнопку выхода(крестик)
мне нужно узнать когда нажимается эта кнопка,как это сделать?

Всплывающие подсказки при наведении мышки на кнопку
Как сделать чтобы при наводе мышки на кнопку всплывала подсказка?

Как обработать правый клик мышки
Доброго времени суток всем. Уважаемые знатоки подскажите как обработать правый клик мышки по ComboBox. ComboBox прямой обработки не...

19
quit
31.03.2007, 20:14
Я вобщем то не специалист но думаю что надо переопределить метод handleEvent()
т.к. методы action() mouseMove() ,без переопределения обрабатывают для кнопок только стандортные события типа click
mishgun
02.04.2007, 18:34
Вот эти два метода будут обрабатывать 'наезд' и
'съезд' мыши с кнопки
Java
1
2
3
4
5
6
7
    public void mouseEntered(MouseEvent e) {
       saySomething('Mouse entered', e);
    }
 
    public void mouseExited(MouseEvent e) {
       saySomething('Mouse exited', e);
    }
0 / 0 / 0
Регистрация: 04.04.2007
Сообщений: 32
04.04.2007, 12:58
Это в 1.0 которым давно никто не пользуется а в 1.1 - на котором J++ 6 и работает это делается так:
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
import java.awt.*;
import java.awt.event.*;
 
public class MouseMoveTest extends Frame {
    
Button button;
    
 public static void main(String args[]){
    new MouseMoveTest();
 }
    
 public MouseMoveTest(){
    super('Test');
    
    setLayout(new BorderLayout());
    setBackground(Color.lightGray);
                        
    button = new Button('Get mouse over me');
    button.addMouseListener(new MouseAdapter()
        
    public void mouseEntered(MouseEvent e){
    System.out.println('Mouse entered');
    }
    public void mouseExited(MouseEvent e){
    System.out.println('Mouse exited');
    }
    });
    add(BorderLayout.NORTH ,button);
        
    setSize(300, 300);
    setVisible(true);
  }
}
0
mishgun
04.04.2007, 18:00
Дело в том что эти методы принадлежат интерфейсу MouseListener и я не собирался писать за кого-то программу.И кстати это некорректно говорить что это было в 1.0 я работаю на J++ 6.0 и JDK 1.2.2 и они естественно ещё там и никто их не отменял , тем более что Вы использовали те же методы которые написал я.И потом необходимо наисать ещё один класс который будет extends MouseAdapter где и определить эти два метода потому что программа не будет работать в том виде как вы написали.
Это должно выглядеть так.
Java
1
2
3
4
5
6
7
8
{
 Button b = new Button();
 b.addMouseListener(new MouseHandler());
}
 public class MouseHandler extends MouseAdapter
{
 // определяете здесь методы которые вам нужны
}
0 / 0 / 0
Регистрация: 04.04.2007
Сообщений: 32
04.04.2007, 18:56
Пардон перепутал с public Компонентовским mouseEnter и mouseExit другое дело что вы не объяснили человеку как их использовать.

Насчёт того что пример программы работать не будет - даже не откомпилируется я тоже согласен - но по другой причине - поскольку у при переносе программы в HTML у меня потерялась фигурная скобка после строчки:
button.addMouseListener(new MouseAdapter()

должно быть так:

Java
1
2
3
4
5
6
7
8
9
button.addMouseListener(new MouseAdapter(){
 
public void mouseEntered(MouseEvent e){
System.out.println('Mouse entered');
}
public void mouseExited(MouseEvent e){
System.out.println('Mouse exited');
}
});
Называется анонимным классом ...
0
mishgun
05.04.2007, 18:06
Вот с такой постановкой я согласен.Так что там два пути мой или ваш.Так что как ковориться на выбор.
0 / 0 / 0
Регистрация: 24.03.2007
Сообщений: 7
13.04.2007, 16:43  [ТС]
Уважаемые программисты.
Я должен пояснить подробнее суть задачи.
Мне необходимо обработать в основном апплете два различных типа событий для кнопки.
1 - наезд мыши.
2 - нажатие.
Поймите В АППЛЕТЕ. А не в классе кнопки.
А если идти Вашими методами, то в итоге в апплете я получаю возможность обработать только единственное событие от кнопки (либо нажатие либо наезд). Если Вы знаете, помогите как различать из апплета вид события от мыши.
Заранее благодарен. Фима.
0
mishgun
14.04.2007, 21:15
Какой конкретно метод Вы используете чтобы обработать нажатие?MouseClicked, MousePressed или
actionPerformed(Который отвечает за все события происходящие в частности с кнопкой)?И потом вы спрашивали как обработать наезд мыши на кнопку и разговора про нажатие не было..
mishgun
14.04.2007, 21:50
Я тут добавил код к коду моего коллеги.В данном случае он будет работать так как вам надо и при наезде и при съезде и при нажатии на кнопку он будет печатать в консоль и закрывать программу
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
import java.awt.*;
import java.awt.event.*;
 
public class TestMouse extends Frame {
 
Button button;
 
public static void main(String args[]){
new TestMouse();
}
 
public TestMouse(){
super('Test');
 
setLayout(new BorderLayout());
setBackground(Color.lightGray);
 
button = new Button('Get mouse over me');
button.addActionListener(new ButtonHandler());
button.addMouseListener(new MouseAdapter(){
 
public void mouseEntered(MouseEvent e){
System.out.println('Mouse entered');
}
public void mouseExited(MouseEvent e){
System.out.println('Mouse exited');
}
});
add(BorderLayout.NORTH ,button);
 
setSize(300, 300);
setVisible(true);
}
public class ButtonHandler implements ActionListener{
 String s;
  public void actionPerformed(ActionEvent e){
   s=e.getActionCommand();
   if(s.equals('Get mouse over me'))
   {
    System.out.println('Button was clicked');
    System.exit(0);
   }
  }
}
}
0 / 0 / 0
Регистрация: 24.03.2007
Сообщений: 7
14.04.2007, 22:25  [ТС]
Извиняюсь. Я новичок, поэтому не корректно поставил вопрос.
Я пошёл по такому пути. В классе MyButton обрабатываю события для мыши :
Java
1
2
3
4
5
6
7
8
9
10
11
this.addMouseListener
    (
    new MouseAdapter()
    {
public void mouseEntered(MouseEvent event) 
        {setLabel(lbl); }
public void mouseExited(MouseEvent event) 
        { setLabel('');     }
public void mouseClicked(MouseEvent event)
        {setBackground(color);}
    });
Вроде бы всё хорошо. Теперь в Классе Апплет пытаюсь обработать события (У меня массив кнопок):
Java
1
2
3
4
5
6
7
8
9
10
11
public boolean action (Event evt, Object obj)
    {
    for(int i=0; i<6; i++)
    for(int j=0; j<6; j++)
    if(evt.target == Fld[i][j] )
      {
      Fld[i][j].setBackground (Me); 
        return true;
          }
          retyrn false;
    }
Однако теперь, реагирую на событие 'Наезд' я не могу заставить апплет отличать его от события 'Нажатие'. Если можете, помогите мне пожайлуста. Огромное Вам спасибо.
0
0 / 0 / 0
Регистрация: 24.03.2007
Сообщений: 7
15.04.2007, 00:34  [ТС]
Увы Ваш пример не добавил ничего нового. Сообщения в консоль снова печатаются непосредственно в обработчике, находящемся в классе кнопки. А мне необходимо различать и обрабатывать события , происходящие с кнопкой и мышью из Апплета, причём, как я уже отмечал выше, у меня несколько кнопок.
К примеру, при наезде на некоторую кнопку, я должен в Апплете просчитать какие-то величины и выдать результат на кнопку, как лейбл. А при нажатии на эту кнопку, выдать другой результат.
Ваш пример, увы, не позволяет мне это проделать, так как обработка событий у Вас происходит внутри класса Кнопки. Я, наверное уже достал? Да?
0
mishgun
15.04.2007, 18:08
попробуйте заменить MouseClicked на actionRerformed(как у меня) потому что интерфейс ActionListener отвечает за все события происшедшие в нашем случае при нажатии на кнопку. И совет - начинайте использовать ActionListener для обработки кнопки вместо event(Evevnt e,Object o) потому что это немного устарело и если Вы будете компилировать Ваш код в JDK1.2.2 вместо J++ вы получите сообщение что event deprecated.
0 / 0 / 0
Регистрация: 04.04.2007
Сообщений: 32
28.04.2007, 15:46
1) Пожалуйста уточните что за класс такой MyButton - он что extends Button ?
2) Определяете ли вы MouseListener и ActionListener для каждой кнопки ?
3) Я очень не советую вам использовать Event model 1.0 вместе с 1.1 - результаты могут быть неопределёными..
0
0 / 0 / 0
Регистрация: 24.03.2007
Сообщений: 7
30.04.2007, 19:59  [ТС]
1)Да. Я наследовал класс Button. Но это не принципиально. Я мог бы обойтись любым другим элементом. Например Canvas. Важно для меня научиться передавать и различать события происходящие с объектом этого моего класса, в базовом классе, к примеру Applet, в котором основная программа и написана.
2)Последнее, что я пробывал, увы безуспешно:
в моём классе кнопки Field() переопределял:
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
public void processMouseEvent(MouseEvent e){
Graphics g;
switch(e.getID())
{
case MouseEvent.MOUSE_PRESSED :
Pressed = true; repaint();  break;
case MouseEvent.MOUSE_RELEASED :
if(ActList != null)
{ActList.actionPerformed ( new ActionEvent   (this,ActionEvent.ACTION_PERFORMED,Str));}
if(Pressed == true)
{Pressed = false;repaint();}break;
case MouseEvent.MOUSE_ENTERED :
if(ActList != null){
ActList.actionPerformed ( new ActionEvent (this,ActionEvent.ACTION_PERFORMED,Str));}break;if
case MouseEvent.MOUSE_EXITEDbreak;  
}
super.processMouseEvent (e);    
}
//************************************************
public void addActionListener(ActionListener List){ActList = AWTEventMulticaster.add (ActList, List);   
enableEvents(AWTEvent.MOUSE_EVENT_MASK );}
//*******************************************
public void removeActionListener(ActionListener List){
ActList = AWTEventMulticaster.remove  (ActList, List);}
3) Далее в Init() класса Applet определяю массив
Своих кнопок. И включаю для каждой слушатель:
Java
1
2
3
4
5
6
for(int i=0; i<6; i++)
for(int j=0; j<6; j++)
{Fld[i][j] = new Field(' * ');
 this.add (Fld[i][j]);
 Fld[i][j].addActionListener (this);
}
Далее пытаюсь обработать события от какой-то из этих кнопок:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public void actionPerformed(ActionEvent e)
{
for(int i=0; i<6; i++)
   for(int j=0; j<6; j++)
{
if(e.getSource () == Fld[i][j])
{ switch(e.getID ())
  {case MouseEvent.MOUSE_PRESSED :  
Fld[i][j].setBackground (Color.black ); break;
   case MouseEvent.MOUSE_ENTERED :  
Fld[i][j].setBackground (Color.gray  ); break;
}
}
Но ничего не получается. Обрабатывается как ни в чём ни бывало только нажатие. А наезд - игнорируется.
else Fld[i][j].setBackground (Color.white ); Fld[i][j].repaint ();
}
}
0
0 / 0 / 0
Регистрация: 04.04.2007
Сообщений: 32
30.04.2007, 20:50
Вот попробовал нечто подобное - всё работает..

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
import java.awt.*;
import java.awt.event.*;
 
public class Test4 extends Frame implements MouseListener{
        
    MM[][] mm;
    public static void main(String args[]){
        System.out.println('Started');
        new Test4();
    }
    
    public Test4(){
        
        setLayout(new GridLayout(6,6));
            
        mm = new MM[6][6];
        
        for (int i=0; i<6; i++)
            for (int j=0; j<6; j++){
                
                mm[i][j] = new MM('*');
                mm[i][j].addMouseListener(this);
                add(mm[i][j]);
            }
            
        
        setSize(300, 300);
        setBackground(Color.lightGray);
        setVisible(true);
        
    }
    
    public void mouseClicked( MouseEvent e ) {
        System.out.println('mouseClicked');
    }
    public void mouseEntered( MouseEvent e ){
        System.out.println('mouseEntered');
        ((MM) e.getSource()).setBackground (Color.gray );
    }
    public void mouseExited( MouseEvent e ) {
        System.out.println('mouseExited');
        ((MM) e.getSource()).setBackground (Color.lightGray);
    }
    public void mousePressed( MouseEvent e ) {
        System.out.println('mousePressed');
        ((MM) e.getSource()).setBackground (Color.black ); 
    }
    public void mouseReleased( MouseEvent e ) {
        System.out.println('mouseReleased');
        ((MM) e.getSource()).setBackground (Color.lightGray);
    }
    
    class MM extends Button {
            
        MM(String text){
            super(text);
        }
        
    }
}
0
0 / 0 / 0
Регистрация: 24.03.2007
Сообщений: 7
02.05.2007, 02:16  [ТС]
Спасибо тебе огромное Влад.Это именно то что мне было нужно. Если тебе не затруднительно, мог бы ты ответить на другой вопрос? Он проще.
Я написал программу на основе класса Frame. И хотел задействовать в ней звуковые эффекты. Но в этом классе нет свойства PLAY(). Можно ли достичь как-нибудь желаемого?
0
0 / 0 / 0
Регистрация: 04.04.2007
Сообщений: 32
02.05.2007, 12:22
Насколько я знаю такая возможность существует только начиная с JDK1.2 при помощи статического метода Applet.getAudio()
0
mishgun
04.05.2007, 20:29
Примерно это выглядит так.Если я правильно понял что Вы имели ввиду.Но это только часть кода и иметй ввиду что Java не поддерживает MP3 файлы(если Вы собираетесь использовать их).И послушайтесь моего совета.Скачайте API-documentation(http://java.sun.com) и многие вопросы у вас отпадут.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.applet.*;
 
 Applet appl = new Applet();
 try{
//место расположения  муз.файла
  URL url = new URL('url');
AudioClip ac = appl.getAudioClip(url);
  if(ac!=null)
  ac.play();
//или loop() если вам нужно непрерывное 
//проигрование файла.
  else{
  System.out.println('No music');
  }
 catch(MalformedURLException e){}
0 / 0 / 0
Регистрация: 24.03.2007
Сообщений: 7
06.05.2007, 19:29  [ТС]
Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.05.2007, 19:29
Помогаю со студенческими работами здесь

Как переместить кнопку на форме перетаскиванием мышки
Как переместить кнопку на форме перетаскивание мышки Drag and Drop

Напишите код который бы при наведение мышки на кнопку перемещал эту кнопку
Такой вопрос. Напишите код который бы при наведение мышки на кнопку перемещал эту кнопку

Как обработать нажатие на кнопку?
В диалоговом окне я создала кнопку &quot;ОК&quot;. Нажав на нее должно закрыться диалоговое окно (так и происходит) и в главном окне должно что-то...

Как обработать кнопку на веб-странице?
Здравствуйте, такая проблема. есть на форму стандартный веб-браузер, когда в него загружается страница нужно нажать на этой странице кнопку...

Как сделать чтобы при на ведении мышки на кнопку, цвет другой кнопки изменялся?
Ребят как сделать чтобы при на ведении мышки на кнопку . цвет другой кнопки изменялся ? Спасибо !


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

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

Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru